From b632690f83ecd473b9fc1c4d5afc09e27d44a647 Mon Sep 17 00:00:00 2001 From: sunag Date: Thu, 26 Feb 2026 17:35:10 -0300 Subject: [PATCH 1/2] Inspector: Introduce `forceWebGL` (#33074) --- examples/jsm/inspector/Inspector.js | 4 + examples/jsm/inspector/tabs/Parameters.js | 2 +- examples/jsm/inspector/tabs/Settings.js | 105 ++++++++++++++++++ examples/jsm/inspector/ui/Style.js | 2 +- .../webgl_video_panorama_equirectangular.jpg | Bin 73360 -> 34329 bytes .../webgpu_compute_particles_rain.jpg | Bin 56077 -> 37380 bytes .../webgpu_compute_particles_snow.jpg | Bin 92094 -> 35412 bytes .../screenshots/webgpu_instancing_morph.jpg | Bin 149600 -> 67932 bytes examples/screenshots/webgpu_mesh_batch.jpg | Bin 157761 -> 77785 bytes .../webgpu_performance_renderbundle.jpg | Bin 235089 -> 122965 bytes .../screenshots/webgpu_postprocessing.jpg | Bin 98460 -> 72447 bytes .../webgpu_postprocessing_afterimage.jpg | Bin 141557 -> 53567 bytes .../webgpu_postprocessing_outline.jpg | Bin 26153 -> 29016 bytes .../webgpu_postprocessing_ssaa.jpg | Bin 45049 -> 22805 bytes examples/screenshots/webgpu_sandbox.jpg | Bin 28035 -> 15680 bytes .../screenshots/webgpu_shadowmap_array.jpg | Bin 50710 -> 20692 bytes examples/screenshots/webgpu_shadowmap_csm.jpg | Bin 21953 -> 22036 bytes examples/screenshots/webgpu_test_memory.jpg | Bin 10831 -> 7255 bytes ...ebgpu_tsl_compute_attractors_particles.jpg | Bin 140504 -> 70766 bytes examples/screenshots/webgpu_tsl_galaxy.jpg | Bin 66786 -> 31548 bytes src/Three.WebGPU.Nodes.js | 2 + src/Three.WebGPU.js | 2 + 22 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 examples/jsm/inspector/tabs/Settings.js diff --git a/examples/jsm/inspector/Inspector.js b/examples/jsm/inspector/Inspector.js index 7ee58798dbb74e..bc00e78a0884ab 100644 --- a/examples/jsm/inspector/Inspector.js +++ b/examples/jsm/inspector/Inspector.js @@ -4,6 +4,7 @@ import { Profiler } from './ui/Profiler.js'; import { Performance } from './tabs/Performance.js'; import { Console } from './tabs/Console.js'; import { Parameters } from './tabs/Parameters.js'; +import { Settings } from './tabs/Settings.js'; import { Viewer } from './tabs/Viewer.js'; import { setText, splitPath, splitCamelCase } from './ui/utils.js'; @@ -59,6 +60,9 @@ class Inspector extends RendererInspector { const consoleTab = new Console(); profiler.addTab( consoleTab ); + const settings = new Settings(); + profiler.addTab( settings ); + profiler.loadLayout(); if ( ! profiler.activeTabId ) { diff --git a/examples/jsm/inspector/tabs/Parameters.js b/examples/jsm/inspector/tabs/Parameters.js index 8e246dd7b78c6e..6f26f875cb6fcd 100644 --- a/examples/jsm/inspector/tabs/Parameters.js +++ b/examples/jsm/inspector/tabs/Parameters.js @@ -314,7 +314,7 @@ class Parameters extends Tab { constructor( options = {} ) { - super( 'Parameters', options ); + super( options.name || 'Parameters', options ); const paramList = new List( 'Property', 'Value' ); paramList.domElement.classList.add( 'parameters' ); diff --git a/examples/jsm/inspector/tabs/Settings.js b/examples/jsm/inspector/tabs/Settings.js new file mode 100644 index 00000000000000..71037dcb42d65e --- /dev/null +++ b/examples/jsm/inspector/tabs/Settings.js @@ -0,0 +1,105 @@ +import { Parameters } from './Parameters.js'; +import { WebGPURenderer, WebGLBackend } from 'three/webgpu'; + +const _init = WebGPURenderer.prototype.init; + +function forceWebGL( enable ) { + + if ( enable ) { + + WebGPURenderer.prototype.init = async function () { + + if ( this.backend.isWebGLBackend !== true ) { + + const parameters = this.backend.parameters; + + this.backend = new WebGLBackend( parameters ); + + } + + return _init.call( this ); + + }; + + } else { + + WebGPURenderer.prototype.init = _init; + + } + +} + +function loadState() { + + let settings = {}; + + try { + + const data = JSON.parse( localStorage.getItem( 'threejs-inspector' ) || '{}' ); + settings = data.settings || {}; + + } catch ( e ) { + + console.error( 'Failed to load settings:', e ); + + } + + const state = { + forceWebGL: settings.forceWebGL || false + }; + + return state; + +} + +function saveState( state ) { + + try { + + const data = JSON.parse( localStorage.getItem( 'threejs-inspector' ) || '{}' ); + data.settings = state; + + localStorage.setItem( 'threejs-inspector', JSON.stringify( data ) ); + + } catch ( e ) { + + console.error( 'Failed to save settings:', e ); + + } + +} + +// + +const state = loadState(); + +if ( state.forceWebGL ) { + + forceWebGL( true ); + +} + +class Settings extends Parameters { + + constructor() { + + super( { name: 'Settings' } ); + + // UI + + const rendererGroup = this.createGroup( 'Renderer' ); + + rendererGroup.add( state, 'forceWebGL' ).name( 'Force WebGL' ).onChange( ( enable ) => { + + forceWebGL( enable ); + saveState( state ); + + location.reload(); + + } ); + + } + +} + +export { Settings }; diff --git a/examples/jsm/inspector/ui/Style.js b/examples/jsm/inspector/ui/Style.js index bd256ab7c3dbbd..a5a2d469858fc1 100644 --- a/examples/jsm/inspector/ui/Style.js +++ b/examples/jsm/inspector/ui/Style.js @@ -775,7 +775,7 @@ export class Style { content: '⋮⋮'; position: absolute; left: 3px; - top: calc(50% - 2px); + top: calc(50% + 1px); transform: translateY(-50%); color: var(--profiler-border); font-size: 18px; diff --git a/examples/screenshots/webgl_video_panorama_equirectangular.jpg b/examples/screenshots/webgl_video_panorama_equirectangular.jpg index 44552a5b61bc15fcc0c6f1f8505d989248ff9686..9f992ba01334c56bbc4cf2b7ba71fa7d16997d68 100644 GIT binary patch delta 34131 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%0A<#Y2EYfyW^OtP8_f=7) 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 diff --git a/examples/screenshots/webgpu_compute_particles_rain.jpg b/examples/screenshots/webgpu_compute_particles_rain.jpg index 0dcbe23fe2e70acb02386c876444d993dc7da12f..e782c45a6354ab8099ea189eeb49733cb4f0502c 100644 GIT binary patch delta 36194 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�BQCK^=7OyMm#R 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

? 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�ol)t10cS{i5ms3Ikyu+= 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 +iY{#~I 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 TU#xTc98c{7)PX&jy`ldA7%Jvy literal 92094 zcmc$_S5#A9_$>-niVXy*Vxfm7O*$${N%$o|=!7CtlbFyuhzeM!5)#l5KuQQ96omwk zs#F01N$6F&^xlhy|2=n{aUbuvFL&*|ANJV$;hSrXwbuORH`l*`e}9;+f%JfSOw7zo zOw6Yj)4yS+$kVs~pWDChOdKps2h1PNGIKDU;b1qu#uI_dXhvgvBMNeEfvZ%FZF?lJdy;C8bnaS$V~`%KC=JrskHP zt!;EhPj6rUz~Iot3Q-3gYb+b>LS+jEE$oOUztuP5``?mZCfjaaEYpoR#6YXoRyIzf23H!Z~WNU z&ElmexnQ*#ar_^MXUCvjp8_fPuWl+!*G$J;ck&~ z)RqCbS>8LzB-Rv56nDm0qQO-n$%QpHmM{m+yZ_ZxG5n-73Lls-R*IxOmgEX&s5M_} zsGt5+mR8Zygwux>h62X~VuBLI-Z%$N>-qt>T=<$5BeNwy028bY)`d^1*#uMR1<%F% zBh6TIlfX)Jc%doSPN^?Wi($t`d#n}yr}#%W$C2N<^Vp@evYJ0eR~P1U5d6fP@oSon z#63As&x-WaWz^>ZL}jUHDl)jb38hqlCelhmQgo~9O5!3(g1R0Q6I_5khy67y*Hl!t zw62vNdaS#f6pSHVUI1~V0BC*rN2((&>?!$1+-jzAmZE%zYLzC_2})@;tswx=I2&2D z%|E5obS6da!+IB5^=$vT=9S}Pjp^t9izfm9m|pGru1?cmMKN(P88bg*?`M!0FSXWx zUnOf-8_U%GV`{4FtxNgv`Am?i;EDFYO~w6?-~1GKm}P4~)!2A=;%-Z{w(Ln;`kmwG zBegY((Q$^R@Y3>x7?EU{lCFo@3Pn3-l2+;_cc+udkgjdm`p0Ww`+t=P|k8fEHLNLVl?G!zQSfm~+U@tf^Hpo#d6)Qrh zISjE#xw~&$8T#mLhZogH+=%Zb*@5rfkIBC+1Jd^|_d@HRQcS9QK|N$MvoIPrYhSXE zAHo!b_TIZqw*UOnCtm#}h~QSFcFShqAeBT*HL~;fhgz2PcgOMF`4Y&)sTjNY>WAhB zqen@ts^3M<`d3!=J1>X$?b{D8lRi8DxkNZ)aPyVw^rb2BvkxBiy(~MBG0&JHWmT0^ z271cM7�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

}dC2V$JUP1-^wKf` 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

eYcFX2x-Q%XMsn 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 diff --git a/examples/screenshots/webgpu_mesh_batch.jpg b/examples/screenshots/webgpu_mesh_batch.jpg index 661d0f2daac02bae4fc6ffab1feb35626db82178..b60a8b40de2462933e836a31a848dea49a8c53ef 100644 GIT binary patch literal 77785 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 literal 157761 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�v~4bF`B0 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%0AoUYJJNxiY1sj=s&{L7DuX|0Y%$WE4qcP8Fz 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

2@Jy@ksT& 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

CXg7|XJKSZ~?s}WU4WVP{nVI8$E55n{F1(#- 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 z�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

3HRk%3$k+eWx#vPpsZChiUkqksL@>m(6GE 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 Jf0+Kv{U68x>$?B| diff --git a/examples/screenshots/webgpu_postprocessing.jpg b/examples/screenshots/webgpu_postprocessing.jpg index debc63a098cd2aab2b80a21f9f92a23f98dba78f..a491a94f50fd6a5b68b0e98f7ee1a45913097a90 100644 GIT binary patch literal 72447 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 literal 98460 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

A?|^ep$)To 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

EvN-^qsPNv12>WmkKXaRLh@ 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 OS5di@^hLvd&HWGUeyPp? diff --git a/examples/screenshots/webgpu_postprocessing_afterimage.jpg b/examples/screenshots/webgpu_postprocessing_afterimage.jpg index 8fd096c97a6313d78355af43a22653cdb0b84c2b..03b706cae9fdcde991a9ad4a8a3e32bc02e93476 100644 GIT binary patch literal 53567 zcmbTdWl$VZ(>A=gyK9goxO;#ENRWl#t|2&qMHT|VEs$UfEEXg{kl-#0EKYED*u{bd zSxB%1f4T3c>iP5i`QG=;oUWNVGgEz?nd&~%SNFrx!v=s{LlvY7z`y_iFdjF+0}AjF zfQj*+_8*D)pN5U~ABlsFjfIVigNys$jz@rxi${Qmi;GW$PeAye_IN~0L`eLflmEF5 z69)?mhY$}J@4v(USK^@?K!Fdq#z?}#pa5V}U|>;TJp8~Yc+?T+zp6bd`acZ=6AK#$ z7w=I8BJxMIv9KPM#d*~9@yg)GF#t9N4kf#&5-yeATRaXgYO(O-Z}^KX%p^*?YP<^KoIBXA7N|I9hwfAC;n`aO0m z3Tzy9QCvzTJ-oMGR2*XA_|(eD-|Bh@IK}mU)7V0$32A{6Ke_(=2hx8L{r>|L@&APA ze*yh3o(Cj=7z^X^g<(+uUI1>fS|Tj?Gr`rC}B#Ppb?r1%?mYSdy`o++=P5z1kN z03OVp{)srD1e|t8`?@!(dlM~ZrzyO^yP4^`Rgl zj5L)wXmW1lXZm|Ua^6JL+ln`O`Znwz?8V6aRm?=b)yr}+|4Bxb?!}W+&5YR?+eKmj z$>pKlX~6BMkcX=>ji!IS-7i8O+uK^~*{!4?Qr4eeSf4jZG?^!KSY7bWWkQo#pNeQw zsHw8|Vd6jk7^o}#zK{iyJ}Mr^o2wqlk|^+&zWM_YS4O6XlbiX}E6aUx3aolf1O^M- z>{$3)^B5}hy~;eD^|TtCa!9rRlaAFvAVr~dIPLzdw>MZLv>thMhClKtmF@Ym48zG{ z6GdD~J%0cAGDRV7@R^h^G$94Sf_H^h*BnbfSflV@ITBOFE=pv#Ul~$l;GUxVa5xwu z=29hO2y0rrxbtCm{=%C^5g*w6i9b9~r>2RY%Dq4Y>6;`b17zM!`ou3_VdXD>%pf!P znl*2-18eDh)pTDBZopuj#RAS7(p5+H)L-?;Iof? zdgVdc=*C^~KTaX4!n$H6G#{27l zjrtuPgk>7;{J`q+q|Gl_a?D#Z>I$+oLOY{bKRrn?uB6?;3A{?H|>z-z|}*Ma%HHLMPE) zy;T43IR{1GH`()1(%J=$Gxf)ks`X9k-!p=J&brFtfG)&UR5HPpN<1sftoeT{tv|_u zUXfS1?FIqPWLgA;h-OBYI@p95 z8dA>`Rx(CN9g%-LKdZgaG2iDtCo_!>UVe-^qFaN)Qu!zotGQl!Qt~n5WR9) zyR0QAq3eFCdu}zz{lq{UT|qLU&8v`1!=aKe=3dW(U54$htF}po8(!k%HHlRO5*M?5 zjmA_|A1uY={Bx)%G1KzP?RzfLqVa>WGKS}0{7Q)8mEqU%#eYiO!@o%6T)ax*v^V~d ze1q@A>O_<4=|$JV?Clr^NR{?;aYZL|!4xsrr?1X{Lc^@`gM{jq=fh~lN@NS1T%qwh z0|SBecUhXj-J(cEiOnOia9WP}CLW(*ALp843($_)Q#jeFTq(P0qF&0?ETSpS=xP2& zZsIq~9RBjS?RS_BvGQJzfBsA?56dR72eDyaq6S zBD{0#eqYbBpqU7SQ%|ov!G^=UE!**zg5fEse1>nRd^u@*D%7eHv9Q;>KSe|K;cH^@ z^DBn6+$SU>qk|0k&vv7;G!DHaW=sS@CH{{SWV+TnE|bjFoG?0yuVOW^q>I^X8c%gv z;WRf3jVZZzI5m5k`v3^2GoKS_W3?*ODBSx%@Is92OC%hRo&jk0{X?0>k;c01>UeeS zWpf@9uECaJ+dVT8fB1yW#>rD@vLN!rcn)ca3VjopGzt3qH;U8& z%kn};@s{eoR!?o*V=jvussXqgn?cbg_>ZIFuTeVmw zH?UFU*sxyEm&w8JJRSgm#zO9jd-ww&%pBhJhbF4=o-xs&J$*V|cN+N)2fQ1jqj&9r_yjMQ*Do*CNi6o0{TimN6Y z!c=D$!j^kr1g~#{Sp=F0RM7*z2i};B_Z9DNo-EY&&0Zbk@67jZcDi==O;F`!mD#481uaMzdYW z%*b9kck8$2)g^6688@$7^UK&*iLA;4BO_zmB=I$2ovqm3`*R@@WSRt=jg<~CRVPQT zQSZElbz*6FgU3LvoNFb4@Ceh%1zGdSJ&#*6EkVbN;06ktu4|XYr z^3jHU%`Hk#HXRmDpSFBG-p;4?ad5;}T6Ka6*7B80m!{Q!ti{P?reh>bXD zJ%i=uyo`&osjZ-QJP_Y8Cg)p1{g+|Fbs++G5mi-sd#IN&N)Nd(Cs=ZtRNOoddu8vN z;(`OhB1%4GZI#{MU(rTk1~{9}hBj1lYHFq-{8>hlu{E}dtGiqGWQCJNb80#a{TUm& zF5m}-{?^bPS9J1|5h6P)5Gd0sN`H0bi#OKdTCn!eP2iCB!eYs*f3yJ>Gm9AQR zib>3$znt*l68YfeK*ZYLV;yE$VWRnc1RZCH%+e?3N3|F$B*rSs^EvB?MWa_l&)wcj zh8)Df^&3IU)Cvj+2^_Z*f9GT+)9+EPbIHi2svq8A3j;${JHx-a0K*JgN2oVmMZIso2UTesX!o_#~qfmV;r z8lpEW`&rX$77ZlZqZWtHjOGg6d((!Hi26PmK2wUYcj?#s8Pr!9dd|Cx~S}Drz6ksAYltw*ENB7|;iu+O({69g%>>l*X^5BZ(AZ!5^3Slr zc6r&p7NoPqi>BepY#lf=r)ZDapz^*@4caM2$TD)1egi#O(^cDcX7t5ggOs)o?Zy9= zy-&s9ZEA@&V_Vu(pUaerJS7h5j<;v^43-_26FqG_GM$w)6VwAEnH)`b&XRXkNh`~j zboW02QgW~ox>;q*<0~zn&NM$x-1nwOD`UW92vBD`RXk8=h>a9I8}w8|0!Mkf&+t|! zFo^PW<$U|4zDWFKVYD*SND&nkCreG|>!!h$!jtL4Bzt)>&e)&8P3LWlQjI=cym`@= zZ21m8`)U}dx76^ZE07_+zcB?SMxZb%v=;BHs|D#>^B5gBUtdgX%PQqnotnP}mp66Q z@V^&7J}ycO!kyoQN!vg7`Pk@sMkat2Pt44`mpmZmo%6L3ez7#(+(^3&)|zUg6Xh77 zRZDc1#mL~pN~m1bo{`G&+E;EmmUMSrfidLQw!jhXv7qf(L)SRj@R-*w4bH^XOx$}0 z-Rz#-un^;{IIRoU{Tx7RZ8`z@NEe`G$t&nym9zzK9SpS89EA|`I-Gnr)*itL;k;a>I z??XARf>H1tkHtFepSL}oAk$6=m0T+CUNz_-Ak;kCadj}SfveI)3-a`9kppaXx{i@Y ztHjrTa!hndxTSAq@j!u6rz~LmfYCZ{+w^cs-n^0z-dro5$nBPCT6{)r6A>OwK#!FL zAE#f|++4r?I{rk0v#3*WanjL=<1Wi?x1RC~I|gaZ&_11Wa`6=Kd#(}{ zL^gA>V$JJ%H1zdi=V9%I+H-n)GYrP7b4)H@Qe6y%?v|OOIk|%I8Opl^no(y=e;vwE z`G?#c(?ka%YTi`s*e`+lV$^E-2za#^K9|?jZTA*^Q4NV29bd?4+XEnS*J*ppgC&@c zI3|whyZT0RGzTZ)kLOs)x33V)ROoQD4y02sbHYnQCb&#in5U=u@b(Wz79d6vb^K|6kAY1cZD;H~p}6Nf{6Z@m3S>==-|%01)o| zA@Ig;G6(wH3=N91&Md2yQsI=ESjZKBI=v*r zgb{itmVh%wkPv(D4t8V_j5w5=TbQps90djmI@tX=Myi08KBSMHAuo z@?OV5usYScQkkQ2z!OCt-q9?R(48w<+iA(wmuB$ar~6QNgM`;hw?FuqaR39^L0zTc z1AN(%krUf_zJ~HL)LMXrEfWgl(|RmXaif)?Ye~O7x;M&aD)y&mkNE-6aH5K&;%Ni- zY8pNOI664+qT+=GTk7q>Zf>$C$&*;{(!D0Esh13dPuL=42R%Gy!fI8^c6q+kf8+G# z+YZlFXJEMfh0|F;;{Zth8?A!*^y~+mf~b@xU6P=V#&$wMojFh6|9RudO2ul$10dPS zbgmNG5cvLQ%M+c(76FdN=$&l>D)OL$BP$9Dywv@!il#+sAp-VKRK>2sO zjvsS!zu3;3k%{eL{Si_u2>ttmXYu+?aE^thp>^zIdWJpcN!FDaD&Sd`rhTJhj2@Q& zSt^!87@h#`Chqiq{5)1lMzDa~swqsWrTqi?MEI5S=;^3uWsf4j7kg`)=<%!F&w6+2 zB1Pw+I_v{>HJN^mE_zpwB0wYMia{Ecr2*dnx7~lv<^RNgBAB4t@#Xspn(g9m`g_K% zYZsvz5e5wVXxNA2cFwj9mA1LKbMa}F;}2`*watK-PBxB4%6KFt9w%l*|7@Lf&(Rw_ zUh4r1aa9Zg>r~`1rU?Y7lauGR!#=RKOuQf_sHlioRF<k577~{|XqDG#D8VRr8v? zc;1+sp>EO~m0dy57^BksjrrY-Y9g~Y`|8dpW1G6h`IQ+xac+A&C5cRn+>3)lRg1Xj z#A_XkZ-T(SIscVqWZ>HUsH-qIo)5{ zY}~FuKea)FN$m1-v+!p-W+Neo4FM6FkcxN!!6+DD*D1o&B|aw{{6nq~jzw|*M`_EI z5{qI{)*yGq-g_3-tTYw$mvUU@#)3z*ce*mrYiEO;F3JA^Ad8o*)qH__F_&6gp~SQw z;gnpp>`uPrX+vM9i_wdNf_dtUqhtiCjvoMTeiH^YTXrqplKtZftO#we6wprv^fRRp z$8O*%u6~K%I2FT}#pcB(csHqU-oQev59HeV8moTD+yf-UmjM^$d9B#-=g!Ud2;!Dk z_1)#pOzncGRjp3DPo?(4hZP3jo}?k_NiJW(8KtU9ChS`3Z2pwDTH1s2wa!bn9Qw|o-R+12unq^j(@xH*lcqp$1B)k1<&xrTGuXpMzE2AEi zZ+~DcskHp``|0Q1J-Ip=1fEnoP0^UVUWrJ?YF~b(O2O$S*z*0u|5{%h05w1tdscE_yF(mid7H2o z?FGg4geWv5zH^XU&w2pFP>I@_#Q<|)fipl2fS20of^r{r8kXnK0GW2a_rJ4W&QBDF z6;0xE@%e}LuXLFRaxfK~Dc+r)X=H0OG&WA(#+AxXHe20&%SOw(l?;8*Duh0}D0dg) zvLh2Vk z3z9}wto;jF)PrvF2f~%)`4m&!P1x!y>=-t}=l*EB^lEd>CpMIBe4PnQn)C>E5ODa? z53ED~ObgMMx_t3I^+H~RyL2~2KaRbOAG>*XU8*|QLQ1-LV8?k#SJN&$G6h<~(#jwR z#+`3ui&s??C_>AIu3;n(VsX~&oo~YGxZ*wtlf)!EWi^EHe<6^8Ai{v*;o)6n%=YtK zLT?VQkM*_t3!SP~T+%64T&#`C{Bb(Qez8L#&uzb}BAFQO|1$kM96z1&N?6E)go<_S z;k+-|HRym6xfGHsnv0MQzwx94h%yZ*vN2OYmkzUHfVtTr_Hx|$&FCUEYV>>T8F5}y zil?X@m>B)n5??ZG8>hNsoM9(V%QCq*$qEazfxphv*%9@FgX@U`h%jbSrNc!|dKNWS z(~67R@Lx@oBu@-l8epd^Vt!DWpxrcGv}xo=!P(^2RHuAymS2Xun@F9mQI9d>sa(@< zu#r`P{1%r27n1&*@JtLNoFYq78OvG)Dd;M1(I%|pqU|nptV$s3X(-w1JDA$try{XW zr^!mKq(A{9tO&(!;hsrl^(}0|OR>^LVBq_!5Sy7_Mvbw&+*!Sv6q4gV-g5lR7|Iya zS2wyDbhbw&ZpknJ=D2*fz;8BA?%0gy{n$MkQOo6xf;*N$8^g3%G%Kyf2a3b{0|8Jz ztGQs%JbUz0pSAdG>NKmd^1-rgrx$zFRrz!!t|hfD?}-+b-zE<6bE-F_5rz}tvTLZW z%3(ppaGbANgZHl2N4L9%npYpmoFe@|NU1toeZ(8mB8(h+^5DP_1rjG)0V~jZqF@n} z%H@ZjU(z*m_=b9DRUAnA-nI{5vv%>w^Hlsz1^>H#b359e3ZA`xayvp%iX8jpyTuf- z=W-wiZMkjGRR%`MA4-|kGz0a?grsDdvLn25pw#wZ0f0b0wXL3$my73h;ZO{;Z%D{8GFaWjG zR}}8%Mc{qc;wFL1Wh?j`Ej8g%T@)N{>mfej$Z4ZOl;l4k2I7Wm2>QazKM9NL#UgI+ z@J~pRQ<<>S3`Vqi9kEZAq;mmVzDIso48yxAP3P3D9*_RW>H$E(rN=TFcK@y-$ug9D zLVUeSDF2?F^TWIb2p{|-=t}mDrFY__1cBt-Tl$`hzxm2-QQ-2QpUU^1Q~|huDiR(s zjPl`NZ}Uvx!6mR(jMbvL(>X}7z&5H%3{S$T$qX-WKJ?iB-eW^!d`3DGeQU&r5ouO@ zS7Dxx#fMdfR#6^q+OmU*({ zYiYh<2FEs943Q#K(9vJ47dlR4f1sS=OpxrZr;Tq2~PO!26AW`74#(KAB#u zCL@p|@He&4CTIfy+RtJu+BrTZ-`)M|M{A|(@3Y-tA2|vl;NxT(1ryT4*Vr(6_ul3F zmS%=O-LiqWOEF0m1_skKHT91{!AWXv_DQx9E8~q+Qw}kQVIYNlSq%{P6mu~!CD2Xq zTVq(q_#DOLlQaR(fs>}VwB9;Gh*UbMcn>dBRfTZWr1}A{ctDi)?qdD=PK%84-zSSd zQq@_Vb-qGE?gE@KYX{&#{BR7e)z93H$Lia^zp2xBr`@#m30a<%^Qt5?M# zGIO@kg5M07w#-4BJ~MP$w?+ey^&4^5C54pabn=_Fr8$jacY?0=SNH#Ul&YSl!Pe($ zfR~I#sH5tLcHcFlB5Ak&a8i&1l16s}Mzy=0B<35NJ@9?f!X@zUzN>J0r}>gr#jlsl z(se4dIk4;xLOrn6V!IgK6RSZR;3>jWu3AL<9p%?l5Bov*SPZ-gzHHYTVH7QObNbXs z!~M#vTV}-+t(OCPmgM4InY)%(vvVDLsicq=@hjq(Bw%TjYnH&x2)Gi9vD95}6M05j z!jz%#TV`;16=Z$mdb)q-%m{&vV$4Z?z?pA>X)a$jl7~}&*8CI2{cf8g{?F~NoxQBC zH_0Amu5$%~PU%uG2N}g~burXP6qC{fDFz-iY;UG8t;tsFu+X~i}Lv3Nawd8?6X3r{=O(HXVw@^|W6$CeW5^hL#5SX zWxOUsvbt02*K`$!t9nnny?wC}pdVkEb?l;wDAxAe(aAJNgMZmI#;_}HIU5o78wOl- z4}7?|J%Dbuh#tj#%KKE^D3o{_0kWu$hPO8&X zd6C0hFVtd|@m#L)jy))_*wVDpQB_r#_OI#ibCWR>SFf-DR`I?X?^wp#9c?}Mg~yx2 zayA&REt@72uLCh6T8!-Fd6A};JDalZaB`U93z11#^dkIf9JBc&{Ib?;W!RPGz>>b$ zN354DeS;ZS-&0+|A8TK$LXJkJ6u})jx-I6LT+CqxPwS0d%>{H1HUkEm*yYysew$ja zTIl$DxJ}a3S6Iq0vk6dBT>!}jva~7^l=b6WoZ;+6>c76FgV)UWY}4HXFcfDz-ZtVt zvgZFKtNMdRi#`oOUp}?df?{M^_1XQ}!P95HY zn9GMZ&X`{trv)J-O*~}w=95&HC7Y9NM^S3H?U zHjq6w8yi+n&>j}xEC&l%lob%efz!jlR?3z(5FBcm*c;}o!UUDZ=s8sUm`{{WR=Tcq z7j92SrMXLPPta1HTa+Y%8!$hZrJ2U4maCaeLl~Z;P6qgs8{9QntduE0^#djWL#eQl z*H=R51~k%$rIH{7Yhqr>L!3JjSvnqv*K;m4hu2pyGvvxUKPI=WxC!;0%)V3=zStSj ztIybI8?=1mBcwQ`)#rjS>My^+JPBhxqR@NNO|CF9`% zSfhEv`bk%fQuX3gYtZns=Hl-MCgcaKuNv01nlj!G=ec7Y+uhd)Sg^SZVGMv4bh6jt zf)>DCa(@>~-dKmbzB6)wuIt48xUNodd3rOSa3rOUNS6SdY`cN*J>{FR>5BkthLt-^ z21fSjH?Ff?DT_{Ru3DI44G5E0(kYc<*>Prt`sBdQmx=74q|SaqKN>*U@Tj}-fLEG+ zQ1$-x<=W+m$H4yOjCB>14s$cmi`rmiZ4#2_D6YI~tou#Rvt$qZV-JI@LHDoztE~F= z>{+cqVe7nwoeL`Uh~@X*#c}HP$;ZAu{FKqOX1MBd(0SB^l_jwa@AgblM$-=5O1|j= zz4}6_iag5-nk4y3+7E*b@;bklOT8QWh&y1LQqPY+8YA&#n1*KwS~4KOdOh~kq~qRp z*2^w^!KEa_G|dQ|VUI~Plt#z38d0EX)WblJW8w`7aWk;2>I`0VY+oBTyMOZ8ddE(r z^+q7iA@|}VKh>awJ)kg&BCTQhlLF?oXDfUx{iNhp`r-kAaWwn1p*7+sx=NDXN>K3F zukmt9!26?Zk;7+pr5>bs*qF|1!qP@$e6vn)-ul%$x$oj?T`J9qkHO26kbWRcCSt(G zZ2OUvFWRt=!cNl0!>Trt4Q#J>M;=kQx`4Nh;xu8Kp6pNqs;4gpa^D^Sde6CH<5{D^ zu6rXrv^pOEhxhm}#FT~e+twScfd((12$|TT7_!XFx>HVvXbhyPcM=90vrTEy$$02L zPV?2_u74aTl#*AG^m4U>be;>LAm=9z_1JX57UtiEUJY&)g+aN(vWl{Ap}K z%RuKyu;EzCi@p}pP)fe{>`!NFubklcoba$PGSYv*9Ywc42Vx51a~I#5zT`nA2=^>m-p0m$+oqFd=C|k1>4eAU zsnYKf@&NGLy5m$=Das3`xkMvotMBk@D!)&ke6L&Z`D+pO5rqADT7r^wtcaLme>O`$ z?qe2g@%X8pXNtc0-2&&_&)J^{-s089sZ@QISrHlw?ek$58kb;6qh9H%mLCAYT_LoBFWPtK? zT_ZkZkdsrruFhy+7b`qBGvC+FnH-VrK0e4WA+Bht0Z7-g71$Jc%)${^3#bQ#dBI&K zK!-Wus44{kgY6yTm4)AXQ4$XTN&Ba~gt#lK$SA$QwMLb*UaZ`(3g#o5vX=U12$^wi^uC)wrL|5~}> z#?r^^>HIMm?R(!PY5>xbe{MwTAyW3M5 zQYpKd%U5oo7mNr9$S|hR2fNG*bMNXQB8Z&FGQ? zzQVv~8mfz@>3Z80Qa_k$xw$z3lv2>;qWm4&MdhE$RT_{ibG1;RC<2BBn$K+kXoG(d zUOn>32ePbbLYHE{ocFUFzg3i67Cqx!QF0C!>Mw2xp2*I|a+YE9itx&9eYf^icK&aw zd-~;@nfuPS?^|7uz$HbD;3Kgg4h_+Ikhagh_)E!lD$0t)Gn~}yIpkHRx81172t8My z+y{U}8e&!M-NN-diJ9p*+*U8|kj2wqzTR{RG0`(~Dop9NN1}wJ0C2WbQP9!DthIlelY9|_Gyb>rhrD{Q7O`vV;@qWEx z@vJMYre(IdveM_~kVIjka{S3(GKzmAl`^qpGFGP4NgLmH?M4SBY{Y+PN zmDTgMb?g0#W0hlZ<2m#Di-|(NpoJL*D~FCmpL)#V z{q1bKeq%CkQ%0%^PQ z>~AboijQv)m<^nBXea*}CI&Wmpo)bfJmSx`t!|l%n(j+ETI5#|?KOh3tN`;7r1?p4 z(-k~W7@>4gFYt@j>({~`*JPxor@f;|?&ipg27CyuaO ziIIh67rn@!0ng5;VYWt|GVByHUTe!{V6N-HHAwp_qw?So@^L?`kv5u>9Uc2rHzJnxrenhpAnvE-#u|q;7gg7{=;=eR;fnpcpoBP=(4SA{CTeICwi_YE z<3+R?-l#?jw7(e!U}ysuS)V>^nKXvMJJsd)+^2m;t3uEU(Q)pFsxWEd4U~OTej&SD z*oA0Kt1)|;1=1W9INddNWTW)-6L$#bOi2o6Y!#H1evE27IlJ#r2gA$wt%{30Q4fH( z#U0%;sSQH~AAaL9i~GqAGkKww;Uln}hO5JW&`V7%jjG`H3Pk}nU;Hil`~zul?=!i( zSjN@FT~kfKrlA?T-Ed9W(|iN`4;QH5>G3xejKyW0gPrPQi%Bj_#q{v^+jFjXoW+_Iv;oEIp35Jd$_q3I;}`LgC{nnpub@~vF}h+>5I9LPBrPR{lBpoVRJ!4|zfJ_Ma}PAaGqzev7&Kvhq)bJx15pl6XqdT$$&MI7jD<)kBaH zJnRrVY63Y*ajj4(oz%)YyRhVVju1dI-NE2|qA;W>`#ybradOT$?`X~bS@6-C;Z(r{ z{&LrG13LzEhqRF4ut^(ZgRZ$J(1ot+;_3mA`Rv`9R5oearG=y^m%n~!15aulR>X$8 zjnwa=B!cISR~;zo^5-f{f|95=?G>y;OY+kv`UHeeSX(ByP}K_JSumRP%|T> zNpgmbN2VvnFiZGq&*k$}baC$*dT{?bc%a0mIUV5#*BZpC@tz8iP!-Z1@`}r@=S-#F zwf8lX+VR63lGz{+O(Rp~E|j2=WZD)k)ud_HvbSqaH@$6HwdK?J-rwVqx_2`M0ycP; zba457&&#;D6W0l_*e}_+3tG=KdNI8qmlkW<HnfCVLP7jx^gTCSe0VAI5FvtJ_{)03{cDxb`RoCbI={iOgl&eQ}ow3IU3$6ul zh{Ae?Cnp^RF|A5(QbOZ%3jvYCsEr+NR(oV;+hH5}?v2-A8c4djE8xCEBgE36D1|A$ zR`+4h7o(`x#N$(LTbJ}rf_EaGmZ*|PpZT{LzKU&Tgy%SV`3sGB3 zf~}yxby}#(RhR9%qK@yZ@33CMmY{2=f;0<@`ZhxBQC8NHNcNTFB&i7Oc+oRX0Fe`S zghqTCw~KohQSsl-{fpIO9r0RMWZHdk>G=14!V2?YPUK7XaJ$63E2mvYWdtS~Cx)K> zmxxi$o;1zO0MyFKgHGVg&Htoa5a)gYlH+r(2)+TpB<3wb5hXyWWfu+_eK6x&Iu5y~g#DEba z$K-TwhCX0Efr!*q_C&wd;k%qwDOA_1=0)G5o07t-eb-8bMyeB!!^av5LCuU@k|~LB ziDwf{AIdI^?OPk+1`JKg97&P8iK&?yd2Pk@R8W!|dX>g)^r|naZF+4znW9Sn`^e>e zhVmN{=gZ_(mok@U z&(CI^{N~NXiuJv~kF@n-Cgbh%-$uuuc&6JOdvCOf;l|gkBKUfH33~IKI5|?6sy%jz zU&u14NBVy5fKDfk*0qqoI$aL;mK2I+v^9gP?gH+=OW$%>%eIQT)a{!XAWd6L@;=xpjJ*8hPx_`T%dUj*X#-UF6hV63!Sc91)#YZO5^hYySGG;z~}E~&p*_^ z8liU=Pz8J@CM_P&GN`wz`PX6c<{y^UQS<}Ac^}?fPhuUor#Ri`0o2I0OW@=qh|lZv z{K}w+apm^A^{31Y`dkwXL$AA6RR5f+x{S!ROmH9^$}a%zQP!L#rk*PG?)bBTIZ?7} zNYwRx7ht7sQ!O0Fc^;|_U=VPr0<@9TnG&&cqY zoGU9WDeStqX87wCW%dg8WX(fKr0;FR@Wl|Jck*Ibz=D3A;KzF8OKjW0kSn(S$;=5R zZ%;X!gpypPlYWwZE{`u#uqkkVT7On_YeOcjXpV z%{Fb{xn5>T8%+%g8PiKUUJ^SFH+$&@r0vU<8D{9Nh=@$DxhG5ZnUn26Bm7PeJ@l&` zvOr?vLVxdRWc*}%&Rki7h4ml>Sd{U<`%bPXGKTI+^!MVSEtD?et@?Nyg zLVo9mzS^l;N8AVne0I*+`pf%TSFYIAolbwH zy^7@rDi-16X#zZp_gb8dWjUsFzm5@Jo>3IsNuDY=SqUfgBqAl)kWy6W#>2{IX(L!x zz~9FY5(DbTuwo~XZ9qIjImiwbXF-p3HDoO5GR@$dS>;BueKQ0fPI|fiG2v$M$ zj}t$8c`zn=`b2CCYuLgU9{^QJL2YlYPw}6oqBI>Y>zH4^ijOB{nG>-NJB#*kcg9}l zPdLBt8gmmxeLN7cqL(b-Dbb^Tn=!m;`M zgFZ9)3s{D5Nw%lw*M|uLmO%y~OqG$48!>x1`y|Eg?g3me~cBNfjgp|>`#)7<{?ECjc>zzh7@!x1EFeHG{6e7~s}d!?FQfRWbY*KXsfO<;)IZ95O(ZAg-p=Y~~>jsO#5p`pF>>{L1 zJCEt{DtDpQ#SC^@2fe1-{-z@Q>;R`y@Y0~XlS0fk`8!7TW3K+RZTVHT+VUDo8Db@D zD8cZC9W;mZ`zHp$o|3s>)LryGPK9FqEAq-qSZg2ICU$PoMvl*8(sPNhuXzaIJb>0s zQcL!Ht7!5YsnR1?lxt7OzFy(A$ zUJ4~dM|m>d<9v3LsOb~PnZjd@x7xaI#36i+=Z%1$bTk9)Ya(zzNmV5AFZ_cjn(~a1k z!MwHHrv#+z&KY&|T0N(FuSo2K5EfkuU)-vLc^o7SX>M&CaB%XNAFmR4d?{P##NP_c z(CKjLob+8w|7HIVIx=dsXwi@LLpsUjS>*Vomg2K4;tQqOIZPn6|bd=DOV zt+&R~d5yb4HBK|v(tcHKR=`^{WPd;}WKwfK7- zx(DxQX-eX%jIei6Tb_D>G}`(wI7t<9gy!ccm6XWYZyB*Z3|O1&Yd63oKrpd6rbFGpG-0<9}sUs#4GrWq)rqntvAxb zIj&p(dIhuCWrEjWHt?jxI!ky_^^#Bgoy(h@W~9Q=jnA_GN=M_7k)~3$HY0R@>zqQEPO!odU$tj2%UuXz5k4E}VCnj+niu;%2K>_g!oBGIzb;pn zHQog-g3PQmi|_Fp@08fJz8}$KT1$H5v~l|X7>KRSw^wvfS=q7Lho}rLj~CtkogL>6 zrYWdSL(VVP&uterXFO86!Y?`pSgSnBKWLMvy2^=yUCR+{g4hn5iU$t>C-#9~OO)T{ zLw*kpKhhd`3iKl*Bi5Q7=<14MbXS4PAwh}Yi<&dlSBvH!#l{2LV9}`P^!ZB<$6*IN zC+h$xwKsotjrmk1TQUqg#vFIh&)`y@0( zO#S0E+bfr^MxaXF)kE4eHdh6$?$zfyju{p6%_n6YvMSYP=wS2pn$hc(J@f{YKX9Gn zY*e)cQ#Mz(Zp^!Ju<2P)z32-5l@dKu0)(H7|HWy@8|Yof>p35=n;htq208GrT$MX{ zePaCqCbv-JhqZdFMi^j)R2)u}v-Qe1q0ko1W+ynr%|;GDx?s5!z4_fgk^HvW zboE2$+UXW38e%0-M8HYvAKx;#2FO)t88>_*kdi*o$RaZzSDqbG+73xVGyQ2#_I_G}_Jd9(Uem|uH z+flR#SjsGl(kA5uWpj*=N(Q$b7=e;QG>)tgc|l_YGh_@Ck%5iJJn{g?IR=2OZA%)( zt?r+3{gtSjg__Wq%oDB*Lp!#PPCjO1k9_wu0hdttI$`B29(nl|$@ z@+)MnJ$)#)f@;d*#J3G=FO(FZW%DtO-SO{_TydSb=M;1rzbmmmn_++A9Yt&)o;JC< zoCP-$g)YRNOSc2ANhE$XQH-ie%XU;FDzmcP_x}Jfx@1M#Yl5w|3wDvDN7_*Esz>|` zsQMGrs8LtD?frgYg5CBmYmBDa%4u)yXL(~g-UL%3qLQoT5AWkAu1G7Bk;T;6Hva&x zKQiiC$=yHesGr%oc+-;l$5^(OSGXd3Nh8=HjNl>MvQ&a?=9~a?9zP17g<<^+ISm|7a1oVYI!X# zUb}gH zYvrK{YD=T(viP3*4Hm}A=I;LC-{wiw`HWBqly6W}hsbZ3?#KWF0X0gSuQdp!rmAuDL&{zCO0~r(1HpuCnTJ+F40;=%1P;Wt9NeB z>(y%>pQ^EQsVb7@man_JGbE2ilG$#x7#SQQ#>o;0j_B0`E&#^kw0zhnGUS3mBNy!2 zyqD>>^}l!2i+i_5{{Vx$BjP_CYm-^ati>E~N-rn9xRe`Z^7tV6MYm!;fddiuKmoH` z(x+0jMx3_R{WSEyPS>`}b1JoAPASW){{V;o0D^i?fOQQkMfiVmm%46`KAz2|>IpP< zk9Qoi8D}ZM_pu| z&emOf+3(W(yXs z$;{JK-A4s`_tN@3b?UEfzm3{@Dty{&uFb7>dugNE-IBeC;-5yn)hzWbXI7RgLv%Fz z%~DYl7#)Y&6Ub=QA-05;-U)Vm#?2Zj1!`2H=&))Qi{Kqz{_eutP?4o|U?oJ3D1%)z zapF}#)3^XCyMRK;xkk*CVHUX^)!*r@x9jTqJqI~WMY@Sz->%x}(|g;?zNd|RESe{k z;(Os6T55LD&#|VCYp6V<51E97l>ylmOSS@tE;h%Ffw!C#J?FExn^v{$ZvFPP?4E?s ztem-5M{dhs$I{)_yW1vT6!@M$6hW)A*-gv3#}QXT=NnwO`>$G3lBZVbS~tCuwVl?_-g+&s>(P-nInw5}yx;sA zS@d?)(9ra$HS;!`eXnX+@d~8(+C`9pSe#2LEOB{~vWVqRCPHwBYeO2AErlA!QIeN5 zou#WH7$+N*ZmE#8KzjaOPU>7?7+TlBx5b=5u2Z{nZAeP`i4<+ZfX9JD06M=KPZ zfLuO94gk&=95IaG0vInHS}KxG8veb1uJ+TZ)mDvsH2s}bXZ?R)@aHS1X^`K=brus~ zjpRwK({WY-%Bk}mHX#bcwIsy{X*Bmb9iPABH9+YxHnCC9iGYKM~ug`%sCM< zvyy}WRQ=)(D&pj$rvCuvrv10mw^OIuxZ(YmD%IZh*YEB9T&1IF5cr5blOCfRU9q{17&bH}|Q8cV3#>KCtntz2B87SV{-7UpJBigM>WdNY%T%M4?k z!%k%>USHSsxvw&muRHDc{{UO{)S_J;U}K2LS#U&|$#OY7A5+KBXFSwtb35IMa?u&T zcWdPZRaQd8{J}tD.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

@ky%1@_qN;UWRTbIh3sQ}V9*mB~=;kvnRTm%M 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

Li1zExc@Qg5h1IGYSc7>oAM?-gEN&Tf>0;^ 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 literal 26153 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 literal 45049 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

eH?uo)FGu5xi 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 G&i)rGC`qIM diff --git a/examples/screenshots/webgpu_sandbox.jpg b/examples/screenshots/webgpu_sandbox.jpg index 7b20145c7b8395fa16288dcdf261fbdd465b2349..511cf317b30e75b8876fa2ddb51b7438f29c7008 100644 GIT binary patch literal 15680 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 literal 28035 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 CKhs(O literal 50710 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 delta 18199 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

nd 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 literal 10831 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∨OC}UDL&sOQD=J~5 zs?XX4R!CZ2PyIC9taS(3N)!8&vC%(}V&`FF8xu8II`&Ps3xR`;?P^r~GuJNBeo~H; zHzZ9;>~R}9??K;U91v0 zFrtpr%8w4ks#{f-lgr7JN^(Qoj9N20)}*J`O)Kn0<_6*n`~5Io^Y8zv>-V zqWgvU*^R{b4d;(P6{YNzpIc)FXee#W&xpf1NBtUZ>v)wfh^Q{x+*Y zm@*~Tsod8{`AURPSUB@_-f&CxOMJkjDCY7fyYJN2B(99zj5DIt75OwFB5hmRfZLx#tnv{$EH55Imh{uNsSZz^Y4R3 zq|$`o4ZgYeJ@>|`S6ah8)G?oANhqr^Sg$d8m0#5;!0 zFPYC4_tbv!nYnk0E*%pU(excllIbtO!EN?M1#E+Pu=kV+em|m9^B+L`3t)vHI(po+ zVL2YTqqmx$ezZYfL5{fgb4{jtE~KfhP8^+2rS_s1d!6TM!-PoCwT<|aE{zw)$Yujlsa$5V$6M1E{M z6nS2XkM)jycG zGYxn%H^9)vSCWah-=5JTX`Tsf|!> zz(&J9SI%XQKC@*KA>i1m*!^|3R*kllMBk$Nu@rs4c^0pKBH^x95ms{ow?8UycVJrm zTSL6;fP_WmVX^dO*j>gEWZg>3!?h=68$vryyD9g>+5OLSWSWO=g`9cZe5jFqs3$$~ zdV*!ul~W4V0#ATTV4W;dtJTAYmEWu#y&iJUM6{0-oiY)Ap>wytfAYqFOvuHJBa;GV z%IThsiH4bgBL9yBSn=y*YvpETr)MV6%_uqMNayjNl7}s5l$cw@82b5Zsaq9BZ7XVf z!-4_>z5FE50`2+cIj(}~ij-PP;=XPm;z^hy_c;&nAlxm$sx+XZkkYW(d4BYo@UGGy zsJ?u*O$CoUG%(e>_G2=g3;AL{u1lb(kE>qVmfVMg-5 zhkk;338gdjpoICj*n?5&YV~n3$+KSGpjLdr*UK%qdlrBjbm75Sg2 z0&rNeiRdE87@Eo6hhvjHjTpzV(97%NIO#w23s9OI{PL#e+j~cBHd;%--D@Z3jtO6; zSlEAq#__MTub09x#0zY&4#QM4;l{=G0%(^n>4&^R4EG+~7np=3e6`u~yRWhx*7G?k z8Hmw!fufZiV`vLAV)L1Hp)=rgOfYibIIk;}0Sx6PC$l?K4;PzfQeC_cO t8jMzr=;Oi_$kv$$`r&D9-{2;Ihe3Lk!Y`Lv0j|Y=1GN7Yw!zOE{5Oot#dZJy diff --git a/examples/screenshots/webgpu_tsl_compute_attractors_particles.jpg b/examples/screenshots/webgpu_tsl_compute_attractors_particles.jpg index e284faa0dd8f0541dd45ffddcc4527ae009d3649..6cf8505862485eee66722244fe803e7e14e6e52e 100644 GIT binary patch literal 70766 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 literal 140504 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 J@8te9{a<&RKK=jz diff --git a/examples/screenshots/webgpu_tsl_galaxy.jpg b/examples/screenshots/webgpu_tsl_galaxy.jpg index 82569f11b96153dca03f37e8e9c7d8ebea0bb9fd..7bf9089f8df0b06541d213715c751b5cb86a4588 100644 GIT binary patch delta 29600 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 cY+XkRYgC)vEfTxj2uDH1pfg4*(i#dLI3~& literal 66786 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 d(s)+_Z Date: Thu, 26 Feb 2026 17:37:56 -0300 Subject: [PATCH 2/2] Updated builds. --- build/three.cjs | 30 ++++++++++++++++---- build/three.core.js | 16 ++++++++--- build/three.core.min.js | 2 +- build/three.module.js | 16 +++++++++-- build/three.module.min.js | 2 +- build/three.webgpu.js | 50 +++++++++++++++++++++------------ build/three.webgpu.min.js | 2 +- build/three.webgpu.nodes.js | 50 +++++++++++++++++++++------------ build/three.webgpu.nodes.min.js | 2 +- 9 files changed, 117 insertions(+), 53 deletions(-) diff --git a/build/three.cjs b/build/three.cjs index 696199f383910a..8b735dea755e4c 100644 --- a/build/three.cjs +++ b/build/three.cjs @@ -15292,7 +15292,7 @@ class Triangle { _v1$5.subVectors( a, b ); // strictly front facing - return ( _v0$3.cross( _v1$5 ).dot( direction ) < 0 ) ? true : false; + return _v0$3.cross( _v1$5 ).dot( direction ) < 0; } @@ -24520,10 +24520,11 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Color} color - The target object that is used to store the method's result. + * @return {Color} A reference to the target color. */ getColorAt( index, color ) { - color.fromArray( this.instanceColor.array, index * 3 ); + return color.fromArray( this.instanceColor.array, index * 3 ); } @@ -24532,10 +24533,11 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Matrix4} matrix - The target object that is used to store the method's result. + * @return {Matrix4} A reference to the target matrix. */ getMatrixAt( index, matrix ) { - matrix.fromArray( this.instanceMatrix.array, index * 16 ); + return matrix.fromArray( this.instanceMatrix.array, index * 16 ); } @@ -24621,6 +24623,7 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Color} color - The instance color. + * @return {InstancedMesh} A reference to this instanced mesh. */ setColorAt( index, color ) { @@ -24631,6 +24634,7 @@ class InstancedMesh extends Mesh { } color.toArray( this.instanceColor.array, index * 3 ); + return this; } @@ -24640,10 +24644,12 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Matrix4} matrix - The local transformation. + * @return {InstancedMesh} A reference to this instanced mesh. */ setMatrixAt( index, matrix ) { matrix.toArray( this.instanceMatrix.array, index * 16 ); + return this; } @@ -24654,6 +24660,7 @@ class InstancedMesh extends Mesh { * @param {number} index - The instance index. * @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights * of a single instance. + * @return {InstancedMesh} A reference to this instanced mesh. */ setMorphAt( index, object ) { @@ -24684,6 +24691,7 @@ class InstancedMesh extends Mesh { array[ dataIndex ] = morphBaseInfluence; array.set( objectInfluences, dataIndex + 1 ); + return this; } @@ -47467,7 +47475,7 @@ class MaterialLoader extends Loader { if ( typeof json.vertexColors === 'number' ) { - material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + material.vertexColors = json.vertexColors > 0; } else { @@ -59910,7 +59918,7 @@ var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetB var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;"; -var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; +var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#if defined( USE_PACKED_NORMALMAP )\n\t\tmapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) );\n\t#endif\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; @@ -66449,6 +66457,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '', parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '', + parameters.packedNormalMap ? '#define USE_PACKED_NORMALMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.anisotropy ? '#define USE_ANISOTROPY' : '', @@ -66900,6 +66909,12 @@ class WebGLShaderStage { } +function isPackedRGFormat( format ) { + + return format === RGFormat || format === RG11_EAC_Format || format === RED_GREEN_RGTC2_Format; + +} + function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) { const _programLayers = new Layers(); @@ -67110,6 +67125,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, + packedNormalMap: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap && isPackedRGFormat( material.normalMap.format ), metalnessMap: HAS_METALNESSMAP, roughnessMap: HAS_ROUGHNESSMAP, @@ -67414,6 +67430,8 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin _programLayers.enable( 20 ); if ( parameters.gradientMap ) _programLayers.enable( 21 ); + if ( parameters.packedNormalMap ) + _programLayers.enable( 22 ); array.push( _programLayers.mask ); _programLayers.disableAll(); @@ -77220,7 +77238,7 @@ class WebGLRenderer { generateMipmaps: true, type: hasHalfFloatSupport ? HalfFloatType : UnsignedByteType, minFilter: LinearMipmapLinearFilter, - samples: capabilities.samples, + samples: Math.max( 4, capabilities.samples ), // to avoid feedback loops, the transmission render target requires a resolve, see #26177 stencilBuffer: stencil, resolveDepthBuffer: false, resolveStencilBuffer: false, diff --git a/build/three.core.js b/build/three.core.js index 5db6cf4a619270..2f94832725381b 100644 --- a/build/three.core.js +++ b/build/three.core.js @@ -15312,7 +15312,7 @@ class Triangle { _v1$5.subVectors( a, b ); // strictly front facing - return ( _v0$2.cross( _v1$5 ).dot( direction ) < 0 ) ? true : false; + return _v0$2.cross( _v1$5 ).dot( direction ) < 0; } @@ -24540,10 +24540,11 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Color} color - The target object that is used to store the method's result. + * @return {Color} A reference to the target color. */ getColorAt( index, color ) { - color.fromArray( this.instanceColor.array, index * 3 ); + return color.fromArray( this.instanceColor.array, index * 3 ); } @@ -24552,10 +24553,11 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Matrix4} matrix - The target object that is used to store the method's result. + * @return {Matrix4} A reference to the target matrix. */ getMatrixAt( index, matrix ) { - matrix.fromArray( this.instanceMatrix.array, index * 16 ); + return matrix.fromArray( this.instanceMatrix.array, index * 16 ); } @@ -24641,6 +24643,7 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Color} color - The instance color. + * @return {InstancedMesh} A reference to this instanced mesh. */ setColorAt( index, color ) { @@ -24651,6 +24654,7 @@ class InstancedMesh extends Mesh { } color.toArray( this.instanceColor.array, index * 3 ); + return this; } @@ -24660,10 +24664,12 @@ class InstancedMesh extends Mesh { * * @param {number} index - The instance index. * @param {Matrix4} matrix - The local transformation. + * @return {InstancedMesh} A reference to this instanced mesh. */ setMatrixAt( index, matrix ) { matrix.toArray( this.instanceMatrix.array, index * 16 ); + return this; } @@ -24674,6 +24680,7 @@ class InstancedMesh extends Mesh { * @param {number} index - The instance index. * @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights * of a single instance. + * @return {InstancedMesh} A reference to this instanced mesh. */ setMorphAt( index, object ) { @@ -24704,6 +24711,7 @@ class InstancedMesh extends Mesh { array[ dataIndex ] = morphBaseInfluence; array.set( objectInfluences, dataIndex + 1 ); + return this; } @@ -47487,7 +47495,7 @@ class MaterialLoader extends Loader { if ( typeof json.vertexColors === 'number' ) { - material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + material.vertexColors = json.vertexColors > 0; } else { diff --git a/build/three.core.min.js b/build/three.core.min.js index a2bcda469ce8de..18f5844e4518e4 100644 --- a/build/three.core.min.js +++ b/build/three.core.min.js @@ -3,4 +3,4 @@ * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT */ -const t="184dev",e={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},i={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},s=0,r=1,n=2,a=3,o=0,h=1,l=2,c=3,u=0,d=1,p=2,m=0,y=1,g=2,f=3,x=4,b=5,v=6,w=100,M=101,S=102,_=103,A=104,T=200,z=201,C=202,I=203,B=204,k=205,O=206,P=207,R=208,N=209,V=210,E=211,F=212,L=213,j=214,D=0,W=1,U=2,q=3,J=4,X=5,Y=6,H=7,Z=0,G=1,$=2,Q=0,K=1,tt=2,et=3,it=4,st=5,rt=6,nt=7,at="attached",ot="detached",ht=300,lt=301,ct=302,ut=303,dt=304,pt=306,mt=1e3,yt=1001,gt=1002,ft=1003,xt=1004,bt=1004,vt=1005,wt=1005,Mt=1006,St=1007,_t=1007,At=1008,Tt=1008,zt=1009,Ct=1010,It=1011,Bt=1012,kt=1013,Ot=1014,Pt=1015,Rt=1016,Nt=1017,Vt=1018,Et=1020,Ft=35902,Lt=35899,jt=1021,Dt=1022,Wt=1023,Ut=1026,qt=1027,Jt=1028,Xt=1029,Yt=1030,Ht=1031,Zt=1032,Gt=1033,$t=33776,Qt=33777,Kt=33778,te=33779,ee=35840,ie=35841,se=35842,re=35843,ne=36196,ae=37492,oe=37496,he=37488,le=37489,ce=37490,ue=37491,de=37808,pe=37809,me=37810,ye=37811,ge=37812,fe=37813,xe=37814,be=37815,ve=37816,we=37817,Me=37818,Se=37819,_e=37820,Ae=37821,Te=36492,ze=36494,Ce=36495,Ie=36283,Be=36284,ke=36285,Oe=36286,Pe=2200,Re=2201,Ne=2202,Ve=2300,Ee=2301,Fe=2302,Le=2303,je=2400,De=2401,We=2402,Ue=2500,qe=2501,Je=0,Xe=1,Ye=2,He=3200,Ze=3201,Ge=3202,$e=3203,Qe=0,Ke=1,ti="",ei="srgb",ii="srgb-linear",si="linear",ri="srgb",ni="",ai="rg",oi="ga",hi=0,li=7680,ci=7681,ui=7682,di=7683,pi=34055,mi=34056,yi=5386,gi=512,fi=513,xi=514,bi=515,vi=516,wi=517,Mi=518,Si=519,_i=512,Ai=513,Ti=514,zi=515,Ci=516,Ii=517,Bi=518,ki=519,Oi=35044,Pi=35048,Ri=35040,Ni=35045,Vi=35049,Ei=35041,Fi=35046,Li=35050,ji=35042,Di="100",Wi="300 es",Ui=2e3,qi=2001,Ji={COMPUTE:"compute",RENDER:"render"},Xi={PERSPECTIVE:"perspective",LINEAR:"linear",FLAT:"flat"},Yi={NORMAL:"normal",CENTROID:"centroid",SAMPLE:"sample",FIRST:"first",EITHER:"either"},Hi={TEXTURE_COMPARE:"depthTextureCompare"};const Zi={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Gi(t,e){return new Zi[t](e)}function $i(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Qi(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Ki(){const t=Qi("canvas");return t.style.display="block",t}const ts={};let es=null;function is(t){es=t}function ss(){return es}function rs(...t){const e="THREE."+t.shift();es?es("log",e,...t):console.log(e,...t)}function ns(t){const e=t[0];if("string"==typeof e&&e.startsWith("TSL:")){const e=t[1];e&&e.isStackTrace?t[0]+=" "+e.getLocation():t[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return t}function as(...t){const e="THREE."+(t=ns(t)).shift();if(es)es("warn",e,...t);else{const i=t[0];i&&i.isStackTrace?console.warn(i.getError(e)):console.warn(e,...t)}}function os(...t){const e="THREE."+(t=ns(t)).shift();if(es)es("error",e,...t);else{const i=t[0];i&&i.isStackTrace?console.error(i.getError(e)):console.error(e,...t)}}function hs(...t){const e=t.join(" ");e in ts||(ts[e]=!0,as(...t))}function ls(){return"undefined"!=typeof self&&void 0!==self.scheduler&&void 0!==self.scheduler.yield?self.scheduler.yield():new Promise(t=>{requestAnimationFrame(t)})}function cs(t,e,i){return new Promise(function(s,r){setTimeout(function n(){switch(t.clientWaitSync(e,t.SYNC_FLUSH_COMMANDS_BIT,0)){case t.WAIT_FAILED:r();break;case t.TIMEOUT_EXPIRED:setTimeout(n,i);break;default:s()}},i)})}const us={[D]:1,[U]:6,[J]:7,[q]:5,[W]:0,[Y]:2,[H]:4,[X]:3};class ds{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return void 0!==i&&(void 0!==i[t]&&-1!==i[t].indexOf(e))}removeEventListener(t,e){const i=this._listeners;if(void 0===i)return;const s=i[t];if(void 0!==s){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}}dispatchEvent(t){const e=this._listeners;if(void 0===e)return;const i=e[t.type];if(void 0!==i){t.target=this;const e=i.slice(0);for(let i=0,s=e.length;i>8&255]+ps[t>>16&255]+ps[t>>24&255]+"-"+ps[255&e]+ps[e>>8&255]+"-"+ps[e>>16&15|64]+ps[e>>24&255]+"-"+ps[63&i|128]+ps[i>>8&255]+"-"+ps[i>>16&255]+ps[i>>24&255]+ps[255&s]+ps[s>>8&255]+ps[s>>16&255]+ps[s>>24&255]).toLowerCase()}function xs(t,e,i){return Math.max(e,Math.min(i,t))}function bs(t,e){return(t%e+e)%e}function vs(t,e,i){return(1-i)*t+i*e}function ws(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Ms(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const Ss={DEG2RAD:ys,RAD2DEG:gs,generateUUID:fs,clamp:xs,euclideanModulo:bs,mapLinear:function(t,e,i,s,r){return s+(t-e)*(r-s)/(i-e)},inverseLerp:function(t,e,i){return t!==e?(i-t)/(e-t):0},lerp:vs,damp:function(t,e,i,s){return vs(t,e,1-Math.exp(-i*s))},pingpong:function(t,e=1){return e-Math.abs(bs(t,2*e)-e)},smoothstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(ms=t);let e=ms+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*ys},radToDeg:function(t){return t*gs},isPowerOfTwo:function(t){return!(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,i,s,r){const n=Math.cos,a=Math.sin,o=n(i/2),h=a(i/2),l=n((e+s)/2),c=a((e+s)/2),u=n((e-s)/2),d=a((e-s)/2),p=n((s-e)/2),m=a((s-e)/2);switch(r){case"XYX":t.set(o*c,h*u,h*d,o*l);break;case"YZY":t.set(h*d,o*c,h*u,o*l);break;case"ZXZ":t.set(h*u,h*d,o*c,o*l);break;case"XZX":t.set(o*c,h*m,h*p,o*l);break;case"YXY":t.set(h*p,o*c,h*m,o*l);break;case"ZYZ":t.set(h*m,h*p,o*c,o*l);break;default:as("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:Ms,denormalize:ws};class _s{constructor(t=0,e=0){_s.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,s=t.elements;return this.x=s[0]*e+s[3]*i+s[6],this.y=s[1]*e+s[4]*i+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=xs(this.x,t.x,e.x),this.y=xs(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=xs(this.x,t,e),this.y=xs(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(xs(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(xs(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),s=Math.sin(e),r=this.x-t.x,n=this.y-t.y;return this.x=r*i-n*s+t.x,this.y=r*s+n*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class As{constructor(t=0,e=0,i=0,s=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=s}static slerpFlat(t,e,i,s,r,n,a){let o=i[s+0],h=i[s+1],l=i[s+2],c=i[s+3],u=r[n+0],d=r[n+1],p=r[n+2],m=r[n+3];if(c!==m||o!==u||h!==d||l!==p){let t=o*u+h*d+l*p+c*m;t<0&&(u=-u,d=-d,p=-p,m=-m,t=-t);let e=1-a;if(t<.9995){const i=Math.acos(t),s=Math.sin(i);e=Math.sin(e*i)/s,o=o*e+u*(a=Math.sin(a*i)/s),h=h*e+d*a,l=l*e+p*a,c=c*e+m*a}else{o=o*e+u*a,h=h*e+d*a,l=l*e+p*a,c=c*e+m*a;const t=1/Math.sqrt(o*o+h*h+l*l+c*c);o*=t,h*=t,l*=t,c*=t}}t[e]=o,t[e+1]=h,t[e+2]=l,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,s,r,n){const a=i[s],o=i[s+1],h=i[s+2],l=i[s+3],c=r[n],u=r[n+1],d=r[n+2],p=r[n+3];return t[e]=a*p+l*c+o*d-h*u,t[e+1]=o*p+l*u+h*c-a*d,t[e+2]=h*p+l*d+a*u-o*c,t[e+3]=l*p-a*c-o*u-h*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,s){return this._x=t,this._y=e,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,s=t._y,r=t._z,n=t._order,a=Math.cos,o=Math.sin,h=a(i/2),l=a(s/2),c=a(r/2),u=o(i/2),d=o(s/2),p=o(r/2);switch(n){case"XYZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"YXZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"ZXY":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"ZYX":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"YZX":this._x=u*l*c+h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c-u*d*p;break;case"XZY":this._x=u*l*c-h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c+u*d*p;break;default:as("Quaternion: .setFromEuler() encountered an unknown order: "+n)}return!0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,s=Math.sin(i);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],s=e[4],r=e[8],n=e[1],a=e[5],o=e[9],h=e[2],l=e[6],c=e[10],u=i+a+c;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-o)*t,this._y=(r-h)*t,this._z=(n-s)*t}else if(i>a&&i>c){const t=2*Math.sqrt(1+i-a-c);this._w=(l-o)/t,this._x=.25*t,this._y=(s+n)/t,this._z=(r+h)/t}else if(a>c){const t=2*Math.sqrt(1+a-i-c);this._w=(r-h)/t,this._x=(s+n)/t,this._y=.25*t,this._z=(o+l)/t}else{const t=2*Math.sqrt(1+c-i-a);this._w=(n-s)/t,this._x=(r+h)/t,this._y=(o+l)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(xs(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(0===i)return this;const s=Math.min(1,e/i);return this.slerp(t,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(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,s=t._y,r=t._z,n=t._w,a=e._x,o=e._y,h=e._z,l=e._w;return this._x=i*l+n*a+s*h-r*o,this._y=s*l+n*o+r*a-i*h,this._z=r*l+n*h+i*o-s*a,this._w=n*l-i*a-s*o-r*h,this._onChangeCallback(),this}slerp(t,e){let i=t._x,s=t._y,r=t._z,n=t._w,a=this.dot(t);a<0&&(i=-i,s=-s,r=-r,n=-n,a=-a);let o=1-e;if(a<.9995){const t=Math.acos(a),h=Math.sin(t);o=Math.sin(o*t)/h,e=Math.sin(e*t)/h,this._x=this._x*o+i*e,this._y=this._y*o+s*e,this._z=this._z*o+r*e,this._w=this._w*o+n*e,this._onChangeCallback()}else this._x=this._x*o+i*e,this._y=this._y*o+s*e,this._z=this._z*o+r*e,this._w=this._w*o+n*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Ts{constructor(t=0,e=0,i=0){Ts.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return void 0===i&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Cs.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Cs.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*s,this.y=r[1]*e+r[4]*i+r[7]*s,this.z=r[2]*e+r[5]*i+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=t.elements,n=1/(r[3]*e+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*s+r[12])*n,this.y=(r[1]*e+r[5]*i+r[9]*s+r[13])*n,this.z=(r[2]*e+r[6]*i+r[10]*s+r[14])*n,this}applyQuaternion(t){const e=this.x,i=this.y,s=this.z,r=t.x,n=t.y,a=t.z,o=t.w,h=2*(n*s-a*i),l=2*(a*e-r*s),c=2*(r*i-n*e);return this.x=e+o*h+n*c-a*l,this.y=i+o*l+a*h-r*c,this.z=s+o*c+r*l-n*h,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*s,this.y=r[1]*e+r[5]*i+r[9]*s,this.z=r[2]*e+r[6]*i+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=xs(this.x,t.x,e.x),this.y=xs(this.y,t.y,e.y),this.z=xs(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=xs(this.x,t,e),this.y=xs(this.y,t,e),this.z=xs(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(xs(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,s=t.y,r=t.z,n=e.x,a=e.y,o=e.z;return this.x=s*o-r*a,this.y=r*n-i*o,this.z=i*a-s*n,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return zs.copy(this).projectOnVector(t),this.sub(zs)}reflect(t){return this.sub(zs.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(xs(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return e*e+i*i+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const s=Math.sin(e)*t;return this.x=s*Math.sin(i),this.y=Math.cos(e)*t,this.z=s*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=2*Math.random()-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const zs=new Ts,Cs=new As;class Is{constructor(t,e,i,s,r,n,a,o,h){Is.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,i,s,r,n,a,o,h)}set(t,e,i,s,r,n,a,o,h){const l=this.elements;return l[0]=t,l[1]=s,l[2]=a,l[3]=e,l[4]=r,l[5]=o,l[6]=i,l[7]=n,l[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,s=e.elements,r=this.elements,n=i[0],a=i[3],o=i[6],h=i[1],l=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=s[0],y=s[3],g=s[6],f=s[1],x=s[4],b=s[7],v=s[2],w=s[5],M=s[8];return r[0]=n*m+a*f+o*v,r[3]=n*y+a*x+o*w,r[6]=n*g+a*b+o*M,r[1]=h*m+l*f+c*v,r[4]=h*y+l*x+c*w,r[7]=h*g+l*b+c*M,r[2]=u*m+d*f+p*v,r[5]=u*y+d*x+p*w,r[8]=u*g+d*b+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8];return e*n*l-e*a*h-i*r*l+i*a*o+s*r*h-s*n*o}invert(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8],c=l*n-a*h,u=a*o-l*r,d=h*r-n*o,p=e*c+i*u+s*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(s*h-l*i)*m,t[2]=(a*i-s*n)*m,t[3]=u*m,t[4]=(l*e-s*o)*m,t[5]=(s*r-a*e)*m,t[6]=d*m,t[7]=(i*o-h*e)*m,t[8]=(n*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,s,r,n,a){const o=Math.cos(r),h=Math.sin(r);return this.set(i*o,i*h,-i*(o*n+h*a)+n+t,-s*h,s*o,-s*(-h*n+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(Bs.makeScale(t,e)),this}rotate(t){return this.premultiply(Bs.makeRotation(-t)),this}translate(t,e){return this.premultiply(Bs.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<9;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const Bs=new Is,ks=(new Is).set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Os=(new Is).set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Ps(){const t={enabled:!0,workingColorSpace:ii,spaces:{},convert:function(t,e,i){return!1!==this.enabled&&e!==i&&e&&i?(this.spaces[e].transfer===ri&&(t.r=Ns(t.r),t.g=Ns(t.g),t.b=Ns(t.b)),this.spaces[e].primaries!==this.spaces[i].primaries&&(t.applyMatrix3(this.spaces[e].toXYZ),t.applyMatrix3(this.spaces[i].fromXYZ)),this.spaces[i].transfer===ri&&(t.r=Vs(t.r),t.g=Vs(t.g),t.b=Vs(t.b)),t):t},workingToColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},colorSpaceToWorking:function(t,e){return this.convert(t,e,this.workingColorSpace)},getPrimaries:function(t){return this.spaces[t].primaries},getTransfer:function(t){return""===t?si:this.spaces[t].transfer},getToneMappingMode:function(t){return this.spaces[t].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(t,e=this.workingColorSpace){return t.fromArray(this.spaces[e].luminanceCoefficients)},define:function(t){Object.assign(this.spaces,t)},_getMatrix:function(t,e,i){return t.copy(this.spaces[e].toXYZ).multiply(this.spaces[i].fromXYZ)},_getDrawingBufferColorSpace:function(t){return this.spaces[t].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(t=this.workingColorSpace){return this.spaces[t].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(e,i){return hs("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),t.workingToColorSpace(e,i)},toWorkingColorSpace:function(e,i){return hs("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),t.colorSpaceToWorking(e,i)}},e=[.64,.33,.3,.6,.15,.06],i=[.2126,.7152,.0722],s=[.3127,.329];return t.define({[ii]:{primaries:e,whitePoint:s,transfer:si,toXYZ:ks,fromXYZ:Os,luminanceCoefficients:i,workingColorSpaceConfig:{unpackColorSpace:ei},outputColorSpaceConfig:{drawingBufferColorSpace:ei}},[ei]:{primaries:e,whitePoint:s,transfer:ri,toXYZ:ks,fromXYZ:Os,luminanceCoefficients:i,outputColorSpaceConfig:{drawingBufferColorSpace:ei}}}),t}const Rs=Ps();function Ns(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Vs(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let Es;class Fs{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{void 0===Es&&(Es=Qi("canvas")),Es.width=t.width,Es.height=t.height;const e=Es.getContext("2d");t instanceof ImageData?e.putImageData(t,0,0):e.drawImage(t,0,0,t.width,t.height),i=Es}return i.toDataURL(e)}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=Qi("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const s=i.getImageData(0,0,t.width,t.height),r=s.data;for(let t=0;t1),this.pmremVersion=0}get width(){return this.source.getSize(Us).x}get height(){return this.source.getSize(Us).y}get depth(){return this.source.getSize(Us).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(void 0===i){as(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[e]=i:as(`Texture.setValues(): property '${e}' does not exist.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==ht)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case mt:t.x=t.x-Math.floor(t.x);break;case yt:t.x=t.x<0?0:1;break;case gt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case mt:t.y=t.y-Math.floor(t.y);break;case yt:t.y=t.y<0?0:1;break;case gt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){!0===t&&this.pmremVersion++}}qs.DEFAULT_IMAGE=null,qs.DEFAULT_MAPPING=ht,qs.DEFAULT_ANISOTROPY=1;class Js{constructor(t=0,e=0,i=0,s=1){Js.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,s){return this.x=t,this.y=e,this.z=i,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){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: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=this.w,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*s+n[12]*r,this.y=n[1]*e+n[5]*i+n[9]*s+n[13]*r,this.z=n[2]*e+n[6]*i+n[10]*s+n[14]*r,this.w=n[3]*e+n[7]*i+n[11]*s+n[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,s,r;const n=.01,a=.1,o=t.elements,h=o[0],l=o[4],c=o[8],u=o[1],d=o[5],p=o[9],m=o[2],y=o[6],g=o[10];if(Math.abs(l-u)o&&t>f?tf?o1);this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),null!==this.pivot&&(s.pivot=this.pivot.toArray()),!1===this.matrixAutoUpdate&&(s.matrixAutoUpdate=!1),void 0!==this.morphTargetDictionary&&(s.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),void 0!==this.morphTargetInfluences&&(s.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(t=>({...t,boundingBox:t.boundingBox?t.boundingBox.toJSON():void 0,boundingSphere:t.boundingSphere?t.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(t=>({...t})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(t),s.indirectTexture=this._indirectTexture.toJSON(t),null!==this._colorsTexture&&(s.colorsTexture=this._colorsTexture.toJSON(t)),null!==this.boundingSphere&&(s.boundingSphere=this.boundingSphere.toJSON()),null!==this.boundingBox&&(s.boundingBox=this.boundingBox.toJSON())),this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const i=e.shapes;if(Array.isArray(i))for(let e=0,s=i.length;e0){s.children=[];for(let e=0;e0){s.animations=[];for(let e=0;e0&&(i.geometries=e),s.length>0&&(i.materials=s),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),h.length>0&&(i.skeletons=h),l.length>0&&(i.animations=l),c.length>0&&(i.nodes=c)}return i.object=s,i;function n(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),null!==t.pivot&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;eo+l?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!h.inputState.pinching&&a<=o-l&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(s=e.getPose(t.targetRaySpace,i),null===s&&null!==r&&(s=r),null!==s&&(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(zr)))}return null!==a&&(a.visible=null!==s),null!==o&&(o.visible=null!==r),null!==h&&(h.visible=null!==n),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const i=new Tr;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}const Ir={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},Br={h:0,s:0,l:0},kr={h:0,s:0,l:0};function Or(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}class Pr{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(void 0===e&&void 0===i){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=ei){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Rs.colorSpaceToWorking(this,e),this}setRGB(t,e,i,s=Rs.workingColorSpace){return this.r=t,this.g=e,this.b=i,Rs.colorSpaceToWorking(this,s),this}setHSL(t,e,i,s=Rs.workingColorSpace){if(t=bs(t,1),e=xs(e,0,1),i=xs(i,0,1),0===e)this.r=this.g=this.b=i;else{const s=i<=.5?i*(1+e):i+e-i*e,r=2*i-s;this.r=Or(r,s,t+1/3),this.g=Or(r,s,t),this.b=Or(r,s,t-1/3)}return Rs.colorSpaceToWorking(this,s),this}setStyle(t,e=ei){function i(e){void 0!==e&&parseFloat(e)<1&&as("Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const n=s[1],a=s[2];switch(n){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,e);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,e);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,e);break;default:as("Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const i=s[1],r=i.length;if(3===r)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,e);if(6===r)return this.setHex(parseInt(i,16),e);as("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=ei){const i=Ir[t.toLowerCase()];return void 0!==i?this.setHex(i,e):as("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Ns(t.r),this.g=Ns(t.g),this.b=Ns(t.b),this}copyLinearToSRGB(t){return this.r=Vs(t.r),this.g=Vs(t.g),this.b=Vs(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=ei){return Rs.workingToColorSpace(Rr.copy(this),t),65536*Math.round(xs(255*Rr.r,0,255))+256*Math.round(xs(255*Rr.g,0,255))+Math.round(xs(255*Rr.b,0,255))}getHexString(t=ei){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Rs.workingColorSpace){Rs.workingToColorSpace(Rr.copy(this),e);const i=Rr.r,s=Rr.g,r=Rr.b,n=Math.max(i,s,r),a=Math.min(i,s,r);let o,h;const l=(a+n)/2;if(a===n)o=0,h=0;else{const t=n-a;switch(h=l<=.5?t/(n+a):t/(2-n-a),n){case i:o=(s-r)/t+(s0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const Fr=new Ts,Lr=new Ts,jr=new Ts,Dr=new Ts,Wr=new Ts,Ur=new Ts,qr=new Ts,Jr=new Ts,Xr=new Ts,Yr=new Ts,Hr=new Js,Zr=new Js,Gr=new Js;class $r{constructor(t=new Ts,e=new Ts,i=new Ts){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,s){s.subVectors(i,e),Fr.subVectors(t,e),s.cross(Fr);const r=s.lengthSq();return r>0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,i,s,r){Fr.subVectors(s,e),Lr.subVectors(i,e),jr.subVectors(t,e);const n=Fr.dot(Fr),a=Fr.dot(Lr),o=Fr.dot(jr),h=Lr.dot(Lr),l=Lr.dot(jr),c=n*h-a*a;if(0===c)return r.set(0,0,0),null;const u=1/c,d=(h*o-a*l)*u,p=(n*l-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,s){return null!==this.getBarycoord(t,e,i,s,Dr)&&(Dr.x>=0&&Dr.y>=0&&Dr.x+Dr.y<=1)}static getInterpolation(t,e,i,s,r,n,a,o){return null===this.getBarycoord(t,e,i,s,Dr)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,Dr.x),o.addScaledVector(n,Dr.y),o.addScaledVector(a,Dr.z),o)}static getInterpolatedAttribute(t,e,i,s,r,n){return Hr.setScalar(0),Zr.setScalar(0),Gr.setScalar(0),Hr.fromBufferAttribute(t,e),Zr.fromBufferAttribute(t,i),Gr.fromBufferAttribute(t,s),n.setScalar(0),n.addScaledVector(Hr,r.x),n.addScaledVector(Zr,r.y),n.addScaledVector(Gr,r.z),n}static isFrontFacing(t,e,i,s){return Fr.subVectors(i,e),Lr.subVectors(t,e),Fr.cross(Lr).dot(s)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,s){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,i,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,s),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Fr.subVectors(this.c,this.b),Lr.subVectors(this.a,this.b),.5*Fr.cross(Lr).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return $r.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return $r.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,s,r){return $r.getInterpolation(t,this.a,this.b,this.c,e,i,s,r)}containsPoint(t){return $r.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return $r.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,s=this.b,r=this.c;let n,a;Wr.subVectors(s,i),Ur.subVectors(r,i),Jr.subVectors(t,i);const o=Wr.dot(Jr),h=Ur.dot(Jr);if(o<=0&&h<=0)return e.copy(i);Xr.subVectors(t,s);const l=Wr.dot(Xr),c=Ur.dot(Xr);if(l>=0&&c<=l)return e.copy(s);const u=o*c-l*h;if(u<=0&&o>=0&&l<=0)return n=o/(o-l),e.copy(i).addScaledVector(Wr,n);Yr.subVectors(t,r);const d=Wr.dot(Yr),p=Ur.dot(Yr);if(p>=0&&d<=p)return e.copy(r);const m=d*h-o*p;if(m<=0&&h>=0&&p<=0)return a=h/(h-p),e.copy(i).addScaledVector(Ur,a);const y=l*p-d*c;if(y<=0&&c-l>=0&&d-p>=0)return qr.subVectors(r,s),a=(c-l)/(c-l+(d-p)),e.copy(s).addScaledVector(qr,a);const g=1/(y+m+u);return n=m*g,a=u*g,e.copy(i).addScaledVector(Wr,n).addScaledVector(Ur,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class Qr{constructor(t=new Ts(1/0,1/0,1/0),e=new Ts(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,tn),tn.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ln),cn.subVectors(this.max,ln),sn.subVectors(t.a,ln),rn.subVectors(t.b,ln),nn.subVectors(t.c,ln),an.subVectors(rn,sn),on.subVectors(nn,rn),hn.subVectors(sn,nn);let e=[0,-an.z,an.y,0,-on.z,on.y,0,-hn.z,hn.y,an.z,0,-an.x,on.z,0,-on.x,hn.z,0,-hn.x,-an.y,an.x,0,-on.y,on.x,0,-hn.y,hn.x,0];return!!pn(e,sn,rn,nn,cn)&&(e=[1,0,0,0,1,0,0,0,1],!!pn(e,sn,rn,nn,cn)&&(un.crossVectors(an,on),e=[un.x,un.y,un.z],pn(e,sn,rn,nn,cn)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,tn).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(tn).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Kr[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Kr[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Kr[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Kr[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Kr[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Kr[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Kr[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Kr[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Kr)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Kr=[new Ts,new Ts,new Ts,new Ts,new Ts,new Ts,new Ts,new Ts],tn=new Ts,en=new Qr,sn=new Ts,rn=new Ts,nn=new Ts,an=new Ts,on=new Ts,hn=new Ts,ln=new Ts,cn=new Ts,un=new Ts,dn=new Ts;function pn(t,e,i,s,r){for(let n=0,a=t.length-3;n<=a;n+=3){dn.fromArray(t,n);const a=r.x*Math.abs(dn.x)+r.y*Math.abs(dn.y)+r.z*Math.abs(dn.z),o=e.dot(dn),h=i.dot(dn),l=s.dot(dn);if(Math.max(-Math.max(o,h,l),Math.min(o,h,l))>a)return!1}return!0}const mn=yn();function yn(){const t=new ArrayBuffer(4),e=new Float32Array(t),i=new Uint32Array(t),s=new Uint32Array(512),r=new Uint32Array(512);for(let t=0;t<256;++t){const e=t-127;e<-27?(s[t]=0,s[256|t]=32768,r[t]=24,r[256|t]=24):e<-14?(s[t]=1024>>-e-14,s[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(s[t]=e+15<<10,s[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(s[t]=31744,s[256|t]=64512,r[t]=24,r[256|t]=24):(s[t]=31744,s[256|t]=64512,r[t]=13,r[256|t]=13)}const n=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,i=0;for(;!(8388608&e);)e<<=1,i-=8388608;e&=-8388609,i+=947912704,n[t]=e|i}for(let t=1024;t<2048;++t)n[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:i,baseTable:s,shiftTable:r,mantissaTable:n,exponentTable:a,offsetTable:o}}function gn(t){Math.abs(t)>65504&&as("DataUtils.toHalfFloat(): Value out of range."),t=xs(t,-65504,65504),mn.floatView[0]=t;const e=mn.uint32View[0],i=e>>23&511;return mn.baseTable[i]+((8388607&e)>>mn.shiftTable[i])}function fn(t){const e=t>>10;return mn.uint32View[0]=mn.mantissaTable[mn.offsetTable[e]+(1023&t)]+mn.exponentTable[e],mn.floatView[0]}class xn{static toHalfFloat(t){return gn(t)}static fromHalfFloat(t){return fn(t)}}const bn=new Ts,vn=new _s;let wn=0;class Mn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:wn++}),this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=i,this.usage=Oi,this.updateRanges=[],this.gpuType=Pt,this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let s=0,r=this.itemSize;sthis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Pn.subVectors(t,this.center);const e=Pn.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),i=.5*(t-this.radius);this.center.addScaledVector(Pn,i/t),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(Rn.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Pn.copy(t.center).add(Rn)),this.expandByPoint(Pn.copy(t.center).sub(Rn))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let Vn=0;const En=new Qs,Fn=new Ar,Ln=new Ts,jn=new Qr,Dn=new Qr,Wn=new Ts;class Un extends ds{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Vn++}),this.uuid=fs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(function(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}(t)?In:zn)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(void 0!==i){const e=(new Is).getNormalMatrix(t);i.applyNormalMatrix(e),i.needsUpdate=!0}const s=this.attributes.tangent;return void 0!==s&&(s.transformDirection(t),s.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return En.makeRotationFromQuaternion(t),this.applyMatrix4(En),this}rotateX(t){return En.makeRotationX(t),this.applyMatrix4(En),this}rotateY(t){return En.makeRotationY(t),this.applyMatrix4(En),this}rotateZ(t){return En.makeRotationZ(t),this.applyMatrix4(En),this}translate(t,e,i){return En.makeTranslation(t,e,i),this.applyMatrix4(En),this}scale(t,e,i){return En.makeScale(t,e,i),this.applyMatrix4(En),this}lookAt(t){return Fn.lookAt(t),Fn.updateMatrix(),this.applyMatrix4(Fn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ln).negate(),this.translate(Ln.x,Ln.y,Ln.z),this}setFromPoints(t){const e=this.getAttribute("position");if(void 0===e){const e=[];for(let i=0,s=t.length;ie.count&&as("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Qr);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return os("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),void this.boundingBox.set(new Ts(-1/0,-1/0,-1/0),new Ts(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,i=e.length;t0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const e in i){const s=i[e];t.data.attributes[e]=s.toJSON(t.data)}const s={};let r=!1;for(const e in this.morphAttributes){const i=this.morphAttributes[e],n=[];for(let e=0,s=i.length;e0&&(s[e]=n,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const n=this.groups;n.length>0&&(t.data.groups=JSON.parse(JSON.stringify(n)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere=a.toJSON()),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;null!==i&&this.setIndex(i.clone());const s=t.attributes;for(const t in s){const i=s[t];this.setAttribute(t,i.clone(e))}const r=t.morphAttributes;for(const t in r){const i=[],s=r[t];for(let t=0,r=s.length;t0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const i=t[e];if(void 0===i){as(`Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[e]=i:as(`Material: '${e}' is not a property of THREE.${this.type}.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};function s(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),void 0!==this.dispersion&&(i.dispersion=this.dispersion),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(i.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapRotation&&(i.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),!0===this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=!0),204!==this.blendSrc&&(i.blendSrc=this.blendSrc),205!==this.blendDst&&(i.blendDst=this.blendDst),100!==this.blendEquation&&(i.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(i.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(i.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(i.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(i.depthFunc=this.depthFunc),!1===this.depthTest&&(i.depthTest=this.depthTest),!1===this.depthWrite&&(i.depthWrite=this.depthWrite),!1===this.colorWrite&&(i.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(i.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(i.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(i.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==li&&(i.stencilFail=this.stencilFail),this.stencilZFail!==li&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==li&&(i.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(i.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaHash&&(i.alphaHash=!0),!0===this.alphaToCoverage&&(i.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=!0),!0===this.forceSinglePass&&(i.forceSinglePass=!0),!1===this.allowOverride&&(i.allowOverride=!1),!0===this.wireframe&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=!0),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),e){const e=s(t.textures),r=s(t.images);e.length>0&&(i.textures=e),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(null!==e){const t=e.length;i=new Array(t);for(let s=0;s!==t;++s)i[s]=e[s].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}class Gn extends Zn{constructor(t){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new Pr(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}const $n=new Ts,Qn=new Ts,Kn=new Ts,ta=new _s,ea=new _s,ia=new Qs,sa=new Ts,ra=new Ts,na=new Ts,aa=new _s,oa=new _s,ha=new _s;class la extends Ar{constructor(t=new Gn){if(super(),this.isSprite=!0,this.type="Sprite",void 0===Yn){Yn=new Un;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new qn(t,5);Yn.setIndex([0,1,2,0,2,3]),Yn.setAttribute("position",new Xn(e,3,0,!1)),Yn.setAttribute("uv",new Xn(e,2,3,!1))}this.geometry=Yn,this.material=t,this.center=new _s(.5,.5),this.count=1}raycast(t,e){null===t.camera&&os('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),Qn.setFromMatrixScale(this.matrixWorld),ia.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),Kn.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&Qn.multiplyScalar(-Kn.z);const i=this.material.rotation;let s,r;0!==i&&(r=Math.cos(i),s=Math.sin(i));const n=this.center;ca(sa.set(-.5,-.5,0),Kn,n,Qn,s,r),ca(ra.set(.5,-.5,0),Kn,n,Qn,s,r),ca(na.set(.5,.5,0),Kn,n,Qn,s,r),aa.set(0,0),oa.set(1,0),ha.set(1,1);let a=t.ray.intersectTriangle(sa,ra,na,!1,$n);if(null===a&&(ca(ra.set(-.5,.5,0),Kn,n,Qn,s,r),oa.set(0,1),a=t.ray.intersectTriangle(sa,na,ra,!1,$n),null===a))return;const o=t.ray.origin.distanceTo($n);ot.far||e.push({distance:o,point:$n.clone(),uv:$r.getInterpolation($n,sa,ra,na,aa,oa,ha,new _s),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function ca(t,e,i,s,r,n){ta.subVectors(t,i).addScalar(.5).multiply(s),void 0!==r?(ea.x=n*ta.x-r*ta.y,ea.y=r*ta.x+n*ta.y):ea.copy(ta),t.copy(e),t.x+=ea.x,t.y+=ea.y,t.applyMatrix4(ia)}const ua=new Ts,da=new Ts;class pa extends Ar{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,i=e.length;t0){let i,s;for(i=1,s=e.length;i0){ua.setFromMatrixPosition(this.matrixWorld);const i=t.ray.origin.distanceTo(ua);this.getObjectForDistance(i).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){ua.setFromMatrixPosition(t.matrixWorld),da.setFromMatrixPosition(this.matrixWorld);const i=ua.distanceTo(da)/t.zoom;let s,r;for(e[0].object.visible=!0,s=1,r=e.length;s=t))break;e[s-1].object.visible=!1,e[s].object.visible=!0}for(this._currentLevel=s-1;s0)if(c=n*o-a,u=n*a-o,p=r*l,c>=0)if(u>=-p)if(u<=p){const t=1/l;c*=t,u*=t,d=c*(c+n*u+2*a)+u*(n*c+u+2*o)+h}else u=r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u=-r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u<=-p?(c=Math.max(0,-(-n*r+a)),u=c>0?-r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h):u<=p?(c=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+h):(c=Math.max(0,-(n*r+a)),u=c>0?r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h);else u=n>0?-r:r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;return i&&i.copy(this.origin).addScaledVector(this.direction,c),s&&s.copy(ya).addScaledVector(ga,u),d}intersectSphere(t,e){ma.subVectors(t.center,this.origin);const i=ma.dot(this.direction),s=ma.dot(ma)-i*i,r=t.radius*t.radius;if(s>r)return null;const n=Math.sqrt(r-s),a=i-n,o=i+n;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return!(t.radius<0)&&this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return null===i?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,s,r,n,a,o;const h=1/this.direction.x,l=1/this.direction.y,c=1/this.direction.z,u=this.origin;return h>=0?(i=(t.min.x-u.x)*h,s=(t.max.x-u.x)*h):(i=(t.max.x-u.x)*h,s=(t.min.x-u.x)*h),l>=0?(r=(t.min.y-u.y)*l,n=(t.max.y-u.y)*l):(r=(t.max.y-u.y)*l,n=(t.min.y-u.y)*l),i>n||r>s?null:((r>i||isNaN(i))&&(i=r),(n=0?(a=(t.min.z-u.z)*c,o=(t.max.z-u.z)*c):(a=(t.max.z-u.z)*c,o=(t.min.z-u.z)*c),i>o||a>s?null:((a>i||i!=i)&&(i=a),(o=0?i:s,e)))}intersectsBox(t){return null!==this.intersectBox(t,ma)}intersectTriangle(t,e,i,s,r){xa.subVectors(e,t),ba.subVectors(i,t),va.crossVectors(xa,ba);let n,a=this.direction.dot(va);if(a>0){if(s)return null;n=1}else{if(!(a<0))return null;n=-1,a=-a}fa.subVectors(this.origin,t);const o=n*this.direction.dot(ba.crossVectors(fa,ba));if(o<0)return null;const h=n*this.direction.dot(xa.cross(fa));if(h<0)return null;if(o+h>a)return null;const l=-n*fa.dot(va);return l<0?null:this.at(l/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Ma extends Zn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Pr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Sa=new Qs,_a=new wa,Aa=new Nn,Ta=new Ts,za=new Ts,Ca=new Ts,Ia=new Ts,Ba=new Ts,ka=new Ts,Oa=new Ts,Pa=new Ts;class Ra extends Ar{constructor(t=new Un,e=new Ma){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t(t.far-t.near)**2)return}Sa.copy(r).invert(),_a.copy(t.ray).applyMatrix4(Sa),null!==i.boundingBox&&!1===_a.intersectsBox(i.boundingBox)||this._computeIntersections(t,e,_a)}}_computeIntersections(t,e,i){let s;const r=this.geometry,n=this.material,a=r.index,o=r.attributes.position,h=r.attributes.uv,l=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(null!==a)if(Array.isArray(n))for(let r=0,o=u.length;ri.far?null:{distance:l,point:Pa.clone(),object:t}}(t,e,i,s,za,Ca,Ia,Oa);if(c){const t=new Ts;$r.getBarycoord(Oa,za,Ca,Ia,t),r&&(c.uv=$r.getInterpolatedAttribute(r,o,h,l,t,new _s)),n&&(c.uv1=$r.getInterpolatedAttribute(n,o,h,l,t,new _s)),a&&(c.normal=$r.getInterpolatedAttribute(a,o,h,l,t,new Ts),c.normal.dot(s.direction)>0&&c.normal.multiplyScalar(-1));const e={a:o,b:h,c:l,normal:new Ts,materialIndex:0};$r.getNormal(za,Ca,Ia,e.normal),c.face=e,c.barycoord=t}return c}const Va=new Ts,Ea=new Js,Fa=new Js,La=new Ts,ja=new Qs,Da=new Ts,Wa=new Nn,Ua=new Qs,qa=new wa;class Ja extends Ra{constructor(t,e){super(t,e),this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode=at,this.bindMatrix=new Qs,this.bindMatrixInverse=new Qs,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){const t=this.geometry;null===this.boundingBox&&(this.boundingBox=new Qr),this.boundingBox.makeEmpty();const e=t.getAttribute("position");for(let t=0;t1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||ho.getNormalMatrix(t),s=this.coplanarPoint(ao).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const co=new Nn,uo=new _s(.5,.5),po=new Ts;class mo{constructor(t=new lo,e=new lo,i=new lo,s=new lo,r=new lo,n=new lo){this.planes=[t,e,i,s,r,n]}set(t,e,i,s,r,n){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(s),a[4].copy(r),a[5].copy(n),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=2e3,i=!1){const s=this.planes,r=t.elements,n=r[0],a=r[1],o=r[2],h=r[3],l=r[4],c=r[5],u=r[6],d=r[7],p=r[8],m=r[9],y=r[10],g=r[11],f=r[12],x=r[13],b=r[14],v=r[15];if(s[0].setComponents(h-n,d-l,g-p,v-f).normalize(),s[1].setComponents(h+n,d+l,g+p,v+f).normalize(),s[2].setComponents(h+a,d+c,g+m,v+x).normalize(),s[3].setComponents(h-a,d-c,g-m,v-x).normalize(),i)s[4].setComponents(o,u,y,b).normalize(),s[5].setComponents(h-o,d-u,g-y,v-b).normalize();else if(s[4].setComponents(h-o,d-u,g-y,v-b).normalize(),e===Ui)s[5].setComponents(h+o,d+u,g+y,v+b).normalize();else{if(e!==qi)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);s[5].setComponents(o,u,y,b).normalize()}return this}intersectsObject(t){if(void 0!==t.boundingSphere)null===t.boundingSphere&&t.computeBoundingSphere(),co.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;null===e.boundingSphere&&e.computeBoundingSphere(),co.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(co)}intersectsSprite(t){co.center.set(0,0,0);const e=uo.distanceTo(t.center);return co.radius=.7071067811865476+e,co.applyMatrix4(t.matrixWorld),this.intersectsSphere(co)}intersectsSphere(t){const e=this.planes,i=t.center,s=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(i)0?t.max.x:t.min.x,po.y=s.normal.y>0?t.max.y:t.min.y,po.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint(po)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}const yo=new Qs,go=new mo;class fo{constructor(){this.coordinateSystem=Ui}intersectsObject(t,e){if(!e.isArrayCamera||0===e.cameras.length)return!1;for(let i=0;i=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});const a=r[this.index];n.push(a),this.index++,a.start=t,a.count=e,a.z=i,a.index=s}reset(){this.list.length=0,this.index=0}}const Mo=new Qs,So=new Pr(1,1,1),_o=new mo,Ao=new fo,To=new Qr,zo=new Nn,Co=new Ts,Io=new Ts,Bo=new Ts,ko=new wo,Oo=new Ra,Po=[];function Ro(t,e,i=0){const s=e.itemSize;if(t.isInterleavedBufferAttribute||t.array.constructor!==e.array.constructor){const r=t.count;for(let n=0;n65535?new Uint32Array(s):new Uint16Array(s);e.setIndex(new Mn(t,1))}this._geometryInitialized=!0}}_validateGeometry(t){const e=this.geometry;if(Boolean(t.getIndex())!==Boolean(e.getIndex()))throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in e.attributes){if(!t.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=t.getAttribute(i),r=e.getAttribute(i);if(s.itemSize!==r.itemSize||s.normalized!==r.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(t){const e=this._instanceInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${t}. Instance is either out of range or has been deleted.`)}validateGeometryId(t){const e=this._geometryInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${t}. Geometry is either out of range or has been deleted.`)}setCustomSort(t){return this.customSort=t,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Qr);const t=this.boundingBox,e=this._instanceInfo;t.makeEmpty();for(let i=0,s=e.length;i=this.maxInstanceCount&&0===this._availableInstanceIds.length)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const e={visible:!0,active:!0,geometryIndex:t};let i=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(xo),i=this._availableInstanceIds.shift(),this._instanceInfo[i]=e):(i=this._instanceInfo.length,this._instanceInfo.push(e));const s=this._matricesTexture;Mo.identity().toArray(s.image.data,16*i),s.needsUpdate=!0;const r=this._colorsTexture;return r&&(So.toArray(r.image.data,4*i),r.needsUpdate=!0),this._visibilityChanged=!0,i}addGeometry(t,e=-1,i=-1){this._initializeGeometry(t),this._validateGeometry(t);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},r=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=-1===e?t.getAttribute("position").count:e;const n=t.getIndex();if(null!==n&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=-1===i?n.count:i),-1!==s.indexStart&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let a;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(xo),a=this._availableGeometryIds.shift(),r[a]=s):(a=this._geometryCount,this._geometryCount++,r.push(s)),this.setGeometryAt(a,t),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,a}setGeometryAt(t,e){if(t>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(e);const i=this.geometry,s=null!==i.getIndex(),r=i.getIndex(),n=e.getIndex(),a=this._geometryInfo[t];if(s&&n.count>a.reservedIndexCount||e.attributes.position.count>a.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const o=a.vertexStart,h=a.reservedVertexCount;a.vertexCount=e.getAttribute("position").count;for(const t in i.attributes){const s=e.getAttribute(t),r=i.getAttribute(t);Ro(s,r,o);const n=s.itemSize;for(let t=s.count,e=h;t=e.length||!1===e[t].active)return this;const i=this._instanceInfo;for(let e=0,s=i.length;ee).sort((t,e)=>i[t].vertexStart-i[e].vertexStart),r=this.geometry;for(let n=0,a=i.length;n=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingBox){const t=new Qr,e=i.index,r=i.attributes.position;for(let i=s.start,n=s.start+s.count;i=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingSphere){const e=new Nn;this.getBoundingBoxAt(t,To),To.getCenter(e.center);const r=i.index,n=i.attributes.position;let a=0;for(let t=s.start,i=s.start+s.count;tt.active);if(Math.max(...i.map(t=>t.vertexStart+t.reservedVertexCount))>t)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${e}. Cannot shrink further.`);if(this.geometry.index){if(Math.max(...i.map(t=>t.indexStart+t.reservedIndexCount))>e)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${e}. Cannot shrink further.`)}const s=this.geometry;s.dispose(),this._maxVertexCount=t,this._maxIndexCount=e,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Un,this._initializeGeometry(s));const r=this.geometry;s.index&&No(s.index.array,r.index.array);for(const t in s.attributes)No(s.attributes[t].array,r.attributes[t].array)}raycast(t,e){const i=this._instanceInfo,s=this._geometryInfo,r=this.matrixWorld,n=this.geometry;Oo.material=this.material,Oo.geometry.index=n.index,Oo.geometry.attributes=n.attributes,null===Oo.geometry.boundingBox&&(Oo.geometry.boundingBox=new Qr),null===Oo.geometry.boundingSphere&&(Oo.geometry.boundingSphere=new Nn);for(let n=0,a=i.length;n({...t,boundingBox:null!==t.boundingBox?t.boundingBox.clone():null,boundingSphere:null!==t.boundingSphere?t.boundingSphere.clone():null})),this._instanceInfo=t._instanceInfo.map(t=>({...t})),this._availableInstanceIds=t._availableInstanceIds.slice(),this._availableGeometryIds=t._availableGeometryIds.slice(),this._nextIndexStart=t._nextIndexStart,this._nextVertexStart=t._nextVertexStart,this._geometryCount=t._geometryCount,this._maxInstanceCount=t._maxInstanceCount,this._maxVertexCount=t._maxVertexCount,this._maxIndexCount=t._maxIndexCount,this._geometryInitialized=t._geometryInitialized,this._multiDrawCounts=t._multiDrawCounts.slice(),this._multiDrawStarts=t._multiDrawStarts.slice(),this._indirectTexture=t._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=t._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),null!==this._colorsTexture&&(this._colorsTexture=t._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,null!==this._colorsTexture&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(t,e,i,s,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const n=s.getIndex();let a=null===n?1:n.array.BYTES_PER_ELEMENT,o=1;r.wireframe&&(o=2,a=s.attributes.position.count>65535?4:2);const h=this._instanceInfo,l=this._multiDrawStarts,c=this._multiDrawCounts,u=this._geometryInfo,d=this.perObjectFrustumCulled,p=this._indirectTexture,m=p.image.data,y=i.isArrayCamera?Ao:_o;d&&!i.isArrayCamera&&(Mo.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),_o.setFromProjectionMatrix(Mo,i.coordinateSystem,i.reversedDepth));let g=0;if(this.sortObjects){Mo.copy(this.matrixWorld).invert(),Co.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Mo),Io.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Mo);for(let t=0,e=h.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;ts)return;Uo.applyMatrix4(t.matrixWorld);const h=e.ray.origin.distanceTo(Uo);return he.far?void 0:{distance:h,point:qo.clone().applyMatrix4(t.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:t}}const Yo=new Ts,Ho=new Ts;class Zo extends Jo{constructor(t,e){super(t,e),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(null===t.index){const e=t.attributes.position,i=[];for(let t=0,s=e.count;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;tr.far)return;n.push({distance:h,distanceToRay:Math.sqrt(o),point:i,index:e,face:null,faceIndex:null,barycoord:null,object:a})}}class rh extends qs{constructor(t,e,i,s,r=1006,n=1006,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const l=this;"requestVideoFrameCallback"in t&&(this._requestVideoFrameCallbackId=t.requestVideoFrameCallback(function e(){l.needsUpdate=!0,l._requestVideoFrameCallbackId=t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){0!==this._requestVideoFrameCallbackId&&(this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),this._requestVideoFrameCallbackId=0),super.dispose()}}class nh extends rh{constructor(t,e,i,s,r,n,a,o){super({},t,e,i,s,r,n,a,o),this.isVideoFrameTexture=!0}update(){}clone(){return(new this.constructor).copy(this)}setFrame(t){this.image=t,this.needsUpdate=!0}}class ah extends qs{constructor(t,e){super({width:t,height:e}),this.isFramebufferTexture=!0,this.magFilter=ft,this.minFilter=ft,this.generateMipmaps=!1,this.needsUpdate=!0}}class oh extends qs{constructor(t,e,i,s,r,n,a,o,h,l,c,u){super(null,n,a,o,h,l,s,r,c,u),this.isCompressedTexture=!0,this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class hh extends oh{constructor(t,e,i,s,r,n){super(t,e,i,r,n),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=yt,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class lh extends oh{constructor(t,e,i){super(void 0,t[0].width,t[0].height,e,i,lt),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=t}}class ch extends qs{constructor(t=[],e=301,i,s,r,n,a,o,h,l){super(t,e,i,s,r,n,a,o,h,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class uh extends qs{constructor(t,e,i,s,r,n,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isCanvasTexture=!0,this.needsUpdate=!0}}class dh extends qs{constructor(t,e,i=1014,s,r,n,a=1003,o=1003,h,l=1026,c=1){if(l!==Ut&&1027!==l)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");super({width:t,height:e,depth:c},s,r,n,a,o,l,i,h),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new js(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return null!==this.compareFunction&&(e.compareFunction=this.compareFunction),e}}class ph extends dh{constructor(t,e=1014,i=301,s,r,n=1003,a=1003,o,h=1026){const l={width:t,height:t,depth:1},c=[l,l,l,l,l,l];super(t,t,e,i,s,r,n,a,o,h),this.image=c,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(t){this.image=t}}class mh extends qs{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}copy(t){return super.copy(t),this.sourceTexture=t.sourceTexture,this}}class yh extends Un{constructor(t=1,e=1,i=1,s=1,r=1,n=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:s,heightSegments:r,depthSegments:n};const a=this;s=Math.floor(s),r=Math.floor(r),n=Math.floor(n);const o=[],h=[],l=[],c=[];let u=0,d=0;function p(t,e,i,s,r,n,p,m,y,g,f){const x=n/y,b=p/g,v=n/2,w=p/2,M=m/2,S=y+1,_=g+1;let A=0,T=0;const z=new Ts;for(let n=0;n<_;n++){const a=n*b-w;for(let o=0;o0?1:-1,l.push(z.x,z.y,z.z),c.push(o/y),c.push(1-n/g),A+=1}}for(let t=0;t0){const t=(f-1)*m;for(let e=0;e0||0!==s)&&(l.push(n,a,h),x+=3),(e>0||s!==r-1)&&(l.push(a,o,h),x+=3)}h.addGroup(g,x,0),g+=x}(),!1===n&&(t>0&&f(!0),e>0&&f(!1)),this.setIndex(l),this.setAttribute("position",new kn(c,3)),this.setAttribute("normal",new kn(u,3)),this.setAttribute("uv",new kn(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new xh(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class bh extends xh{constructor(t=1,e=1,i=32,s=1,r=!1,n=0,a=2*Math.PI){super(0,t,e,i,s,r,n,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:s,openEnded:r,thetaStart:n,thetaLength:a}}static fromJSON(t){return new bh(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class vh extends Un{constructor(t=[],e=[],i=1,s=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:s};const r=[],n=[];function a(t,e,i,s){const r=s+1,n=[];for(let s=0;s<=r;s++){n[s]=[];const a=t.clone().lerp(i,s/r),o=e.clone().lerp(i,s/r),h=r-s;for(let t=0;t<=h;t++)n[s][t]=0===t&&s===r?a:a.clone().lerp(o,t/h)}for(let t=0;t.9&&a<.1&&(e<.2&&(n[t+0]+=1),i<.2&&(n[t+2]+=1),s<.2&&(n[t+4]+=1))}}()}(),this.setAttribute("position",new kn(r,3)),this.setAttribute("normal",new kn(r.slice(),3)),this.setAttribute("uv",new kn(n,2)),0===s?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new vh(t.vertices,t.indices,t.radius,t.detail)}}class wh extends vh{constructor(t=1,e=0){const i=(1+Math.sqrt(5))/2,s=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-i,0,-s,i,0,s,-i,0,s,i,-s,-i,0,-s,i,0,s,-i,0,s,i,0,-i,0,-s,i,0,-s,-i,0,s,i,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new wh(t.radius,t.detail)}}const Mh=new Ts,Sh=new Ts,_h=new Ts,Ah=new $r;class Th extends Un{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const i=4,s=Math.pow(10,i),r=Math.cos(ys*e),n=t.getIndex(),a=t.getAttribute("position"),o=n?n.count:a.count,h=[0,0,0],l=["a","b","c"],c=new Array(3),u={},d=[];for(let t=0;t0)){h=s;break}h=s-1}if(s=h,i[s]===n)return s/(r-1);const l=i[s];return(s+(n-l)/(i[s+1]-l))/(r-1)}getTangent(t,e){const i=1e-4;let s=t-i,r=t+i;s<0&&(s=0),r>1&&(r=1);const n=this.getPoint(s),a=this.getPoint(r),o=e||(n.isVector2?new _s:new Ts);return o.copy(a).sub(n).normalize(),o}getTangentAt(t,e){const i=this.getUtoTmapping(t);return this.getTangent(i,e)}computeFrenetFrames(t,e=!1){const i=new Ts,s=[],r=[],n=[],a=new Ts,o=new Qs;for(let e=0;e<=t;e++){const i=e/t;s[e]=this.getTangentAt(i,new Ts)}r[0]=new Ts,n[0]=new Ts;let h=Number.MAX_VALUE;const l=Math.abs(s[0].x),c=Math.abs(s[0].y),u=Math.abs(s[0].z);l<=h&&(h=l,i.set(1,0,0)),c<=h&&(h=c,i.set(0,1,0)),u<=h&&i.set(0,0,1),a.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],a),n[0].crossVectors(s[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),n[e]=n[e-1].clone(),a.crossVectors(s[e-1],s[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(xs(s[e-1].dot(s[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}n[e].crossVectors(s[e],r[e])}if(!0===e){let e=Math.acos(xs(r[0].dot(r[t]),-1,1));e/=t,s[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let i=1;i<=t;i++)r[i].applyMatrix4(o.makeRotationAxis(s[i],e*i)),n[i].crossVectors(s[i],r[i])}return{tangents:s,normals:r,binormals:n}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Ch extends zh{constructor(t=0,e=0,i=1,s=1,r=0,n=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=n,this.aClockwise=a,this.aRotation=o}getPoint(t,e=new _s){const i=e,s=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const n=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(h)/r)+1)*r:0===l&&h===r-1&&(h=r-2,l=1),this.closed||h>0?a=s[(h-1)%r]:(kh.subVectors(s[0],s[1]).add(s[0]),a=kh);const c=s[h%r],u=s[(h+1)%r];if(this.closed||h+2s.length-2?s.length-1:n+1],c=s[n>s.length-3?s.length-1:n+2];return i.set(Vh(a,o.x,h.x,l.x,c.x),Vh(a,o.y,h.y,l.y,c.y)),i}copy(t){super.copy(t),this.points=[];for(let e=0,i=t.points.length;e=i){const t=s[r]-i,n=this.curves[r],a=n.getLength(),o=0===a?0:1-t/a;return n.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.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 t=[];let e=0;for(let i=0,s=this.curves.length;i1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,i=t.curves.length;e0){const t=h.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(h);const l=h.getPoint(1);return this.currentPoint.copy(l),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Zh extends Hh{constructor(t){super(t),this.uuid=fs(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let i=0,s=this.holes.length;i80*i){o=t[0],h=t[1];let e=o,s=h;for(let n=i;ne&&(e=i),r>s&&(s=r)}l=Math.max(e-o,s-h),l=0!==l?32767/l:0}return Kh(n,a,i,o,h,l,0),a}function $h(t,e,i,s,r){let n;if(r===function(t,e,i,s){let r=0;for(let n=e,a=i-s;n0)for(let r=e;r=e;r-=s)n=bl(r/s|0,t[r],t[r+1],n);return n&&pl(n,n.next)&&(vl(n),n=n.next),n}function Qh(t,e){if(!t)return t;e||(e=t);let i,s=t;do{if(i=!1,s.steiner||!pl(s,s.next)&&0!==dl(s.prev,s,s.next))s=s.next;else{if(vl(s),s=e=s.prev,s===s.next)break;i=!0}}while(i||s!==e);return e}function Kh(t,e,i,s,r,n,a){if(!t)return;!a&&n&&function(t,e,i,s){let r=t;do{0===r.z&&(r.z=ol(r.x,r.y,e,i,s)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,i=1;do{let s,r=t;t=null;let n=null;for(e=0;r;){e++;let a=r,o=0;for(let t=0;t0||h>0&&a;)0!==o&&(0===h||!a||r.z<=a.z)?(s=r,r=r.nextZ,o--):(s=a,a=a.nextZ,h--),n?n.nextZ=s:t=s,s.prevZ=n,n=s;r=a}n.nextZ=null,i*=2}while(e>1)}(r)}(t,s,r,n);let o=t;for(;t.prev!==t.next;){const h=t.prev,l=t.next;if(n?el(t,s,r,n):tl(t))e.push(h.i,t.i,l.i),vl(t),t=l.next,o=l.next;else if((t=l)===o){a?1===a?Kh(t=il(Qh(t),e),e,i,s,r,n,2):2===a&&sl(t,e,i,s,r,n):Kh(Qh(t),e,i,s,r,n,1);break}}}function tl(t){const e=t.prev,i=t,s=t.next;if(dl(e,i,s)>=0)return!1;const r=e.x,n=i.x,a=s.x,o=e.y,h=i.y,l=s.y,c=Math.min(r,n,a),u=Math.min(o,h,l),d=Math.max(r,n,a),p=Math.max(o,h,l);let m=s.next;for(;m!==e;){if(m.x>=c&&m.x<=d&&m.y>=u&&m.y<=p&&cl(r,o,n,h,a,l,m.x,m.y)&&dl(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function el(t,e,i,s){const r=t.prev,n=t,a=t.next;if(dl(r,n,a)>=0)return!1;const o=r.x,h=n.x,l=a.x,c=r.y,u=n.y,d=a.y,p=Math.min(o,h,l),m=Math.min(c,u,d),y=Math.max(o,h,l),g=Math.max(c,u,d),f=ol(p,m,e,i,s),x=ol(y,g,e,i,s);let b=t.prevZ,v=t.nextZ;for(;b&&b.z>=f&&v&&v.z<=x;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&cl(o,c,h,u,l,d,b.x,b.y)&&dl(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&cl(o,c,h,u,l,d,v.x,v.y)&&dl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;b&&b.z>=f;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&cl(o,c,h,u,l,d,b.x,b.y)&&dl(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;v&&v.z<=x;){if(v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&cl(o,c,h,u,l,d,v.x,v.y)&&dl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function il(t,e){let i=t;do{const s=i.prev,r=i.next.next;!pl(s,r)&&ml(s,i,i.next,r)&&fl(s,r)&&fl(r,s)&&(e.push(s.i,i.i,r.i),vl(i),vl(i.next),i=t=r),i=i.next}while(i!==t);return Qh(i)}function sl(t,e,i,s,r,n){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&ul(a,t)){let o=xl(a,t);return a=Qh(a,a.next),o=Qh(o,o.next),Kh(a,e,i,s,r,n,0),void Kh(o,e,i,s,r,n,0)}t=t.next}a=a.next}while(a!==t)}function rl(t,e){let i=t.x-e.x;if(0===i&&(i=t.y-e.y,0===i)){i=(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x)}return i}function nl(t,e){const i=function(t,e){let i=e;const s=t.x,r=t.y;let n,a=-1/0;if(pl(t,i))return i;do{if(pl(t,i.next))return i.next;if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const t=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(t<=s&&t>a&&(a=t,n=i.x=i.x&&i.x>=h&&s!==i.x&&ll(rn.x||i.x===n.x&&al(n,i)))&&(n=i,c=e)}i=i.next}while(i!==o);return n}(t,e);if(!i)return e;const s=xl(i,t);return Qh(s,s.next),Qh(i,i.next)}function al(t,e){return dl(t.prev,t,e.prev)<0&&dl(e.next,t,t.next)<0}function ol(t,e,i,s,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-s)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function hl(t){let e=t,i=t;do{(e.x=(t-a)*(n-o)&&(t-a)*(s-o)>=(i-a)*(e-o)&&(i-a)*(n-o)>=(r-a)*(s-o)}function cl(t,e,i,s,r,n,a,o){return!(t===a&&e===o)&&ll(t,e,i,s,r,n,a,o)}function ul(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&ml(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(fl(t,e)&&fl(e,t)&&function(t,e){let i=t,s=!1;const r=(t.x+e.x)/2,n=(t.y+e.y)/2;do{i.y>n!=i.next.y>n&&i.next.y!==i.y&&r<(i.next.x-i.x)*(n-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next}while(i!==t);return s}(t,e)&&(dl(t.prev,t,e.prev)||dl(t,e.prev,e))||pl(t,e)&&dl(t.prev,t,t.next)>0&&dl(e.prev,e,e.next)>0)}function dl(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function pl(t,e){return t.x===e.x&&t.y===e.y}function ml(t,e,i,s){const r=gl(dl(t,e,i)),n=gl(dl(t,e,s)),a=gl(dl(i,s,t)),o=gl(dl(i,s,e));return r!==n&&a!==o||(!(0!==r||!yl(t,i,e))||(!(0!==n||!yl(t,s,e))||(!(0!==a||!yl(i,t,s))||!(0!==o||!yl(i,e,s)))))}function yl(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function gl(t){return t>0?1:t<0?-1:0}function fl(t,e){return dl(t.prev,t,t.next)<0?dl(t,e,t.next)>=0&&dl(t,t.prev,e)>=0:dl(t,e,t.prev)<0||dl(t,t.next,e)<0}function xl(t,e){const i=wl(t.i,t.x,t.y),s=wl(e.i,e.x,e.y),r=t.next,n=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,s.next=i,i.prev=s,n.next=s,s.prev=n,s}function bl(t,e,i,s){const r=wl(t,e,i);return s?(r.next=s.next,r.prev=s,s.next.prev=r,s.next=r):(r.prev=r,r.next=r),r}function vl(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function wl(t,e,i){return{i:t,x:e,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}class Ml{static triangulate(t,e,i=2){return Gh(t,e,i)}}class Sl{static area(t){const e=t.length;let i=0;for(let s=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Al(t,e){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(c),d=Math.sqrt(h*h+l*l),p=e.x-o/u,m=e.y+a/u,y=((i.x-l/d-p)*l-(i.y+h/d-m)*h)/(a*l-o*h);s=p+a*y-t.x,r=m+o*y-t.y;const g=s*s+r*r;if(g<=2)return new _s(s,r);n=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?h>Number.EPSILON&&(t=!0):a<-Number.EPSILON?h<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(l)&&(t=!0),t?(s=-o,r=a,n=Math.sqrt(c)):(s=a,r=o,n=Math.sqrt(c/2))}return new _s(s/n,r/n)}const k=[];for(let t=0,e=z.length,i=e-1,s=t+1;t=0;t--){const e=t/p,i=c*Math.cos(e*Math.PI/2),s=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=z.length;t=0;){const s=i;let r=i-1;r<0&&(r=t.length-1);for(let t=0,i=o+2*p;t0)&&d.push(e,r,h),(t!==i-1||o0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const t in this.extensions)!0===this.extensions[t]&&(i[t]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Hl extends Yl{constructor(t){super(t),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class Zl extends Zn{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Pr(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Gl extends Zl{constructor(t){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new _s(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return xs(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Pr(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Pr(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Pr(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(t)}get anisotropy(){return this._anisotropy}set anisotropy(t){this._anisotropy>0!=t>0&&this.version++,this._anisotropy=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get dispersion(){return this._dispersion}set dispersion(t){this._dispersion>0!=t>0&&this.version++,this._dispersion=t}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=t.anisotropy,this.anisotropyRotation=t.anisotropyRotation,this.anisotropyMap=t.anisotropyMap,this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.dispersion=t.dispersion,this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class $l extends Zn{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Pr(16777215),this.specular=new Pr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Ql extends Zn{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Pr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(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(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class Kl extends Zn{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class tc extends Zn{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Pr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class ec extends Zn{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class ic extends Zn{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}class sc extends Zn{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Pr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this.fog=t.fog,this}}class rc extends Eo{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function nc(t,e){return t&&t.constructor!==e?"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t):t}function ac(t){const e=t.length,i=new Array(e);for(let t=0;t!==e;++t)i[t]=t;return i.sort(function(e,i){return t[e]-t[i]}),i}function oc(t,e,i){const s=t.length,r=new t.constructor(s);for(let n=0,a=0;a!==s;++n){const s=i[n]*e;for(let i=0;i!==e;++i)r[a++]=t[s+i]}return r}function hc(t,e,i,s){let r=1,n=t[0];for(;void 0!==n&&void 0===n[s];)n=t[r++];if(void 0===n)return;let a=n[s];if(void 0!==a)if(Array.isArray(a))do{a=n[s],void 0!==a&&(e.push(n.time),i.push(...a)),n=t[r++]}while(void 0!==n);else if(void 0!==a.toArray)do{a=n[s],void 0!==a&&(e.push(n.time),a.toArray(i,i.length)),n=t[r++]}while(void 0!==n);else do{a=n[s],void 0!==a&&(e.push(n.time),i.push(a)),n=t[r++]}while(void 0!==n)}class lc{static convertArray(t,e){return nc(t,e)}static isTypedArray(t){return $i(t)}static getKeyframeOrder(t){return ac(t)}static sortedArray(t,e,i){return oc(t,e,i)}static flattenJSON(t,e,i,s){hc(t,e,i,s)}static subclip(t,e,i,s,r=30){return function(t,e,i,s,r=30){const n=t.clone();n.name=e;const a=[];for(let t=0;t=s)){h.push(e.times[t]);for(let i=0;in.tracks[t].times[0]&&(o=n.tracks[t].times[0]);for(let t=0;t=s.times[u]){const t=u*h+o,e=t+h-o;d=s.values.slice(t,e)}else{const t=s.createInterpolant(),e=o,i=h-o;t.evaluate(n),d=t.resultBuffer.slice(e,i)}"quaternion"===r&&(new As).fromArray(d).normalize().conjugate().toArray(d);const p=a.times.length;for(let t=0;t=r)){const a=e[1];t=r)break e}n=i,i=0;break i}break t}for(;i>>1;te;)--n;if(++n,0!==r||n!==s){r>=n&&(n=Math.max(n,1),r=n-1);const t=this.getValueSize();this.times=i.slice(r,n),this.values=this.values.slice(r*t,n*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!==0&&(os("KeyframeTrack: Invalid value size in track.",this),t=!1);const i=this.times,s=this.values,r=i.length;0===r&&(os("KeyframeTrack: Track is empty.",this),t=!1);let n=null;for(let e=0;e!==r;e++){const s=i[e];if("number"==typeof s&&isNaN(s)){os("KeyframeTrack: Time is not a valid number.",this,e,s),t=!1;break}if(null!==n&&n>s){os("KeyframeTrack: Out of order keys.",this,e,s,n),t=!1;break}n=s}if(void 0!==s&&$i(s))for(let e=0,i=s.length;e!==i;++e){const i=s[e];if(isNaN(i)){os("KeyframeTrack: Value is not a valid number.",this,e,i),t=!1;break}}return t}optimize(){const t=this.times.slice(),e=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===Fe,r=t.length-1;let n=1;for(let a=1;a0){t[n]=t[r];for(let t=r*i,s=n*i,a=0;a!==i;++a)e[s+a]=e[t+a];++n}return n!==t.length?(this.times=t.slice(0,n),this.values=e.slice(0,n*i)):(this.times=t,this.values=e),this}clone(){const t=this.times.slice(),e=this.values.slice(),i=new(0,this.constructor)(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}}yc.prototype.ValueTypeName="",yc.prototype.TimeBufferType=Float32Array,yc.prototype.ValueBufferType=Float32Array,yc.prototype.DefaultInterpolation=Ee;class gc extends yc{constructor(t,e,i){super(t,e,i)}}gc.prototype.ValueTypeName="bool",gc.prototype.ValueBufferType=Array,gc.prototype.DefaultInterpolation=Ve,gc.prototype.InterpolantFactoryMethodLinear=void 0,gc.prototype.InterpolantFactoryMethodSmooth=void 0;class fc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}fc.prototype.ValueTypeName="color";class xc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}xc.prototype.ValueTypeName="number";class bc extends cc{constructor(t,e,i,s){super(t,e,i,s)}interpolate_(t,e,i,s){const r=this.resultBuffer,n=this.sampleValues,a=this.valueSize,o=(i-e)/(s-e);let h=t*a;for(let t=h+a;h!==t;h+=4)As.slerpFlat(r,0,n,h-a,n,h,o);return r}}class vc extends yc{constructor(t,e,i,s){super(t,e,i,s)}InterpolantFactoryMethodLinear(t){return new bc(this.times,this.values,this.getValueSize(),t)}}vc.prototype.ValueTypeName="quaternion",vc.prototype.InterpolantFactoryMethodSmooth=void 0;class wc extends yc{constructor(t,e,i){super(t,e,i)}}wc.prototype.ValueTypeName="string",wc.prototype.ValueBufferType=Array,wc.prototype.DefaultInterpolation=Ve,wc.prototype.InterpolantFactoryMethodLinear=void 0,wc.prototype.InterpolantFactoryMethodSmooth=void 0;class Mc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}Mc.prototype.ValueTypeName="vector";class Sc{constructor(t="",e=-1,i=[],s=2500){this.name=t,this.tracks=i,this.duration=e,this.blendMode=s,this.uuid=fs(),this.userData={},this.duration<0&&this.resetDuration()}static parse(t){const e=[],i=t.tracks,s=1/(t.fps||1);for(let t=0,r=i.length;t!==r;++t)e.push(_c(i[t]).scale(s));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r.userData=JSON.parse(t.userData||"{}"),r}static toJSON(t){const e=[],i=t.tracks,s={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode,userData:JSON.stringify(t.userData)};for(let t=0,s=i.length;t!==s;++t)e.push(yc.toJSON(i[t]));return s}static CreateFromMorphTargetSequence(t,e,i,s){const r=e.length,n=[];for(let t=0;t1){const t=n[1];let e=s[t];e||(s[t]=e=[]),e.push(i)}}const n=[];for(const t in s)n.push(this.CreateFromMorphTargetSequence(t,s[t],e,i));return n}static parseAnimation(t,e){if(as("AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!t)return os("AnimationClip: No animation in JSONLoader data."),null;const i=function(t,e,i,s,r){if(0!==i.length){const n=[],a=[];hc(i,n,a,s),0!==n.length&&r.push(new t(e,n,a))}},s=[],r=t.name||"default",n=t.fps||30,a=t.blendMode;let o=t.length||-1;const h=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)},0),r;if(void 0!==Bc[t])return void Bc[t].push({onLoad:e,onProgress:i,onError:s});Bc[t]=[],Bc[t].push({onLoad:e,onProgress:i,onError:s});const n=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:"function"==typeof AbortSignal.any?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),a=this.mimeType,o=this.responseType;fetch(n).then(e=>{if(200===e.status||0===e.status){if(0===e.status&&as("FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const i=Bc[t],s=e.body.getReader(),r=e.headers.get("X-File-Size")||e.headers.get("Content-Length"),n=r?parseInt(r):0,a=0!==n;let o=0;const h=new ReadableStream({start(t){!function e(){s.read().then(({done:s,value:r})=>{if(s)t.close();else{o+=r.byteLength;const s=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:n});for(let t=0,e=i.length;t{t.error(e)})}()}});return new Response(h)}throw new kc(`fetch for "${e.url}" responded with ${e.status}: ${e.statusText}`,e)}).then(t=>{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then(t=>(new DOMParser).parseFromString(t,a));case"json":return t.json();default:if(""===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),i=e&&e[1]?e[1].toLowerCase():void 0,s=new TextDecoder(i);return t.arrayBuffer().then(t=>s.decode(t))}}}).then(e=>{Ac.add(`file:${t}`,e);const i=Bc[t];delete Bc[t];for(let t=0,s=i.length;t{const i=Bc[t];if(void 0===i)throw this.manager.itemError(t),e;delete Bc[t];for(let t=0,s=i.length;t{this.manager.itemEnd(t)}),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class Pc extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(this.manager);n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):os(e),r.manager.itemError(t)}},i,s)}parse(t){const e=[];for(let i=0;i0:s.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(s.uniforms[e]={},r.type){case"t":s.uniforms[e].value=i(r.value);break;case"c":s.uniforms[e].value=(new Pr).setHex(r.value);break;case"v2":s.uniforms[e].value=(new _s).fromArray(r.value);break;case"v3":s.uniforms[e].value=(new Ts).fromArray(r.value);break;case"v4":s.uniforms[e].value=(new Js).fromArray(r.value);break;case"m3":s.uniforms[e].value=(new Is).fromArray(r.value);break;case"m4":s.uniforms[e].value=(new Qs).fromArray(r.value);break;default:s.uniforms[e].value=r.value}}if(void 0!==t.defines&&(s.defines=t.defines),void 0!==t.vertexShader&&(s.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(s.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(s.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)s.extensions[e]=t.extensions[e];if(void 0!==t.lights&&(s.lights=t.lights),void 0!==t.clipping&&(s.clipping=t.clipping),void 0!==t.size&&(s.size=t.size),void 0!==t.sizeAttenuation&&(s.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(s.map=i(t.map)),void 0!==t.matcap&&(s.matcap=i(t.matcap)),void 0!==t.alphaMap&&(s.alphaMap=i(t.alphaMap)),void 0!==t.bumpMap&&(s.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(s.bumpScale=t.bumpScale),void 0!==t.normalMap&&(s.normalMap=i(t.normalMap)),void 0!==t.normalMapType&&(s.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),s.normalScale=(new _s).fromArray(e)}return void 0!==t.displacementMap&&(s.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(s.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(s.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(s.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(s.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(s.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(s.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(s.specularMap=i(t.specularMap)),void 0!==t.specularIntensityMap&&(s.specularIntensityMap=i(t.specularIntensityMap)),void 0!==t.specularColorMap&&(s.specularColorMap=i(t.specularColorMap)),void 0!==t.envMap&&(s.envMap=i(t.envMap)),void 0!==t.envMapRotation&&s.envMapRotation.fromArray(t.envMapRotation),void 0!==t.envMapIntensity&&(s.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(s.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(s.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(s.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(s.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(s.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(s.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(s.gradientMap=i(t.gradientMap)),void 0!==t.clearcoatMap&&(s.clearcoatMap=i(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(s.clearcoatRoughnessMap=i(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(s.clearcoatNormalMap=i(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(s.clearcoatNormalScale=(new _s).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(s.iridescenceMap=i(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(s.iridescenceThicknessMap=i(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(s.transmissionMap=i(t.transmissionMap)),void 0!==t.thicknessMap&&(s.thicknessMap=i(t.thicknessMap)),void 0!==t.anisotropyMap&&(s.anisotropyMap=i(t.anisotropyMap)),void 0!==t.sheenColorMap&&(s.sheenColorMap=i(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(s.sheenRoughnessMap=i(t.sheenRoughnessMap)),s}setTextures(t){return this.textures=t,this}createMaterialFromType(t){return uu.createMaterialFromType(t)}static createMaterialFromType(t){return new{ShadowMaterial:Wl,SpriteMaterial:Gn,RawShaderMaterial:Hl,ShaderMaterial:Yl,PointsMaterial:$o,MeshPhysicalMaterial:Gl,MeshStandardMaterial:Zl,MeshPhongMaterial:$l,MeshToonMaterial:Ql,MeshNormalMaterial:Kl,MeshLambertMaterial:tc,MeshDepthMaterial:ec,MeshDistanceMaterial:ic,MeshBasicMaterial:Ma,MeshMatcapMaterial:sc,LineDashedMaterial:rc,LineBasicMaterial:Eo,Material:Zn}[t]}}class du{static extractUrlBase(t){const e=t.lastIndexOf("/");return-1===e?"./":t.slice(0,e+1)}static resolveURL(t,e){return"string"!=typeof t||""===t?"":(/^https?:\/\//i.test(e)&&/^\//.test(t)&&(e=e.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(t)||/^data:.*,.*$/i.test(t)||/^blob:.*$/i.test(t)?t:e+t)}}class pu extends Un{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}toJSON(){const t=super.toJSON();return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}class mu extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(r.manager);n.setPath(r.path),n.setRequestHeader(r.requestHeader),n.setWithCredentials(r.withCredentials),n.load(t,function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):os(e),r.manager.itemError(t)}},i,s)}parse(t){const e={},i={};function s(t,s){if(void 0!==e[s])return e[s];const r=t.interleavedBuffers[s],n=function(t,e){if(void 0!==i[e])return i[e];const s=t.arrayBuffers,r=s[e],n=new Uint32Array(r).buffer;return i[e]=n,n}(t,r.buffer),a=Gi(r.type,n),o=new qn(a,r.stride);return o.uuid=r.uuid,e[s]=o,o}const r=t.isInstancedBufferGeometry?new pu:new Un,n=t.data.index;if(void 0!==n){const t=Gi(n.type,n.array);r.setIndex(new Mn(t,1))}const a=t.data.attributes;for(const e in a){const i=a[e];let n;if(i.isInterleavedBufferAttribute){const e=s(t.data,i.data);n=new Xn(e,i.itemSize,i.offset,i.normalized)}else{const t=Gi(i.type,i.array);n=new(i.isInstancedBufferAttribute?$a:Mn)(t,i.itemSize,i.normalized)}void 0!==i.name&&(n.name=i.name),void 0!==i.usage&&n.setUsage(i.usage),r.setAttribute(e,n)}const o=t.data.morphAttributes;if(o)for(const e in o){const i=o[e],n=[];for(let e=0,r=i.length;e0){const i=new zc(e);r=new Vc(i),r.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e0){s=new Vc(this.manager),s.setCrossOrigin(this.crossOrigin);for(let e=0,s=t.length;e{let e=null,i=null;return void 0!==t.boundingBox&&(e=(new Qr).fromJSON(t.boundingBox)),void 0!==t.boundingSphere&&(i=(new Nn).fromJSON(t.boundingSphere)),{...t,boundingBox:e,boundingSphere:i}}),n._instanceInfo=t.instanceInfo,n._availableInstanceIds=t._availableInstanceIds,n._availableGeometryIds=t._availableGeometryIds,n._nextIndexStart=t.nextIndexStart,n._nextVertexStart=t.nextVertexStart,n._geometryCount=t.geometryCount,n._maxInstanceCount=t.maxInstanceCount,n._maxVertexCount=t.maxVertexCount,n._maxIndexCount=t.maxIndexCount,n._geometryInitialized=t.geometryInitialized,n._matricesTexture=c(t.matricesTexture.uuid),n._indirectTexture=c(t.indirectTexture.uuid),void 0!==t.colorsTexture&&(n._colorsTexture=c(t.colorsTexture.uuid)),void 0!==t.boundingSphere&&(n.boundingSphere=(new Nn).fromJSON(t.boundingSphere)),void 0!==t.boundingBox&&(n.boundingBox=(new Qr).fromJSON(t.boundingBox));break;case"LOD":n=new pa;break;case"Line":n=new Jo(h(t.geometry),l(t.material));break;case"LineLoop":n=new Go(h(t.geometry),l(t.material));break;case"LineSegments":n=new Zo(h(t.geometry),l(t.material));break;case"PointCloud":case"Points":n=new ih(h(t.geometry),l(t.material));break;case"Sprite":n=new la(l(t.material));break;case"Group":n=new Tr;break;case"Bone":n=new Xa;break;default:n=new Ar}if(n.uuid=t.uuid,void 0!==t.name&&(n.name=t.name),void 0!==t.matrix?(n.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(n.matrixAutoUpdate=t.matrixAutoUpdate),n.matrixAutoUpdate&&n.matrix.decompose(n.position,n.quaternion,n.scale)):(void 0!==t.position&&n.position.fromArray(t.position),void 0!==t.rotation&&n.rotation.fromArray(t.rotation),void 0!==t.quaternion&&n.quaternion.fromArray(t.quaternion),void 0!==t.scale&&n.scale.fromArray(t.scale)),void 0!==t.up&&n.up.fromArray(t.up),void 0!==t.pivot&&(n.pivot=(new Ts).fromArray(t.pivot)),void 0!==t.morphTargetDictionary&&(n.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),void 0!==t.morphTargetInfluences&&(n.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.castShadow&&(n.castShadow=t.castShadow),void 0!==t.receiveShadow&&(n.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.intensity&&(n.shadow.intensity=t.shadow.intensity),void 0!==t.shadow.bias&&(n.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(n.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(n.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&n.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(n.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(n.visible=t.visible),void 0!==t.frustumCulled&&(n.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(n.renderOrder=t.renderOrder),void 0!==t.static&&(n.static=t.static),void 0!==t.userData&&(n.userData=t.userData),void 0!==t.layers&&(n.layers.mask=t.layers),void 0!==t.children){const a=t.children;for(let t=0;t{if(!0!==bu.has(n))return e&&e(i),r.manager.itemEnd(t),i;s&&s(bu.get(n)),r.manager.itemError(t),r.manager.itemEnd(t)}):(setTimeout(function(){e&&e(n),r.manager.itemEnd(t)},0),n);const a={};a.credentials="anonymous"===this.crossOrigin?"same-origin":"include",a.headers=this.requestHeader,a.signal="function"==typeof AbortSignal.any?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const o=fetch(t,a).then(function(t){return t.blob()}).then(function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:"none"}))}).then(function(i){return Ac.add(`image-bitmap:${t}`,i),e&&e(i),r.manager.itemEnd(t),i}).catch(function(e){s&&s(e),bu.set(o,e),Ac.remove(`image-bitmap:${t}`),r.manager.itemError(t),r.manager.itemEnd(t)});Ac.add(`image-bitmap:${t}`,o),r.manager.itemStart(t)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let wu;class Mu{static getContext(){return void 0===wu&&(wu=new(window.AudioContext||window.webkitAudioContext)),wu}static setContext(t){wu=t}}class Su extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(this.manager);function a(e){s?s(e):os(e),r.manager.itemError(t)}n.setResponseType("arraybuffer"),n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,function(t){try{const i=t.slice(0);Mu.getContext().decodeAudioData(i,function(t){e(t)}).catch(a)}catch(t){a(t)}},i,s)}}const _u=new Qs,Au=new Qs,Tu=new Qs;class zu{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Kc,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Kc,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(t){const e=this._cache;if(e.focus!==t.focus||e.fov!==t.fov||e.aspect!==t.aspect*this.aspect||e.near!==t.near||e.far!==t.far||e.zoom!==t.zoom||e.eyeSep!==this.eyeSep){e.focus=t.focus,e.fov=t.fov,e.aspect=t.aspect*this.aspect,e.near=t.near,e.far=t.far,e.zoom=t.zoom,e.eyeSep=this.eyeSep,Tu.copy(t.projectionMatrix);const i=e.eyeSep/2,s=i*e.near/e.focus,r=e.near*Math.tan(ys*e.fov*.5)/e.zoom;let n,a;Au.elements[12]=-i,_u.elements[12]=i,n=-r*e.aspect+s,a=r*e.aspect+s,Tu.elements[0]=2*e.near/(a-n),Tu.elements[8]=(a+n)/(a-n),this.cameraL.projectionMatrix.copy(Tu),n=-r*e.aspect-s,a=r*e.aspect-s,Tu.elements[0]=2*e.near/(a-n),Tu.elements[8]=(a+n)/(a-n),this.cameraR.projectionMatrix.copy(Tu)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Au),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(_u)}}const Cu=-90;class Iu extends Ar{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Kc(Cu,1,t,e);s.layers=this.layers,this.add(s);const r=new Kc(Cu,1,t,e);r.layers=this.layers,this.add(r);const n=new Kc(Cu,1,t,e);n.layers=this.layers,this.add(n);const a=new Kc(Cu,1,t,e);a.layers=this.layers,this.add(a);const o=new Kc(Cu,1,t,e);o.layers=this.layers,this.add(o);const h=new Kc(Cu,1,t,e);h.layers=this.layers,this.add(h)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[i,s,r,n,a,o]=e;for(const t of e)this.remove(t);if(t===Ui)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),n.up.set(0,0,1),n.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else{if(t!==qi)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),n.up.set(0,0,-1),n.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1)}for(const t of e)this.add(t),t.updateMatrixWorld()}update(t,e){null===this.parent&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,n,a,o,h,l]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let y=!1;y=!0===t.isWebGLRenderer?t.state.buffers.depth.getReversed():t.reversedDepthBuffer,t.setRenderTarget(i,0,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,r),t.setRenderTarget(i,1,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,n),t.setRenderTarget(i,2,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,a),t.setRenderTarget(i,3,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,o),t.setRenderTarget(i,4,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,h),i.texture.generateMipmaps=m,t.setRenderTarget(i,5,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,l),t.setRenderTarget(c,u,d),t.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Bu extends Kc{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class ku{constructor(){this._previousTime=0,this._currentTime=0,this._startTime=performance.now(),this._delta=0,this._elapsed=0,this._timescale=1,this._document=null,this._pageVisibilityHandler=null}connect(t){this._document=t,void 0!==t.hidden&&(this._pageVisibilityHandler=Ou.bind(this),t.addEventListener("visibilitychange",this._pageVisibilityHandler,!1))}disconnect(){null!==this._pageVisibilityHandler&&(this._document.removeEventListener("visibilitychange",this._pageVisibilityHandler),this._pageVisibilityHandler=null),this._document=null}getDelta(){return this._delta/1e3}getElapsed(){return this._elapsed/1e3}getTimescale(){return this._timescale}setTimescale(t){return this._timescale=t,this}reset(){return this._currentTime=performance.now()-this._startTime,this}dispose(){this.disconnect()}update(t){return null!==this._pageVisibilityHandler&&!0===this._document.hidden?this._delta=0:(this._previousTime=this._currentTime,this._currentTime=(void 0!==t?t:performance.now())-this._startTime,this._delta=(this._currentTime-this._previousTime)*this._timescale,this._elapsed+=this._delta),this}}function Ou(){!1===this._document.hidden&&this.reset()}const Pu=new Ts,Ru=new As,Nu=new Ts,Vu=new Ts,Eu=new Ts;class Fu extends Ar{constructor(){super(),this.type="AudioListener",this.context=Mu.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._timer=new ku}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(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(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t),this._timer.update();const e=this.context.listener;if(this.timeDelta=this._timer.getDelta(),this.matrixWorld.decompose(Pu,Ru,Nu),Vu.set(0,0,-1).applyQuaternion(Ru),Eu.set(0,1,0).applyQuaternion(Ru),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(Pu.x,t),e.positionY.linearRampToValueAtTime(Pu.y,t),e.positionZ.linearRampToValueAtTime(Pu.z,t),e.forwardX.linearRampToValueAtTime(Vu.x,t),e.forwardY.linearRampToValueAtTime(Vu.y,t),e.forwardZ.linearRampToValueAtTime(Vu.z,t),e.upX.linearRampToValueAtTime(Eu.x,t),e.upY.linearRampToValueAtTime(Eu.y,t),e.upZ.linearRampToValueAtTime(Eu.z,t)}else e.setPosition(Pu.x,Pu.y,Pu.z),e.setOrientation(Vu.x,Vu.y,Vu.z,Eu.x,Eu.y,Eu.z)}}class Lu extends Ar{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.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(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void as("Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void as("Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;as("Audio: this Audio has no playback control.")}stop(t=0){if(!1!==this.hasPlaybackControl)return this._progress=0,null!==this.source&&(this.source.stop(this.context.currentTime+t),this.source.onended=null),this.isPlaying=!1,this;as("Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(i,s,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(i[t]!==i[t+e]){a.setValue(i,s);break}}saveOriginalState(){const t=this.binding,e=this.buffer,i=this.valueSize,s=i*this._origIndex;t.getValue(e,s);for(let t=i,r=s;t!==r;++t)e[t]=e[s+t%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let i=t;i=.5)for(let s=0;s!==r;++s)t[e+s]=t[i+s]}_slerp(t,e,i,s){As.slerpFlat(t,e,t,e,t,i,s)}_slerpAdditive(t,e,i,s,r){const n=this._workIndex*r;As.multiplyQuaternionsFlat(t,n,t,e,t,i),As.slerpFlat(t,e,t,e,t,n,s)}_lerp(t,e,i,s,r){const n=1-s;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*n+t[i+a]*s}}_lerpAdditive(t,e,i,s,r){for(let n=0;n!==r;++n){const r=e+n;t[r]=t[r]+t[i+n]*s}}}const Yu="\\[\\]\\.:\\/",Hu=new RegExp("["+Yu+"]","g"),Zu="[^"+Yu+"]",Gu="[^"+Yu.replace("\\.","")+"]",$u=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",Zu)+/(WCOD+)?/.source.replace("WCOD",Gu)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Zu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Zu)+"$"),Qu=["material","materials","bones","map"];class Ku{constructor(t,e,i){this.path=e,this.parsedPath=i||Ku.parseTrackName(e),this.node=Ku.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,i){return t&&t.isAnimationObjectGroup?new Ku.Composite(t,e,i):new Ku(t,e,i)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(Hu,"")}static parseTrackName(t){const e=$u.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==s&&-1!==s){const t=i.nodeName.substring(s+1);-1!==Qu.indexOf(t)&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=t)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const i=t.skeleton.getBoneByName(e);if(void 0!==i)return i}if(t.children){const i=function(t){for(let s=0;s=r){const n=r++,l=t[n];e[l.uuid]=h,t[h]=l,e[o]=n,t[n]=a;for(let t=0,e=s;t!==e;++t){const e=i[t],s=e[n],r=e[h];e[h]=s,e[n]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,i=this._bindings,s=i.length;let r=this.nCachedObjects_,n=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,h=e[o];if(void 0!==h)if(delete e[o],h0&&(e[a.uuid]=h),t[h]=a,t.pop();for(let t=0,e=s;t!==e;++t){const e=i[t];e[h]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const i=this._bindingsIndicesByPath;let s=i[t];const r=this._bindings;if(void 0!==s)return r[s];const n=this._paths,a=this._parsedPaths,o=this._objects,h=o.length,l=this.nCachedObjects_,c=new Array(h);s=r.length,i[t]=s,n.push(t),a.push(e),r.push(c);for(let i=l,s=o.length;i!==s;++i){const s=o[i];c[i]=new Ku(s,t,e)}return c}unsubscribe_(t){const e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){const s=this._paths,r=this._parsedPaths,n=this._bindings,a=n.length-1,o=n[a];e[t[a]]=i,n[i]=o,n.pop(),r[i]=r[a],r.pop(),s[i]=s[a],s.pop()}}}class ed{constructor(t,e,i=null,s=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=i,this.blendMode=s;const r=e.tracks,n=r.length,a=new Array(n),o={endingStart:je,endingEnd:je};for(let t=0;t!==n;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings&&Object.assign(o,e.settings),e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(n),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,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&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,i=!1){if(t.fadeOut(e),this.fadeIn(e),!0===i){const i=this._clip.duration,s=t._clip.duration,r=s/i,n=i/s;t.warp(1,r,e),this.warp(n,1,e)}return this}crossFadeTo(t,e,i=!1){return t.crossFadeFrom(this,e,i)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,i){const s=this._mixer,r=s.time,n=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=s._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,h=a.sampleValues;return o[0]=r,o[1]=r+i,h[0]=t/n,h[1]=e/n,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,i,s){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const s=(t-r)*i;s<0||0===i?e=0:(this._startTime=null,e=i*s)}e*=this._updateTimeScale(t);const n=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===qe)for(let i=0,s=t.length;i!==s;++i)t[i].evaluate(n),e[i].accumulateAdditive(a);else for(let i=0,r=t.length;i!==r;++i)t[i].evaluate(n),e[i].accumulate(s,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const i=this._weightInterpolant;if(null!==i){const s=i.evaluate(t)[0];e*=s,t>i.parameterPositions[1]&&(this.stopFading(),0===s&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,i=this.loop;let s=this.time+t,r=this._loopCount;const n=2202===i;if(0===t)return-1===r||!n||1&~r?s:e-s;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(s>=e)s=e;else{if(!(s<0)){this.time=s;break t}s=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,n)):this._setEndings(0===this.repetitions,!0,n)),s>=e||s<0){const i=Math.floor(s/e);s-=e*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=t>0?e:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,n)}else this._setEndings(!1,!1,n);this._loopCount=r,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this._loopCount=r,this.time=s;if(n&&!(1&~r))return e-s}return s}_setEndings(t,e,i){const s=this._interpolantSettings;i?(s.endingStart=De,s.endingEnd=De):(s.endingStart=t?this.zeroSlopeAtStart?De:je:We,s.endingEnd=e?this.zeroSlopeAtEnd?De:je:We)}_scheduleFading(t,e,i){const s=this._mixer,r=s.time;let n=this._weightInterpolant;null===n&&(n=s._lendControlInterpolant(),this._weightInterpolant=n);const a=n.parameterPositions,o=n.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=i,this}}const id=new Float32Array(1);class sd extends ds{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}_bindAction(t,e){const i=t._localRoot||this._root,s=t._clip.tracks,r=s.length,n=t._propertyBindings,a=t._interpolants,o=i.uuid,h=this._bindingsByRootAndName;let l=h[o];void 0===l&&(l={},h[o]=l);for(let t=0;t!==r;++t){const r=s[t],h=r.name;let c=l[h];if(void 0!==c)++c.referenceCount,n[t]=c;else{if(c=n[t],void 0!==c){null===c._cacheIndex&&(++c.referenceCount,this._addInactiveBinding(c,o,h));continue}const s=e&&e._propertyBindings[t].binding.parsedPath;c=new Xu(Ku.create(i,h,s),r.ValueTypeName,r.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,o,h),n[t]=c}a[t].resultBuffer=c.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,i=t._clip.uuid,s=this._actionsByClip[i];this._bindAction(t,s&&s.knownActions[0]),this._addInactiveAction(t,i,e)}const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0===i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0===--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,i=this._nActiveActions,s=this.time+=t,r=Math.sign(t),n=this._accuIndex^=1;for(let a=0;a!==i;++a){e[a]._update(s,t,r,n)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(n);return this}setTime(t){this.time=0;for(let t=0;t=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,xd).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const vd=new Ts,wd=new Ts,Md=new Ts,Sd=new Ts,_d=new Ts,Ad=new Ts,Td=new Ts;class zd{constructor(t=new Ts,e=new Ts){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){vd.subVectors(t,this.start),wd.subVectors(this.end,this.start);const i=wd.dot(wd);let s=wd.dot(vd)/i;return e&&(s=xs(s,0,1)),s}closestPointToPoint(t,e,i){const s=this.closestPointToPointParameter(t,e);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(t,e=Ad,i=Td){const s=1e-8*1e-8;let r,n;const a=this.start,o=t.start,h=this.end,l=t.end;Md.subVectors(h,a),Sd.subVectors(l,o),_d.subVectors(a,o);const c=Md.dot(Md),u=Sd.dot(Sd),d=Sd.dot(_d);if(c<=s&&u<=s)return e.copy(a),i.copy(o),e.sub(i),e.dot(e);if(c<=s)r=0,n=d/u,n=xs(n,0,1);else{const t=Md.dot(_d);if(u<=s)n=0,r=xs(-t/c,0,1);else{const e=Md.dot(Sd),i=c*u-e*e;r=0!==i?xs((e*d-t*u)/i,0,1):0,n=(e*r+d)/u,n<0?(n=0,r=xs(-t/c,0,1)):n>1&&(n=1,r=xs((e-t)/c,0,1))}}return e.copy(a).addScaledVector(Md,r),i.copy(o).addScaledVector(Sd,n),e.distanceToSquared(i)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const Cd=new Ts;class Id extends Ar{constructor(t,e){super(),this.light=t,this.matrixAutoUpdate=!1,this.color=e,this.type="SpotLightHelper";const i=new Un,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 t=0,e=1,i=32;t1)for(let i=0;i.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{tp.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(tp,e)}}setLength(t,e=.2*t,i=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class rp extends Zo{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],i=new Un;i.setAttribute("position",new kn(e,3)),i.setAttribute("color",new kn([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(i,new Eo({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(t,e,i){const s=new Pr,r=this.geometry.attributes.color.array;return s.set(t),s.toArray(r,0),s.toArray(r,3),s.set(e),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 np{constructor(){this.type="ShapePath",this.color=new Pr,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new Hh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,i,s){return this.currentPath.quadraticCurveTo(t,e,i,s),this}bezierCurveTo(t,e,i,s,r,n){return this.currentPath.bezierCurveTo(t,e,i,s,r,n),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t){function e(t,e){const i=e.length;let s=!1;for(let r=i-1,n=0;nNumber.EPSILON){if(h<0&&(i=e[n],o=-o,a=e[r],h=-h),t.ya.y)continue;if(t.y===i.y){if(t.x===i.x)return!0}else{const e=h*(t.x-i.x)-o*(t.y-i.y);if(0===e)return!0;if(e<0)continue;s=!s}}else{if(t.y!==i.y)continue;if(a.x<=t.x&&t.x<=i.x||i.x<=t.x&&t.x<=a.x)return!0}}return s}const i=Sl.isClockWise,s=this.subPaths;if(0===s.length)return[];let r,n,a;const o=[];if(1===s.length)return n=s[0],a=new Zh,a.curves=n.curves,o.push(a),o;let h=!i(s[0].getPoints());h=t?!h:h;const l=[],c=[];let u,d,p=[],m=0;c[m]=void 0,p[m]=[];for(let e=0,a=s.length;e1){let t=!1,i=0;for(let t=0,e=c.length;t0&&!1===t&&(p=l)}for(let t=0,e=c.length;te?(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2):(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0),t}(t,e)}static cover(t,e){return function(t,e){const i=t.image&&t.image.width?t.image.width/t.image.height:1;return i>e?(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0):(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2),t}(t,e)}static fill(t){return function(t){return t.repeat.x=1,t.repeat.y=1,t.offset.x=0,t.offset.y=0,t}(t)}static getByteLength(t,e,i,s){return op(t,e,i,s)}}"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:t}})),"undefined"!=typeof window&&(window.__THREE__?as("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=t);export{it as ACESFilmicToneMapping,w as AddEquation,$ as AddOperation,qe as AdditiveAnimationBlendMode,g as AdditiveBlending,rt as AgXToneMapping,jt as AlphaFormat,ki as AlwaysCompare,W as AlwaysDepth,Si as AlwaysStencilFunc,ou as AmbientLight,ed as AnimationAction,Sc as AnimationClip,Pc as AnimationLoader,sd as AnimationMixer,td as AnimationObjectGroup,lc as AnimationUtils,Ih as ArcCurve,Bu as ArrayCamera,sp as ArrowHelper,at as AttachedBindMode,Lu as Audio,Ju as AudioAnalyser,Mu as AudioContext,Fu as AudioListener,Su as AudioLoader,rp as AxesHelper,d as BackSide,He as BasicDepthPacking,o as BasicShadowMap,Vo as BatchedMesh,mc as BezierInterpolant,Xa as Bone,gc as BooleanKeyframeTrack,bd as Box2,Qr as Box3,Qd as Box3Helper,yh as BoxGeometry,$d as BoxHelper,Mn as BufferAttribute,Un as BufferGeometry,mu as BufferGeometryLoader,Ct as ByteType,Ac as Cache,Zc as Camera,Hd as CameraHelper,uh as CanvasTexture,gh as CapsuleGeometry,Nh as CatmullRomCurve3,et as CineonToneMapping,fh as CircleGeometry,yt as ClampToEdgeWrapping,md as Clock,Pr as Color,fc as ColorKeyframeTrack,Rs as ColorManagement,Hi as Compatibility,hh as CompressedArrayTexture,lh as CompressedCubeTexture,oh as CompressedTexture,Rc as CompressedTextureLoader,bh as ConeGeometry,L as ConstantAlphaFactor,E as ConstantColorFactor,ap as Controls,Iu as CubeCamera,ph as CubeDepthTexture,lt as CubeReflectionMapping,ct as CubeRefractionMapping,ch as CubeTexture,Ec as CubeTextureLoader,pt as CubeUVReflectionMapping,Lh as CubicBezierCurve,jh as CubicBezierCurve3,uc as CubicInterpolant,r as CullFaceBack,n as CullFaceFront,a as CullFaceFrontBack,s as CullFaceNone,zh as Curve,Yh as CurvePath,b as CustomBlending,st as CustomToneMapping,xh as CylinderGeometry,gd as Cylindrical,Gs as Data3DTexture,Hs as DataArrayTexture,Ya as DataTexture,Fc as DataTextureLoader,xn as DataUtils,di as DecrementStencilOp,mi as DecrementWrapStencilOp,Cc as DefaultLoadingManager,Ut as DepthFormat,qt as DepthStencilFormat,dh as DepthTexture,ot as DetachedBindMode,au as DirectionalLight,Jd as DirectionalLightHelper,pc as DiscreteInterpolant,wh as DodecahedronGeometry,p as DoubleSide,O as DstAlphaFactor,R as DstColorFactor,Li as DynamicCopyUsage,Pi as DynamicDrawUsage,Vi as DynamicReadUsage,Th as EdgesGeometry,Ch as EllipseCurve,Ti as EqualCompare,J as EqualDepth,xi as EqualStencilFunc,ut as EquirectangularReflectionMapping,dt as EquirectangularRefractionMapping,hr as Euler,ds as EventDispatcher,mh as ExternalTexture,Tl as ExtrudeGeometry,Oc as FileLoader,Bn as Float16BufferAttribute,kn as Float32BufferAttribute,Pt as FloatType,Vr as Fog,Nr as FogExp2,ah as FramebufferTexture,u as FrontSide,mo as Frustum,fo as FrustumArray,ld as GLBufferAttribute,Di as GLSL1,Wi as GLSL3,Ci as GreaterCompare,Y as GreaterDepth,Bi as GreaterEqualCompare,X as GreaterEqualDepth,Mi as GreaterEqualStencilFunc,vi as GreaterStencilFunc,jd as GridHelper,Tr as Group,Rt as HalfFloatType,Dc as HemisphereLight,Ld as HemisphereLightHelper,Cl as IcosahedronGeometry,vu as ImageBitmapLoader,Vc as ImageLoader,Fs as ImageUtils,ui as IncrementStencilOp,pi as IncrementWrapStencilOp,$a as InstancedBufferAttribute,pu as InstancedBufferGeometry,hd as InstancedInterleavedBuffer,no as InstancedMesh,Tn as Int16BufferAttribute,Cn as Int32BufferAttribute,Sn as Int8BufferAttribute,kt as IntType,qn as InterleavedBuffer,Xn as InterleavedBufferAttribute,cc as Interpolant,Le as InterpolateBezier,Ve as InterpolateDiscrete,Ee as InterpolateLinear,Fe as InterpolateSmooth,Yi as InterpolationSamplingMode,Xi as InterpolationSamplingType,yi as InvertStencilOp,li as KeepStencilOp,yc as KeyframeTrack,pa as LOD,Il as LatheGeometry,lr as Layers,Ai as LessCompare,U as LessDepth,zi as LessEqualCompare,q as LessEqualDepth,bi as LessEqualStencilFunc,fi as LessStencilFunc,jc as Light,cu as LightProbe,Jo as Line,zd as Line3,Eo as LineBasicMaterial,Dh as LineCurve,Wh as LineCurve3,rc as LineDashedMaterial,Go as LineLoop,Zo as LineSegments,Mt as LinearFilter,dc as LinearInterpolant,Tt as LinearMipMapLinearFilter,_t as LinearMipMapNearestFilter,At as LinearMipmapLinearFilter,St as LinearMipmapNearestFilter,ii as LinearSRGBColorSpace,K as LinearToneMapping,si as LinearTransfer,Ic as Loader,du as LoaderUtils,zc as LoadingManager,Pe as LoopOnce,Ne as LoopPingPong,Re as LoopRepeat,e as MOUSE,Zn as Material,v as MaterialBlending,uu as MaterialLoader,Ss as MathUtils,fd as Matrix2,Is as Matrix3,Qs as Matrix4,A as MaxEquation,Ra as Mesh,Ma as MeshBasicMaterial,ec as MeshDepthMaterial,ic as MeshDistanceMaterial,tc as MeshLambertMaterial,sc as MeshMatcapMaterial,Kl as MeshNormalMaterial,$l as MeshPhongMaterial,Gl as MeshPhysicalMaterial,Zl as MeshStandardMaterial,Ql as MeshToonMaterial,_ as MinEquation,gt as MirroredRepeatWrapping,G as MixOperation,x as MultiplyBlending,Z as MultiplyOperation,ft as NearestFilter,wt as NearestMipMapLinearFilter,bt as NearestMipMapNearestFilter,vt as NearestMipmapLinearFilter,xt as NearestMipmapNearestFilter,nt as NeutralToneMapping,_i as NeverCompare,D as NeverDepth,gi as NeverStencilFunc,m as NoBlending,ti as NoColorSpace,ni as NoNormalPacking,Q as NoToneMapping,Ue as NormalAnimationBlendMode,y as NormalBlending,oi as NormalGAPacking,ai as NormalRGPacking,Ii as NotEqualCompare,H as NotEqualDepth,wi as NotEqualStencilFunc,xc as NumberKeyframeTrack,Ar as Object3D,yu as ObjectLoader,Ke as ObjectSpaceNormalMap,Bl as OctahedronGeometry,z as OneFactor,j as OneMinusConstantAlphaFactor,F as OneMinusConstantColorFactor,P as OneMinusDstAlphaFactor,N as OneMinusDstColorFactor,k as OneMinusSrcAlphaFactor,I as OneMinusSrcColorFactor,ru as OrthographicCamera,h as PCFShadowMap,l as PCFSoftShadowMap,Hh as Path,Kc as PerspectiveCamera,lo as Plane,kl as PlaneGeometry,Kd as PlaneHelper,su as PointLight,Nd as PointLightHelper,ih as Points,$o as PointsMaterial,Dd as PolarGridHelper,vh as PolyhedronGeometry,qu as PositionalAudio,Ku as PropertyBinding,Xu as PropertyMixer,Uh as QuadraticBezierCurve,qh as QuadraticBezierCurve3,As as Quaternion,vc as QuaternionKeyframeTrack,bc as QuaternionLinearInterpolant,he as R11_EAC_Format,gs as RAD2DEG,ke as RED_GREEN_RGTC2_Format,Ie as RED_RGTC1_Format,t as REVISION,ce as RG11_EAC_Format,Ze as RGBADepthPacking,Wt as RGBAFormat,Gt as RGBAIntegerFormat,Se as RGBA_ASTC_10x10_Format,ve as RGBA_ASTC_10x5_Format,we as RGBA_ASTC_10x6_Format,Me as RGBA_ASTC_10x8_Format,_e as RGBA_ASTC_12x10_Format,Ae as RGBA_ASTC_12x12_Format,de as RGBA_ASTC_4x4_Format,pe as RGBA_ASTC_5x4_Format,me as RGBA_ASTC_5x5_Format,ye as RGBA_ASTC_6x5_Format,ge as RGBA_ASTC_6x6_Format,fe as RGBA_ASTC_8x5_Format,xe as RGBA_ASTC_8x6_Format,be as RGBA_ASTC_8x8_Format,Te as RGBA_BPTC_Format,oe as RGBA_ETC2_EAC_Format,re as RGBA_PVRTC_2BPPV1_Format,se as RGBA_PVRTC_4BPPV1_Format,Qt as RGBA_S3TC_DXT1_Format,Kt as RGBA_S3TC_DXT3_Format,te as RGBA_S3TC_DXT5_Format,Ge as RGBDepthPacking,Dt as RGBFormat,Zt as RGBIntegerFormat,ze as RGB_BPTC_SIGNED_Format,Ce as RGB_BPTC_UNSIGNED_Format,ne as RGB_ETC1_Format,ae as RGB_ETC2_Format,ie as RGB_PVRTC_2BPPV1_Format,ee as RGB_PVRTC_4BPPV1_Format,$t as RGB_S3TC_DXT1_Format,$e as RGDepthPacking,Yt as RGFormat,Ht as RGIntegerFormat,Hl as RawShaderMaterial,wa as Ray,ud as Raycaster,hu as RectAreaLight,Jt as RedFormat,Xt as RedIntegerFormat,tt as ReinhardToneMapping,Xs as RenderTarget,rd as RenderTarget3D,mt as RepeatWrapping,ci as ReplaceStencilOp,S as ReverseSubtractEquation,us as ReversedDepthFuncs,Ol as RingGeometry,le as SIGNED_R11_EAC_Format,Oe as SIGNED_RED_GREEN_RGTC2_Format,Be as SIGNED_RED_RGTC1_Format,ue as SIGNED_RG11_EAC_Format,ei as SRGBColorSpace,ri as SRGBTransfer,Er as Scene,Yl as ShaderMaterial,Wl as ShadowMaterial,Zh as Shape,Pl as ShapeGeometry,np as ShapePath,Sl as ShapeUtils,It as ShortType,Ga as Skeleton,Pd as SkeletonHelper,Ja as SkinnedMesh,js as Source,Nn as Sphere,Rl as SphereGeometry,yd as Spherical,lu as SphericalHarmonics3,Jh as SplineCurve,eu as SpotLight,Id as SpotLightHelper,la as Sprite,Gn as SpriteMaterial,B as SrcAlphaFactor,V as SrcAlphaSaturateFactor,C as SrcColorFactor,Fi as StaticCopyUsage,Oi as StaticDrawUsage,Ni as StaticReadUsage,zu as StereoCamera,ji as StreamCopyUsage,Ri as StreamDrawUsage,Ei as StreamReadUsage,wc as StringKeyframeTrack,M as SubtractEquation,f as SubtractiveBlending,i as TOUCH,Qe as TangentSpaceNormalMap,Nl as TetrahedronGeometry,qs as Texture,Lc as TextureLoader,hp as TextureUtils,ku as Timer,Ji as TimestampQuery,Vl as TorusGeometry,El as TorusKnotGeometry,$r as Triangle,Ye as TriangleFanDrawMode,Xe as TriangleStripDrawMode,Je as TrianglesDrawMode,Fl as TubeGeometry,ht as UVMapping,zn as Uint16BufferAttribute,In as Uint32BufferAttribute,_n as Uint8BufferAttribute,An as Uint8ClampedBufferAttribute,nd as Uniform,od as UniformsGroup,Xl as UniformsUtils,zt as UnsignedByteType,Lt as UnsignedInt101111Type,Et as UnsignedInt248Type,Ft as UnsignedInt5999Type,Ot as UnsignedIntType,Nt as UnsignedShort4444Type,Vt as UnsignedShort5551Type,Bt as UnsignedShortType,c as VSMShadowMap,_s as Vector2,Ts as Vector3,Js as Vector4,Mc as VectorKeyframeTrack,nh as VideoFrameTexture,rh as VideoTexture,$s as WebGL3DRenderTarget,Zs as WebGLArrayRenderTarget,Ui as WebGLCoordinateSystem,Ys as WebGLRenderTarget,qi as WebGPUCoordinateSystem,Cr as WebXRController,Ll as WireframeGeometry,We as WrapAroundEnding,je as ZeroCurvatureEnding,T as ZeroFactor,De as ZeroSlopeEnding,hi as ZeroStencilOp,Ul as cloneUniforms,Ki as createCanvasElement,Qi as createElementNS,os as error,op as getByteLength,ss as getConsoleFunction,Jl as getUnlitUniformColorSpace,$i as isTypedArray,rs as log,ql as mergeUniforms,cs as probeAsync,is as setConsoleFunction,as as warn,hs as warnOnce,ls as yieldToMain}; +const t="184dev",e={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},i={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},s=0,r=1,n=2,a=3,o=0,h=1,l=2,c=3,u=0,d=1,p=2,m=0,y=1,g=2,f=3,x=4,b=5,v=6,w=100,M=101,S=102,_=103,A=104,T=200,z=201,C=202,I=203,B=204,k=205,O=206,P=207,R=208,N=209,V=210,E=211,F=212,L=213,j=214,D=0,W=1,U=2,q=3,J=4,X=5,Y=6,H=7,Z=0,G=1,$=2,Q=0,K=1,tt=2,et=3,it=4,st=5,rt=6,nt=7,at="attached",ot="detached",ht=300,lt=301,ct=302,ut=303,dt=304,pt=306,mt=1e3,yt=1001,gt=1002,ft=1003,xt=1004,bt=1004,vt=1005,wt=1005,Mt=1006,St=1007,_t=1007,At=1008,Tt=1008,zt=1009,Ct=1010,It=1011,Bt=1012,kt=1013,Ot=1014,Pt=1015,Rt=1016,Nt=1017,Vt=1018,Et=1020,Ft=35902,Lt=35899,jt=1021,Dt=1022,Wt=1023,Ut=1026,qt=1027,Jt=1028,Xt=1029,Yt=1030,Ht=1031,Zt=1032,Gt=1033,$t=33776,Qt=33777,Kt=33778,te=33779,ee=35840,ie=35841,se=35842,re=35843,ne=36196,ae=37492,oe=37496,he=37488,le=37489,ce=37490,ue=37491,de=37808,pe=37809,me=37810,ye=37811,ge=37812,fe=37813,xe=37814,be=37815,ve=37816,we=37817,Me=37818,Se=37819,_e=37820,Ae=37821,Te=36492,ze=36494,Ce=36495,Ie=36283,Be=36284,ke=36285,Oe=36286,Pe=2200,Re=2201,Ne=2202,Ve=2300,Ee=2301,Fe=2302,Le=2303,je=2400,De=2401,We=2402,Ue=2500,qe=2501,Je=0,Xe=1,Ye=2,He=3200,Ze=3201,Ge=3202,$e=3203,Qe=0,Ke=1,ti="",ei="srgb",ii="srgb-linear",si="linear",ri="srgb",ni="",ai="rg",oi="ga",hi=0,li=7680,ci=7681,ui=7682,di=7683,pi=34055,mi=34056,yi=5386,gi=512,fi=513,xi=514,bi=515,vi=516,wi=517,Mi=518,Si=519,_i=512,Ai=513,Ti=514,zi=515,Ci=516,Ii=517,Bi=518,ki=519,Oi=35044,Pi=35048,Ri=35040,Ni=35045,Vi=35049,Ei=35041,Fi=35046,Li=35050,ji=35042,Di="100",Wi="300 es",Ui=2e3,qi=2001,Ji={COMPUTE:"compute",RENDER:"render"},Xi={PERSPECTIVE:"perspective",LINEAR:"linear",FLAT:"flat"},Yi={NORMAL:"normal",CENTROID:"centroid",SAMPLE:"sample",FIRST:"first",EITHER:"either"},Hi={TEXTURE_COMPARE:"depthTextureCompare"};const Zi={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Gi(t,e){return new Zi[t](e)}function $i(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Qi(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Ki(){const t=Qi("canvas");return t.style.display="block",t}const ts={};let es=null;function is(t){es=t}function ss(){return es}function rs(...t){const e="THREE."+t.shift();es?es("log",e,...t):console.log(e,...t)}function ns(t){const e=t[0];if("string"==typeof e&&e.startsWith("TSL:")){const e=t[1];e&&e.isStackTrace?t[0]+=" "+e.getLocation():t[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return t}function as(...t){const e="THREE."+(t=ns(t)).shift();if(es)es("warn",e,...t);else{const i=t[0];i&&i.isStackTrace?console.warn(i.getError(e)):console.warn(e,...t)}}function os(...t){const e="THREE."+(t=ns(t)).shift();if(es)es("error",e,...t);else{const i=t[0];i&&i.isStackTrace?console.error(i.getError(e)):console.error(e,...t)}}function hs(...t){const e=t.join(" ");e in ts||(ts[e]=!0,as(...t))}function ls(){return"undefined"!=typeof self&&void 0!==self.scheduler&&void 0!==self.scheduler.yield?self.scheduler.yield():new Promise(t=>{requestAnimationFrame(t)})}function cs(t,e,i){return new Promise(function(s,r){setTimeout(function n(){switch(t.clientWaitSync(e,t.SYNC_FLUSH_COMMANDS_BIT,0)){case t.WAIT_FAILED:r();break;case t.TIMEOUT_EXPIRED:setTimeout(n,i);break;default:s()}},i)})}const us={[D]:1,[U]:6,[J]:7,[q]:5,[W]:0,[Y]:2,[H]:4,[X]:3};class ds{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return void 0!==i&&(void 0!==i[t]&&-1!==i[t].indexOf(e))}removeEventListener(t,e){const i=this._listeners;if(void 0===i)return;const s=i[t];if(void 0!==s){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}}dispatchEvent(t){const e=this._listeners;if(void 0===e)return;const i=e[t.type];if(void 0!==i){t.target=this;const e=i.slice(0);for(let i=0,s=e.length;i>8&255]+ps[t>>16&255]+ps[t>>24&255]+"-"+ps[255&e]+ps[e>>8&255]+"-"+ps[e>>16&15|64]+ps[e>>24&255]+"-"+ps[63&i|128]+ps[i>>8&255]+"-"+ps[i>>16&255]+ps[i>>24&255]+ps[255&s]+ps[s>>8&255]+ps[s>>16&255]+ps[s>>24&255]).toLowerCase()}function xs(t,e,i){return Math.max(e,Math.min(i,t))}function bs(t,e){return(t%e+e)%e}function vs(t,e,i){return(1-i)*t+i*e}function ws(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Ms(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const Ss={DEG2RAD:ys,RAD2DEG:gs,generateUUID:fs,clamp:xs,euclideanModulo:bs,mapLinear:function(t,e,i,s,r){return s+(t-e)*(r-s)/(i-e)},inverseLerp:function(t,e,i){return t!==e?(i-t)/(e-t):0},lerp:vs,damp:function(t,e,i,s){return vs(t,e,1-Math.exp(-i*s))},pingpong:function(t,e=1){return e-Math.abs(bs(t,2*e)-e)},smoothstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(ms=t);let e=ms+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*ys},radToDeg:function(t){return t*gs},isPowerOfTwo:function(t){return!(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,i,s,r){const n=Math.cos,a=Math.sin,o=n(i/2),h=a(i/2),l=n((e+s)/2),c=a((e+s)/2),u=n((e-s)/2),d=a((e-s)/2),p=n((s-e)/2),m=a((s-e)/2);switch(r){case"XYX":t.set(o*c,h*u,h*d,o*l);break;case"YZY":t.set(h*d,o*c,h*u,o*l);break;case"ZXZ":t.set(h*u,h*d,o*c,o*l);break;case"XZX":t.set(o*c,h*m,h*p,o*l);break;case"YXY":t.set(h*p,o*c,h*m,o*l);break;case"ZYZ":t.set(h*m,h*p,o*c,o*l);break;default:as("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:Ms,denormalize:ws};class _s{constructor(t=0,e=0){_s.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,s=t.elements;return this.x=s[0]*e+s[3]*i+s[6],this.y=s[1]*e+s[4]*i+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=xs(this.x,t.x,e.x),this.y=xs(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=xs(this.x,t,e),this.y=xs(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(xs(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(xs(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),s=Math.sin(e),r=this.x-t.x,n=this.y-t.y;return this.x=r*i-n*s+t.x,this.y=r*s+n*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class As{constructor(t=0,e=0,i=0,s=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=s}static slerpFlat(t,e,i,s,r,n,a){let o=i[s+0],h=i[s+1],l=i[s+2],c=i[s+3],u=r[n+0],d=r[n+1],p=r[n+2],m=r[n+3];if(c!==m||o!==u||h!==d||l!==p){let t=o*u+h*d+l*p+c*m;t<0&&(u=-u,d=-d,p=-p,m=-m,t=-t);let e=1-a;if(t<.9995){const i=Math.acos(t),s=Math.sin(i);e=Math.sin(e*i)/s,o=o*e+u*(a=Math.sin(a*i)/s),h=h*e+d*a,l=l*e+p*a,c=c*e+m*a}else{o=o*e+u*a,h=h*e+d*a,l=l*e+p*a,c=c*e+m*a;const t=1/Math.sqrt(o*o+h*h+l*l+c*c);o*=t,h*=t,l*=t,c*=t}}t[e]=o,t[e+1]=h,t[e+2]=l,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,s,r,n){const a=i[s],o=i[s+1],h=i[s+2],l=i[s+3],c=r[n],u=r[n+1],d=r[n+2],p=r[n+3];return t[e]=a*p+l*c+o*d-h*u,t[e+1]=o*p+l*u+h*c-a*d,t[e+2]=h*p+l*d+a*u-o*c,t[e+3]=l*p-a*c-o*u-h*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,s){return this._x=t,this._y=e,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,s=t._y,r=t._z,n=t._order,a=Math.cos,o=Math.sin,h=a(i/2),l=a(s/2),c=a(r/2),u=o(i/2),d=o(s/2),p=o(r/2);switch(n){case"XYZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"YXZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"ZXY":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"ZYX":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"YZX":this._x=u*l*c+h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c-u*d*p;break;case"XZY":this._x=u*l*c-h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c+u*d*p;break;default:as("Quaternion: .setFromEuler() encountered an unknown order: "+n)}return!0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,s=Math.sin(i);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],s=e[4],r=e[8],n=e[1],a=e[5],o=e[9],h=e[2],l=e[6],c=e[10],u=i+a+c;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-o)*t,this._y=(r-h)*t,this._z=(n-s)*t}else if(i>a&&i>c){const t=2*Math.sqrt(1+i-a-c);this._w=(l-o)/t,this._x=.25*t,this._y=(s+n)/t,this._z=(r+h)/t}else if(a>c){const t=2*Math.sqrt(1+a-i-c);this._w=(r-h)/t,this._x=(s+n)/t,this._y=.25*t,this._z=(o+l)/t}else{const t=2*Math.sqrt(1+c-i-a);this._w=(n-s)/t,this._x=(r+h)/t,this._y=(o+l)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return i<1e-8?(i=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(xs(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(0===i)return this;const s=Math.min(1,e/i);return this.slerp(t,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(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,s=t._y,r=t._z,n=t._w,a=e._x,o=e._y,h=e._z,l=e._w;return this._x=i*l+n*a+s*h-r*o,this._y=s*l+n*o+r*a-i*h,this._z=r*l+n*h+i*o-s*a,this._w=n*l-i*a-s*o-r*h,this._onChangeCallback(),this}slerp(t,e){let i=t._x,s=t._y,r=t._z,n=t._w,a=this.dot(t);a<0&&(i=-i,s=-s,r=-r,n=-n,a=-a);let o=1-e;if(a<.9995){const t=Math.acos(a),h=Math.sin(t);o=Math.sin(o*t)/h,e=Math.sin(e*t)/h,this._x=this._x*o+i*e,this._y=this._y*o+s*e,this._z=this._z*o+r*e,this._w=this._w*o+n*e,this._onChangeCallback()}else this._x=this._x*o+i*e,this._y=this._y*o+s*e,this._z=this._z*o+r*e,this._w=this._w*o+n*e,this.normalize();return this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Ts{constructor(t=0,e=0,i=0){Ts.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return void 0===i&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Cs.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Cs.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*s,this.y=r[1]*e+r[4]*i+r[7]*s,this.z=r[2]*e+r[5]*i+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=t.elements,n=1/(r[3]*e+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*s+r[12])*n,this.y=(r[1]*e+r[5]*i+r[9]*s+r[13])*n,this.z=(r[2]*e+r[6]*i+r[10]*s+r[14])*n,this}applyQuaternion(t){const e=this.x,i=this.y,s=this.z,r=t.x,n=t.y,a=t.z,o=t.w,h=2*(n*s-a*i),l=2*(a*e-r*s),c=2*(r*i-n*e);return this.x=e+o*h+n*c-a*l,this.y=i+o*l+a*h-r*c,this.z=s+o*c+r*l-n*h,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*s,this.y=r[1]*e+r[5]*i+r[9]*s,this.z=r[2]*e+r[6]*i+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=xs(this.x,t.x,e.x),this.y=xs(this.y,t.y,e.y),this.z=xs(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=xs(this.x,t,e),this.y=xs(this.y,t,e),this.z=xs(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(xs(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,s=t.y,r=t.z,n=e.x,a=e.y,o=e.z;return this.x=s*o-r*a,this.y=r*n-i*o,this.z=i*a-s*n,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return zs.copy(this).projectOnVector(t),this.sub(zs)}reflect(t){return this.sub(zs.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(xs(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return e*e+i*i+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const s=Math.sin(e)*t;return this.x=s*Math.sin(i),this.y=Math.cos(e)*t,this.z=s*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=2*Math.random()-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const zs=new Ts,Cs=new As;class Is{constructor(t,e,i,s,r,n,a,o,h){Is.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,i,s,r,n,a,o,h)}set(t,e,i,s,r,n,a,o,h){const l=this.elements;return l[0]=t,l[1]=s,l[2]=a,l[3]=e,l[4]=r,l[5]=o,l[6]=i,l[7]=n,l[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,s=e.elements,r=this.elements,n=i[0],a=i[3],o=i[6],h=i[1],l=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=s[0],y=s[3],g=s[6],f=s[1],x=s[4],b=s[7],v=s[2],w=s[5],M=s[8];return r[0]=n*m+a*f+o*v,r[3]=n*y+a*x+o*w,r[6]=n*g+a*b+o*M,r[1]=h*m+l*f+c*v,r[4]=h*y+l*x+c*w,r[7]=h*g+l*b+c*M,r[2]=u*m+d*f+p*v,r[5]=u*y+d*x+p*w,r[8]=u*g+d*b+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8];return e*n*l-e*a*h-i*r*l+i*a*o+s*r*h-s*n*o}invert(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8],c=l*n-a*h,u=a*o-l*r,d=h*r-n*o,p=e*c+i*u+s*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(s*h-l*i)*m,t[2]=(a*i-s*n)*m,t[3]=u*m,t[4]=(l*e-s*o)*m,t[5]=(s*r-a*e)*m,t[6]=d*m,t[7]=(i*o-h*e)*m,t[8]=(n*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,s,r,n,a){const o=Math.cos(r),h=Math.sin(r);return this.set(i*o,i*h,-i*(o*n+h*a)+n+t,-s*h,s*o,-s*(-h*n+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(Bs.makeScale(t,e)),this}rotate(t){return this.premultiply(Bs.makeRotation(-t)),this}translate(t,e){return this.premultiply(Bs.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<9;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const Bs=new Is,ks=(new Is).set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Os=(new Is).set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Ps(){const t={enabled:!0,workingColorSpace:ii,spaces:{},convert:function(t,e,i){return!1!==this.enabled&&e!==i&&e&&i?(this.spaces[e].transfer===ri&&(t.r=Ns(t.r),t.g=Ns(t.g),t.b=Ns(t.b)),this.spaces[e].primaries!==this.spaces[i].primaries&&(t.applyMatrix3(this.spaces[e].toXYZ),t.applyMatrix3(this.spaces[i].fromXYZ)),this.spaces[i].transfer===ri&&(t.r=Vs(t.r),t.g=Vs(t.g),t.b=Vs(t.b)),t):t},workingToColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},colorSpaceToWorking:function(t,e){return this.convert(t,e,this.workingColorSpace)},getPrimaries:function(t){return this.spaces[t].primaries},getTransfer:function(t){return""===t?si:this.spaces[t].transfer},getToneMappingMode:function(t){return this.spaces[t].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(t,e=this.workingColorSpace){return t.fromArray(this.spaces[e].luminanceCoefficients)},define:function(t){Object.assign(this.spaces,t)},_getMatrix:function(t,e,i){return t.copy(this.spaces[e].toXYZ).multiply(this.spaces[i].fromXYZ)},_getDrawingBufferColorSpace:function(t){return this.spaces[t].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(t=this.workingColorSpace){return this.spaces[t].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(e,i){return hs("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),t.workingToColorSpace(e,i)},toWorkingColorSpace:function(e,i){return hs("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),t.colorSpaceToWorking(e,i)}},e=[.64,.33,.3,.6,.15,.06],i=[.2126,.7152,.0722],s=[.3127,.329];return t.define({[ii]:{primaries:e,whitePoint:s,transfer:si,toXYZ:ks,fromXYZ:Os,luminanceCoefficients:i,workingColorSpaceConfig:{unpackColorSpace:ei},outputColorSpaceConfig:{drawingBufferColorSpace:ei}},[ei]:{primaries:e,whitePoint:s,transfer:ri,toXYZ:ks,fromXYZ:Os,luminanceCoefficients:i,outputColorSpaceConfig:{drawingBufferColorSpace:ei}}}),t}const Rs=Ps();function Ns(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Vs(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let Es;class Fs{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{void 0===Es&&(Es=Qi("canvas")),Es.width=t.width,Es.height=t.height;const e=Es.getContext("2d");t instanceof ImageData?e.putImageData(t,0,0):e.drawImage(t,0,0,t.width,t.height),i=Es}return i.toDataURL(e)}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=Qi("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const s=i.getImageData(0,0,t.width,t.height),r=s.data;for(let t=0;t1),this.pmremVersion=0}get width(){return this.source.getSize(Us).x}get height(){return this.source.getSize(Us).y}get depth(){return this.source.getSize(Us).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(void 0===i){as(`Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[e]=i:as(`Texture.setValues(): property '${e}' does not exist.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==ht)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case mt:t.x=t.x-Math.floor(t.x);break;case yt:t.x=t.x<0?0:1;break;case gt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case mt:t.y=t.y-Math.floor(t.y);break;case yt:t.y=t.y<0?0:1;break;case gt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){!0===t&&this.pmremVersion++}}qs.DEFAULT_IMAGE=null,qs.DEFAULT_MAPPING=ht,qs.DEFAULT_ANISOTROPY=1;class Js{constructor(t=0,e=0,i=0,s=1){Js.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,s){return this.x=t,this.y=e,this.z=i,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){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: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=this.w,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*s+n[12]*r,this.y=n[1]*e+n[5]*i+n[9]*s+n[13]*r,this.z=n[2]*e+n[6]*i+n[10]*s+n[14]*r,this.w=n[3]*e+n[7]*i+n[11]*s+n[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,s,r;const n=.01,a=.1,o=t.elements,h=o[0],l=o[4],c=o[8],u=o[1],d=o[5],p=o[9],m=o[2],y=o[6],g=o[10];if(Math.abs(l-u)o&&t>f?tf?o1);this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),null!==this.pivot&&(s.pivot=this.pivot.toArray()),!1===this.matrixAutoUpdate&&(s.matrixAutoUpdate=!1),void 0!==this.morphTargetDictionary&&(s.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),void 0!==this.morphTargetInfluences&&(s.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(t=>({...t,boundingBox:t.boundingBox?t.boundingBox.toJSON():void 0,boundingSphere:t.boundingSphere?t.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(t=>({...t})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(t),s.indirectTexture=this._indirectTexture.toJSON(t),null!==this._colorsTexture&&(s.colorsTexture=this._colorsTexture.toJSON(t)),null!==this.boundingSphere&&(s.boundingSphere=this.boundingSphere.toJSON()),null!==this.boundingBox&&(s.boundingBox=this.boundingBox.toJSON())),this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const i=e.shapes;if(Array.isArray(i))for(let e=0,s=i.length;e0){s.children=[];for(let e=0;e0){s.animations=[];for(let e=0;e0&&(i.geometries=e),s.length>0&&(i.materials=s),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),h.length>0&&(i.skeletons=h),l.length>0&&(i.animations=l),c.length>0&&(i.nodes=c)}return i.object=s,i;function n(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),null!==t.pivot&&(this.pivot=t.pivot.clone()),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;eo+l?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!h.inputState.pinching&&a<=o-l&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(s=e.getPose(t.targetRaySpace,i),null===s&&null!==r&&(s=r),null!==s&&(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(zr)))}return null!==a&&(a.visible=null!==s),null!==o&&(o.visible=null!==r),null!==h&&(h.visible=null!==n),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const i=new Tr;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}const Ir={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},Br={h:0,s:0,l:0},kr={h:0,s:0,l:0};function Or(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}class Pr{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(void 0===e&&void 0===i){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=ei){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Rs.colorSpaceToWorking(this,e),this}setRGB(t,e,i,s=Rs.workingColorSpace){return this.r=t,this.g=e,this.b=i,Rs.colorSpaceToWorking(this,s),this}setHSL(t,e,i,s=Rs.workingColorSpace){if(t=bs(t,1),e=xs(e,0,1),i=xs(i,0,1),0===e)this.r=this.g=this.b=i;else{const s=i<=.5?i*(1+e):i+e-i*e,r=2*i-s;this.r=Or(r,s,t+1/3),this.g=Or(r,s,t),this.b=Or(r,s,t-1/3)}return Rs.colorSpaceToWorking(this,s),this}setStyle(t,e=ei){function i(e){void 0!==e&&parseFloat(e)<1&&as("Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const n=s[1],a=s[2];switch(n){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,e);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,e);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,e);break;default:as("Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const i=s[1],r=i.length;if(3===r)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,e);if(6===r)return this.setHex(parseInt(i,16),e);as("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=ei){const i=Ir[t.toLowerCase()];return void 0!==i?this.setHex(i,e):as("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Ns(t.r),this.g=Ns(t.g),this.b=Ns(t.b),this}copyLinearToSRGB(t){return this.r=Vs(t.r),this.g=Vs(t.g),this.b=Vs(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=ei){return Rs.workingToColorSpace(Rr.copy(this),t),65536*Math.round(xs(255*Rr.r,0,255))+256*Math.round(xs(255*Rr.g,0,255))+Math.round(xs(255*Rr.b,0,255))}getHexString(t=ei){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Rs.workingColorSpace){Rs.workingToColorSpace(Rr.copy(this),e);const i=Rr.r,s=Rr.g,r=Rr.b,n=Math.max(i,s,r),a=Math.min(i,s,r);let o,h;const l=(a+n)/2;if(a===n)o=0,h=0;else{const t=n-a;switch(h=l<=.5?t/(n+a):t/(2-n-a),n){case i:o=(s-r)/t+(s0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}const Fr=new Ts,Lr=new Ts,jr=new Ts,Dr=new Ts,Wr=new Ts,Ur=new Ts,qr=new Ts,Jr=new Ts,Xr=new Ts,Yr=new Ts,Hr=new Js,Zr=new Js,Gr=new Js;class $r{constructor(t=new Ts,e=new Ts,i=new Ts){this.a=t,this.b=e,this.c=i}static getNormal(t,e,i,s){s.subVectors(i,e),Fr.subVectors(t,e),s.cross(Fr);const r=s.lengthSq();return r>0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,i,s,r){Fr.subVectors(s,e),Lr.subVectors(i,e),jr.subVectors(t,e);const n=Fr.dot(Fr),a=Fr.dot(Lr),o=Fr.dot(jr),h=Lr.dot(Lr),l=Lr.dot(jr),c=n*h-a*a;if(0===c)return r.set(0,0,0),null;const u=1/c,d=(h*o-a*l)*u,p=(n*l-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,s){return null!==this.getBarycoord(t,e,i,s,Dr)&&(Dr.x>=0&&Dr.y>=0&&Dr.x+Dr.y<=1)}static getInterpolation(t,e,i,s,r,n,a,o){return null===this.getBarycoord(t,e,i,s,Dr)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,Dr.x),o.addScaledVector(n,Dr.y),o.addScaledVector(a,Dr.z),o)}static getInterpolatedAttribute(t,e,i,s,r,n){return Hr.setScalar(0),Zr.setScalar(0),Gr.setScalar(0),Hr.fromBufferAttribute(t,e),Zr.fromBufferAttribute(t,i),Gr.fromBufferAttribute(t,s),n.setScalar(0),n.addScaledVector(Hr,r.x),n.addScaledVector(Zr,r.y),n.addScaledVector(Gr,r.z),n}static isFrontFacing(t,e,i,s){return Fr.subVectors(i,e),Lr.subVectors(t,e),Fr.cross(Lr).dot(s)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,s){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,i,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,s),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Fr.subVectors(this.c,this.b),Lr.subVectors(this.a,this.b),.5*Fr.cross(Lr).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return $r.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return $r.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,s,r){return $r.getInterpolation(t,this.a,this.b,this.c,e,i,s,r)}containsPoint(t){return $r.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return $r.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,s=this.b,r=this.c;let n,a;Wr.subVectors(s,i),Ur.subVectors(r,i),Jr.subVectors(t,i);const o=Wr.dot(Jr),h=Ur.dot(Jr);if(o<=0&&h<=0)return e.copy(i);Xr.subVectors(t,s);const l=Wr.dot(Xr),c=Ur.dot(Xr);if(l>=0&&c<=l)return e.copy(s);const u=o*c-l*h;if(u<=0&&o>=0&&l<=0)return n=o/(o-l),e.copy(i).addScaledVector(Wr,n);Yr.subVectors(t,r);const d=Wr.dot(Yr),p=Ur.dot(Yr);if(p>=0&&d<=p)return e.copy(r);const m=d*h-o*p;if(m<=0&&h>=0&&p<=0)return a=h/(h-p),e.copy(i).addScaledVector(Ur,a);const y=l*p-d*c;if(y<=0&&c-l>=0&&d-p>=0)return qr.subVectors(r,s),a=(c-l)/(c-l+(d-p)),e.copy(s).addScaledVector(qr,a);const g=1/(y+m+u);return n=m*g,a=u*g,e.copy(i).addScaledVector(Wr,n).addScaledVector(Ur,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}class Qr{constructor(t=new Ts(1/0,1/0,1/0),e=new Ts(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,i=t.length;e=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,tn),tn.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ln),cn.subVectors(this.max,ln),sn.subVectors(t.a,ln),rn.subVectors(t.b,ln),nn.subVectors(t.c,ln),an.subVectors(rn,sn),on.subVectors(nn,rn),hn.subVectors(sn,nn);let e=[0,-an.z,an.y,0,-on.z,on.y,0,-hn.z,hn.y,an.z,0,-an.x,on.z,0,-on.x,hn.z,0,-hn.x,-an.y,an.x,0,-on.y,on.x,0,-hn.y,hn.x,0];return!!pn(e,sn,rn,nn,cn)&&(e=[1,0,0,0,1,0,0,0,1],!!pn(e,sn,rn,nn,cn)&&(un.crossVectors(an,on),e=[un.x,un.y,un.z],pn(e,sn,rn,nn,cn)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,tn).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(tn).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Kr[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Kr[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Kr[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Kr[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Kr[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Kr[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Kr[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Kr[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Kr)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Kr=[new Ts,new Ts,new Ts,new Ts,new Ts,new Ts,new Ts,new Ts],tn=new Ts,en=new Qr,sn=new Ts,rn=new Ts,nn=new Ts,an=new Ts,on=new Ts,hn=new Ts,ln=new Ts,cn=new Ts,un=new Ts,dn=new Ts;function pn(t,e,i,s,r){for(let n=0,a=t.length-3;n<=a;n+=3){dn.fromArray(t,n);const a=r.x*Math.abs(dn.x)+r.y*Math.abs(dn.y)+r.z*Math.abs(dn.z),o=e.dot(dn),h=i.dot(dn),l=s.dot(dn);if(Math.max(-Math.max(o,h,l),Math.min(o,h,l))>a)return!1}return!0}const mn=yn();function yn(){const t=new ArrayBuffer(4),e=new Float32Array(t),i=new Uint32Array(t),s=new Uint32Array(512),r=new Uint32Array(512);for(let t=0;t<256;++t){const e=t-127;e<-27?(s[t]=0,s[256|t]=32768,r[t]=24,r[256|t]=24):e<-14?(s[t]=1024>>-e-14,s[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(s[t]=e+15<<10,s[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(s[t]=31744,s[256|t]=64512,r[t]=24,r[256|t]=24):(s[t]=31744,s[256|t]=64512,r[t]=13,r[256|t]=13)}const n=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,i=0;for(;!(8388608&e);)e<<=1,i-=8388608;e&=-8388609,i+=947912704,n[t]=e|i}for(let t=1024;t<2048;++t)n[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:i,baseTable:s,shiftTable:r,mantissaTable:n,exponentTable:a,offsetTable:o}}function gn(t){Math.abs(t)>65504&&as("DataUtils.toHalfFloat(): Value out of range."),t=xs(t,-65504,65504),mn.floatView[0]=t;const e=mn.uint32View[0],i=e>>23&511;return mn.baseTable[i]+((8388607&e)>>mn.shiftTable[i])}function fn(t){const e=t>>10;return mn.uint32View[0]=mn.mantissaTable[mn.offsetTable[e]+(1023&t)]+mn.exponentTable[e],mn.floatView[0]}class xn{static toHalfFloat(t){return gn(t)}static fromHalfFloat(t){return fn(t)}}const bn=new Ts,vn=new _s;let wn=0;class Mn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:wn++}),this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=i,this.usage=Oi,this.updateRanges=[],this.gpuType=Pt,this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let s=0,r=this.itemSize;sthis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Pn.subVectors(t,this.center);const e=Pn.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),i=.5*(t-this.radius);this.center.addScaledVector(Pn,i/t),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(Rn.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Pn.copy(t.center).add(Rn)),this.expandByPoint(Pn.copy(t.center).sub(Rn))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}let Vn=0;const En=new Qs,Fn=new Ar,Ln=new Ts,jn=new Qr,Dn=new Qr,Wn=new Ts;class Un extends ds{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Vn++}),this.uuid=fs(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(function(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}(t)?In:zn)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,i=0){this.groups.push({start:t,count:e,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const i=this.attributes.normal;if(void 0!==i){const e=(new Is).getNormalMatrix(t);i.applyNormalMatrix(e),i.needsUpdate=!0}const s=this.attributes.tangent;return void 0!==s&&(s.transformDirection(t),s.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return En.makeRotationFromQuaternion(t),this.applyMatrix4(En),this}rotateX(t){return En.makeRotationX(t),this.applyMatrix4(En),this}rotateY(t){return En.makeRotationY(t),this.applyMatrix4(En),this}rotateZ(t){return En.makeRotationZ(t),this.applyMatrix4(En),this}translate(t,e,i){return En.makeTranslation(t,e,i),this.applyMatrix4(En),this}scale(t,e,i){return En.makeScale(t,e,i),this.applyMatrix4(En),this}lookAt(t){return Fn.lookAt(t),Fn.updateMatrix(),this.applyMatrix4(Fn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ln).negate(),this.translate(Ln.x,Ln.y,Ln.z),this}setFromPoints(t){const e=this.getAttribute("position");if(void 0===e){const e=[];for(let i=0,s=t.length;ie.count&&as("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Qr);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return os("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),void this.boundingBox.set(new Ts(-1/0,-1/0,-1/0),new Ts(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,i=e.length;t0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const e in i){const s=i[e];t.data.attributes[e]=s.toJSON(t.data)}const s={};let r=!1;for(const e in this.morphAttributes){const i=this.morphAttributes[e],n=[];for(let e=0,s=i.length;e0&&(s[e]=n,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const n=this.groups;n.length>0&&(t.data.groups=JSON.parse(JSON.stringify(n)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere=a.toJSON()),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;null!==i&&this.setIndex(i.clone());const s=t.attributes;for(const t in s){const i=s[t];this.setAttribute(t,i.clone(e))}const r=t.morphAttributes;for(const t in r){const i=[],s=r[t];for(let t=0,r=s.length;t0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const i=t[e];if(void 0===i){as(`Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[e]=i:as(`Material: '${e}' is not a property of THREE.${this.type}.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};function s(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(t).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(t).uuid),void 0!==this.dispersion&&(i.dispersion=this.dispersion),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(i.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapRotation&&(i.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),!0===this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=!0),204!==this.blendSrc&&(i.blendSrc=this.blendSrc),205!==this.blendDst&&(i.blendDst=this.blendDst),100!==this.blendEquation&&(i.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(i.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(i.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(i.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(i.depthFunc=this.depthFunc),!1===this.depthTest&&(i.depthTest=this.depthTest),!1===this.depthWrite&&(i.depthWrite=this.depthWrite),!1===this.colorWrite&&(i.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(i.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(i.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(i.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==li&&(i.stencilFail=this.stencilFail),this.stencilZFail!==li&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==li&&(i.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(i.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaHash&&(i.alphaHash=!0),!0===this.alphaToCoverage&&(i.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=!0),!0===this.forceSinglePass&&(i.forceSinglePass=!0),!1===this.allowOverride&&(i.allowOverride=!1),!0===this.wireframe&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=!0),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),e){const e=s(t.textures),r=s(t.images);e.length>0&&(i.textures=e),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(null!==e){const t=e.length;i=new Array(t);for(let s=0;s!==t;++s)i[s]=e[s].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.allowOverride=t.allowOverride,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}class Gn extends Zn{constructor(t){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new Pr(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}const $n=new Ts,Qn=new Ts,Kn=new Ts,ta=new _s,ea=new _s,ia=new Qs,sa=new Ts,ra=new Ts,na=new Ts,aa=new _s,oa=new _s,ha=new _s;class la extends Ar{constructor(t=new Gn){if(super(),this.isSprite=!0,this.type="Sprite",void 0===Yn){Yn=new Un;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new qn(t,5);Yn.setIndex([0,1,2,0,2,3]),Yn.setAttribute("position",new Xn(e,3,0,!1)),Yn.setAttribute("uv",new Xn(e,2,3,!1))}this.geometry=Yn,this.material=t,this.center=new _s(.5,.5),this.count=1}raycast(t,e){null===t.camera&&os('Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),Qn.setFromMatrixScale(this.matrixWorld),ia.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),Kn.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&Qn.multiplyScalar(-Kn.z);const i=this.material.rotation;let s,r;0!==i&&(r=Math.cos(i),s=Math.sin(i));const n=this.center;ca(sa.set(-.5,-.5,0),Kn,n,Qn,s,r),ca(ra.set(.5,-.5,0),Kn,n,Qn,s,r),ca(na.set(.5,.5,0),Kn,n,Qn,s,r),aa.set(0,0),oa.set(1,0),ha.set(1,1);let a=t.ray.intersectTriangle(sa,ra,na,!1,$n);if(null===a&&(ca(ra.set(-.5,.5,0),Kn,n,Qn,s,r),oa.set(0,1),a=t.ray.intersectTriangle(sa,na,ra,!1,$n),null===a))return;const o=t.ray.origin.distanceTo($n);ot.far||e.push({distance:o,point:$n.clone(),uv:$r.getInterpolation($n,sa,ra,na,aa,oa,ha,new _s),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function ca(t,e,i,s,r,n){ta.subVectors(t,i).addScalar(.5).multiply(s),void 0!==r?(ea.x=n*ta.x-r*ta.y,ea.y=r*ta.x+n*ta.y):ea.copy(ta),t.copy(e),t.x+=ea.x,t.y+=ea.y,t.applyMatrix4(ia)}const ua=new Ts,da=new Ts;class pa extends Ar{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,i=e.length;t0){let i,s;for(i=1,s=e.length;i0){ua.setFromMatrixPosition(this.matrixWorld);const i=t.ray.origin.distanceTo(ua);this.getObjectForDistance(i).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){ua.setFromMatrixPosition(t.matrixWorld),da.setFromMatrixPosition(this.matrixWorld);const i=ua.distanceTo(da)/t.zoom;let s,r;for(e[0].object.visible=!0,s=1,r=e.length;s=t))break;e[s-1].object.visible=!1,e[s].object.visible=!0}for(this._currentLevel=s-1;s0)if(c=n*o-a,u=n*a-o,p=r*l,c>=0)if(u>=-p)if(u<=p){const t=1/l;c*=t,u*=t,d=c*(c+n*u+2*a)+u*(n*c+u+2*o)+h}else u=r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u=-r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u<=-p?(c=Math.max(0,-(-n*r+a)),u=c>0?-r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h):u<=p?(c=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+h):(c=Math.max(0,-(n*r+a)),u=c>0?r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h);else u=n>0?-r:r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;return i&&i.copy(this.origin).addScaledVector(this.direction,c),s&&s.copy(ya).addScaledVector(ga,u),d}intersectSphere(t,e){ma.subVectors(t.center,this.origin);const i=ma.dot(this.direction),s=ma.dot(ma)-i*i,r=t.radius*t.radius;if(s>r)return null;const n=Math.sqrt(r-s),a=i-n,o=i+n;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return!(t.radius<0)&&this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return null===i?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,s,r,n,a,o;const h=1/this.direction.x,l=1/this.direction.y,c=1/this.direction.z,u=this.origin;return h>=0?(i=(t.min.x-u.x)*h,s=(t.max.x-u.x)*h):(i=(t.max.x-u.x)*h,s=(t.min.x-u.x)*h),l>=0?(r=(t.min.y-u.y)*l,n=(t.max.y-u.y)*l):(r=(t.max.y-u.y)*l,n=(t.min.y-u.y)*l),i>n||r>s?null:((r>i||isNaN(i))&&(i=r),(n=0?(a=(t.min.z-u.z)*c,o=(t.max.z-u.z)*c):(a=(t.max.z-u.z)*c,o=(t.min.z-u.z)*c),i>o||a>s?null:((a>i||i!=i)&&(i=a),(o=0?i:s,e)))}intersectsBox(t){return null!==this.intersectBox(t,ma)}intersectTriangle(t,e,i,s,r){xa.subVectors(e,t),ba.subVectors(i,t),va.crossVectors(xa,ba);let n,a=this.direction.dot(va);if(a>0){if(s)return null;n=1}else{if(!(a<0))return null;n=-1,a=-a}fa.subVectors(this.origin,t);const o=n*this.direction.dot(ba.crossVectors(fa,ba));if(o<0)return null;const h=n*this.direction.dot(xa.cross(fa));if(h<0)return null;if(o+h>a)return null;const l=-n*fa.dot(va);return l<0?null:this.at(l/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Ma extends Zn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Pr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const Sa=new Qs,_a=new wa,Aa=new Nn,Ta=new Ts,za=new Ts,Ca=new Ts,Ia=new Ts,Ba=new Ts,ka=new Ts,Oa=new Ts,Pa=new Ts;class Ra extends Ar{constructor(t=new Un,e=new Ma){super(),this.isMesh=!0,this.type="Mesh",this.geometry=t,this.material=e,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t(t.far-t.near)**2)return}Sa.copy(r).invert(),_a.copy(t.ray).applyMatrix4(Sa),null!==i.boundingBox&&!1===_a.intersectsBox(i.boundingBox)||this._computeIntersections(t,e,_a)}}_computeIntersections(t,e,i){let s;const r=this.geometry,n=this.material,a=r.index,o=r.attributes.position,h=r.attributes.uv,l=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(null!==a)if(Array.isArray(n))for(let r=0,o=u.length;ri.far?null:{distance:l,point:Pa.clone(),object:t}}(t,e,i,s,za,Ca,Ia,Oa);if(c){const t=new Ts;$r.getBarycoord(Oa,za,Ca,Ia,t),r&&(c.uv=$r.getInterpolatedAttribute(r,o,h,l,t,new _s)),n&&(c.uv1=$r.getInterpolatedAttribute(n,o,h,l,t,new _s)),a&&(c.normal=$r.getInterpolatedAttribute(a,o,h,l,t,new Ts),c.normal.dot(s.direction)>0&&c.normal.multiplyScalar(-1));const e={a:o,b:h,c:l,normal:new Ts,materialIndex:0};$r.getNormal(za,Ca,Ia,e.normal),c.face=e,c.barycoord=t}return c}const Va=new Ts,Ea=new Js,Fa=new Js,La=new Ts,ja=new Qs,Da=new Ts,Wa=new Nn,Ua=new Qs,qa=new wa;class Ja extends Ra{constructor(t,e){super(t,e),this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode=at,this.bindMatrix=new Qs,this.bindMatrixInverse=new Qs,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){const t=this.geometry;null===this.boundingBox&&(this.boundingBox=new Qr),this.boundingBox.makeEmpty();const e=t.getAttribute("position");for(let t=0;t1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||ho.getNormalMatrix(t),s=this.coplanarPoint(ao).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const co=new Nn,uo=new _s(.5,.5),po=new Ts;class mo{constructor(t=new lo,e=new lo,i=new lo,s=new lo,r=new lo,n=new lo){this.planes=[t,e,i,s,r,n]}set(t,e,i,s,r,n){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(s),a[4].copy(r),a[5].copy(n),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=2e3,i=!1){const s=this.planes,r=t.elements,n=r[0],a=r[1],o=r[2],h=r[3],l=r[4],c=r[5],u=r[6],d=r[7],p=r[8],m=r[9],y=r[10],g=r[11],f=r[12],x=r[13],b=r[14],v=r[15];if(s[0].setComponents(h-n,d-l,g-p,v-f).normalize(),s[1].setComponents(h+n,d+l,g+p,v+f).normalize(),s[2].setComponents(h+a,d+c,g+m,v+x).normalize(),s[3].setComponents(h-a,d-c,g-m,v-x).normalize(),i)s[4].setComponents(o,u,y,b).normalize(),s[5].setComponents(h-o,d-u,g-y,v-b).normalize();else if(s[4].setComponents(h-o,d-u,g-y,v-b).normalize(),e===Ui)s[5].setComponents(h+o,d+u,g+y,v+b).normalize();else{if(e!==qi)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);s[5].setComponents(o,u,y,b).normalize()}return this}intersectsObject(t){if(void 0!==t.boundingSphere)null===t.boundingSphere&&t.computeBoundingSphere(),co.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;null===e.boundingSphere&&e.computeBoundingSphere(),co.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(co)}intersectsSprite(t){co.center.set(0,0,0);const e=uo.distanceTo(t.center);return co.radius=.7071067811865476+e,co.applyMatrix4(t.matrixWorld),this.intersectsSphere(co)}intersectsSphere(t){const e=this.planes,i=t.center,s=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(i)0?t.max.x:t.min.x,po.y=s.normal.y>0?t.max.y:t.min.y,po.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint(po)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}const yo=new Qs,go=new mo;class fo{constructor(){this.coordinateSystem=Ui}intersectsObject(t,e){if(!e.isArrayCamera||0===e.cameras.length)return!1;for(let i=0;i=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});const a=r[this.index];n.push(a),this.index++,a.start=t,a.count=e,a.z=i,a.index=s}reset(){this.list.length=0,this.index=0}}const Mo=new Qs,So=new Pr(1,1,1),_o=new mo,Ao=new fo,To=new Qr,zo=new Nn,Co=new Ts,Io=new Ts,Bo=new Ts,ko=new wo,Oo=new Ra,Po=[];function Ro(t,e,i=0){const s=e.itemSize;if(t.isInterleavedBufferAttribute||t.array.constructor!==e.array.constructor){const r=t.count;for(let n=0;n65535?new Uint32Array(s):new Uint16Array(s);e.setIndex(new Mn(t,1))}this._geometryInitialized=!0}}_validateGeometry(t){const e=this.geometry;if(Boolean(t.getIndex())!==Boolean(e.getIndex()))throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in e.attributes){if(!t.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=t.getAttribute(i),r=e.getAttribute(i);if(s.itemSize!==r.itemSize||s.normalized!==r.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(t){const e=this._instanceInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${t}. Instance is either out of range or has been deleted.`)}validateGeometryId(t){const e=this._geometryInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${t}. Geometry is either out of range or has been deleted.`)}setCustomSort(t){return this.customSort=t,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Qr);const t=this.boundingBox,e=this._instanceInfo;t.makeEmpty();for(let i=0,s=e.length;i=this.maxInstanceCount&&0===this._availableInstanceIds.length)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const e={visible:!0,active:!0,geometryIndex:t};let i=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(xo),i=this._availableInstanceIds.shift(),this._instanceInfo[i]=e):(i=this._instanceInfo.length,this._instanceInfo.push(e));const s=this._matricesTexture;Mo.identity().toArray(s.image.data,16*i),s.needsUpdate=!0;const r=this._colorsTexture;return r&&(So.toArray(r.image.data,4*i),r.needsUpdate=!0),this._visibilityChanged=!0,i}addGeometry(t,e=-1,i=-1){this._initializeGeometry(t),this._validateGeometry(t);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},r=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=-1===e?t.getAttribute("position").count:e;const n=t.getIndex();if(null!==n&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=-1===i?n.count:i),-1!==s.indexStart&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let a;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(xo),a=this._availableGeometryIds.shift(),r[a]=s):(a=this._geometryCount,this._geometryCount++,r.push(s)),this.setGeometryAt(a,t),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,a}setGeometryAt(t,e){if(t>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(e);const i=this.geometry,s=null!==i.getIndex(),r=i.getIndex(),n=e.getIndex(),a=this._geometryInfo[t];if(s&&n.count>a.reservedIndexCount||e.attributes.position.count>a.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const o=a.vertexStart,h=a.reservedVertexCount;a.vertexCount=e.getAttribute("position").count;for(const t in i.attributes){const s=e.getAttribute(t),r=i.getAttribute(t);Ro(s,r,o);const n=s.itemSize;for(let t=s.count,e=h;t=e.length||!1===e[t].active)return this;const i=this._instanceInfo;for(let e=0,s=i.length;ee).sort((t,e)=>i[t].vertexStart-i[e].vertexStart),r=this.geometry;for(let n=0,a=i.length;n=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingBox){const t=new Qr,e=i.index,r=i.attributes.position;for(let i=s.start,n=s.start+s.count;i=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingSphere){const e=new Nn;this.getBoundingBoxAt(t,To),To.getCenter(e.center);const r=i.index,n=i.attributes.position;let a=0;for(let t=s.start,i=s.start+s.count;tt.active);if(Math.max(...i.map(t=>t.vertexStart+t.reservedVertexCount))>t)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${e}. Cannot shrink further.`);if(this.geometry.index){if(Math.max(...i.map(t=>t.indexStart+t.reservedIndexCount))>e)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${e}. Cannot shrink further.`)}const s=this.geometry;s.dispose(),this._maxVertexCount=t,this._maxIndexCount=e,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Un,this._initializeGeometry(s));const r=this.geometry;s.index&&No(s.index.array,r.index.array);for(const t in s.attributes)No(s.attributes[t].array,r.attributes[t].array)}raycast(t,e){const i=this._instanceInfo,s=this._geometryInfo,r=this.matrixWorld,n=this.geometry;Oo.material=this.material,Oo.geometry.index=n.index,Oo.geometry.attributes=n.attributes,null===Oo.geometry.boundingBox&&(Oo.geometry.boundingBox=new Qr),null===Oo.geometry.boundingSphere&&(Oo.geometry.boundingSphere=new Nn);for(let n=0,a=i.length;n({...t,boundingBox:null!==t.boundingBox?t.boundingBox.clone():null,boundingSphere:null!==t.boundingSphere?t.boundingSphere.clone():null})),this._instanceInfo=t._instanceInfo.map(t=>({...t})),this._availableInstanceIds=t._availableInstanceIds.slice(),this._availableGeometryIds=t._availableGeometryIds.slice(),this._nextIndexStart=t._nextIndexStart,this._nextVertexStart=t._nextVertexStart,this._geometryCount=t._geometryCount,this._maxInstanceCount=t._maxInstanceCount,this._maxVertexCount=t._maxVertexCount,this._maxIndexCount=t._maxIndexCount,this._geometryInitialized=t._geometryInitialized,this._multiDrawCounts=t._multiDrawCounts.slice(),this._multiDrawStarts=t._multiDrawStarts.slice(),this._indirectTexture=t._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=t._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),null!==this._colorsTexture&&(this._colorsTexture=t._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,null!==this._colorsTexture&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(t,e,i,s,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const n=s.getIndex();let a=null===n?1:n.array.BYTES_PER_ELEMENT,o=1;r.wireframe&&(o=2,a=s.attributes.position.count>65535?4:2);const h=this._instanceInfo,l=this._multiDrawStarts,c=this._multiDrawCounts,u=this._geometryInfo,d=this.perObjectFrustumCulled,p=this._indirectTexture,m=p.image.data,y=i.isArrayCamera?Ao:_o;d&&!i.isArrayCamera&&(Mo.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),_o.setFromProjectionMatrix(Mo,i.coordinateSystem,i.reversedDepth));let g=0;if(this.sortObjects){Mo.copy(this.matrixWorld).invert(),Co.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Mo),Io.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Mo);for(let t=0,e=h.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;ts)return;Uo.applyMatrix4(t.matrixWorld);const h=e.ray.origin.distanceTo(Uo);return he.far?void 0:{distance:h,point:qo.clone().applyMatrix4(t.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:t}}const Yo=new Ts,Ho=new Ts;class Zo extends Jo{constructor(t,e){super(t,e),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(null===t.index){const e=t.attributes.position,i=[];for(let t=0,s=e.count;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;tr.far)return;n.push({distance:h,distanceToRay:Math.sqrt(o),point:i,index:e,face:null,faceIndex:null,barycoord:null,object:a})}}class rh extends qs{constructor(t,e,i,s,r=1006,n=1006,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const l=this;"requestVideoFrameCallback"in t&&(this._requestVideoFrameCallbackId=t.requestVideoFrameCallback(function e(){l.needsUpdate=!0,l._requestVideoFrameCallbackId=t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){0!==this._requestVideoFrameCallbackId&&(this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),this._requestVideoFrameCallbackId=0),super.dispose()}}class nh extends rh{constructor(t,e,i,s,r,n,a,o){super({},t,e,i,s,r,n,a,o),this.isVideoFrameTexture=!0}update(){}clone(){return(new this.constructor).copy(this)}setFrame(t){this.image=t,this.needsUpdate=!0}}class ah extends qs{constructor(t,e){super({width:t,height:e}),this.isFramebufferTexture=!0,this.magFilter=ft,this.minFilter=ft,this.generateMipmaps=!1,this.needsUpdate=!0}}class oh extends qs{constructor(t,e,i,s,r,n,a,o,h,l,c,u){super(null,n,a,o,h,l,s,r,c,u),this.isCompressedTexture=!0,this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class hh extends oh{constructor(t,e,i,s,r,n){super(t,e,i,r,n),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=yt,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class lh extends oh{constructor(t,e,i){super(void 0,t[0].width,t[0].height,e,i,lt),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=t}}class ch extends qs{constructor(t=[],e=301,i,s,r,n,a,o,h,l){super(t,e,i,s,r,n,a,o,h,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class uh extends qs{constructor(t,e,i,s,r,n,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isCanvasTexture=!0,this.needsUpdate=!0}}class dh extends qs{constructor(t,e,i=1014,s,r,n,a=1003,o=1003,h,l=1026,c=1){if(l!==Ut&&1027!==l)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");super({width:t,height:e,depth:c},s,r,n,a,o,l,i,h),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new js(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return null!==this.compareFunction&&(e.compareFunction=this.compareFunction),e}}class ph extends dh{constructor(t,e=1014,i=301,s,r,n=1003,a=1003,o,h=1026){const l={width:t,height:t,depth:1},c=[l,l,l,l,l,l];super(t,t,e,i,s,r,n,a,o,h),this.image=c,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(t){this.image=t}}class mh extends qs{constructor(t=null){super(),this.sourceTexture=t,this.isExternalTexture=!0}copy(t){return super.copy(t),this.sourceTexture=t.sourceTexture,this}}class yh extends Un{constructor(t=1,e=1,i=1,s=1,r=1,n=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:s,heightSegments:r,depthSegments:n};const a=this;s=Math.floor(s),r=Math.floor(r),n=Math.floor(n);const o=[],h=[],l=[],c=[];let u=0,d=0;function p(t,e,i,s,r,n,p,m,y,g,f){const x=n/y,b=p/g,v=n/2,w=p/2,M=m/2,S=y+1,_=g+1;let A=0,T=0;const z=new Ts;for(let n=0;n<_;n++){const a=n*b-w;for(let o=0;o0?1:-1,l.push(z.x,z.y,z.z),c.push(o/y),c.push(1-n/g),A+=1}}for(let t=0;t0){const t=(f-1)*m;for(let e=0;e0||0!==s)&&(l.push(n,a,h),x+=3),(e>0||s!==r-1)&&(l.push(a,o,h),x+=3)}h.addGroup(g,x,0),g+=x}(),!1===n&&(t>0&&f(!0),e>0&&f(!1)),this.setIndex(l),this.setAttribute("position",new kn(c,3)),this.setAttribute("normal",new kn(u,3)),this.setAttribute("uv",new kn(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new xh(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class bh extends xh{constructor(t=1,e=1,i=32,s=1,r=!1,n=0,a=2*Math.PI){super(0,t,e,i,s,r,n,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:s,openEnded:r,thetaStart:n,thetaLength:a}}static fromJSON(t){return new bh(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class vh extends Un{constructor(t=[],e=[],i=1,s=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:s};const r=[],n=[];function a(t,e,i,s){const r=s+1,n=[];for(let s=0;s<=r;s++){n[s]=[];const a=t.clone().lerp(i,s/r),o=e.clone().lerp(i,s/r),h=r-s;for(let t=0;t<=h;t++)n[s][t]=0===t&&s===r?a:a.clone().lerp(o,t/h)}for(let t=0;t.9&&a<.1&&(e<.2&&(n[t+0]+=1),i<.2&&(n[t+2]+=1),s<.2&&(n[t+4]+=1))}}()}(),this.setAttribute("position",new kn(r,3)),this.setAttribute("normal",new kn(r.slice(),3)),this.setAttribute("uv",new kn(n,2)),0===s?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new vh(t.vertices,t.indices,t.radius,t.detail)}}class wh extends vh{constructor(t=1,e=0){const i=(1+Math.sqrt(5))/2,s=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-i,0,-s,i,0,s,-i,0,s,i,-s,-i,0,-s,i,0,s,-i,0,s,i,0,-i,0,-s,i,0,-s,-i,0,s,i,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new wh(t.radius,t.detail)}}const Mh=new Ts,Sh=new Ts,_h=new Ts,Ah=new $r;class Th extends Un{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const i=4,s=Math.pow(10,i),r=Math.cos(ys*e),n=t.getIndex(),a=t.getAttribute("position"),o=n?n.count:a.count,h=[0,0,0],l=["a","b","c"],c=new Array(3),u={},d=[];for(let t=0;t0)){h=s;break}h=s-1}if(s=h,i[s]===n)return s/(r-1);const l=i[s];return(s+(n-l)/(i[s+1]-l))/(r-1)}getTangent(t,e){const i=1e-4;let s=t-i,r=t+i;s<0&&(s=0),r>1&&(r=1);const n=this.getPoint(s),a=this.getPoint(r),o=e||(n.isVector2?new _s:new Ts);return o.copy(a).sub(n).normalize(),o}getTangentAt(t,e){const i=this.getUtoTmapping(t);return this.getTangent(i,e)}computeFrenetFrames(t,e=!1){const i=new Ts,s=[],r=[],n=[],a=new Ts,o=new Qs;for(let e=0;e<=t;e++){const i=e/t;s[e]=this.getTangentAt(i,new Ts)}r[0]=new Ts,n[0]=new Ts;let h=Number.MAX_VALUE;const l=Math.abs(s[0].x),c=Math.abs(s[0].y),u=Math.abs(s[0].z);l<=h&&(h=l,i.set(1,0,0)),c<=h&&(h=c,i.set(0,1,0)),u<=h&&i.set(0,0,1),a.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],a),n[0].crossVectors(s[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),n[e]=n[e-1].clone(),a.crossVectors(s[e-1],s[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(xs(s[e-1].dot(s[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}n[e].crossVectors(s[e],r[e])}if(!0===e){let e=Math.acos(xs(r[0].dot(r[t]),-1,1));e/=t,s[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let i=1;i<=t;i++)r[i].applyMatrix4(o.makeRotationAxis(s[i],e*i)),n[i].crossVectors(s[i],r[i])}return{tangents:s,normals:r,binormals:n}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Ch extends zh{constructor(t=0,e=0,i=1,s=1,r=0,n=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=n,this.aClockwise=a,this.aRotation=o}getPoint(t,e=new _s){const i=e,s=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const n=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(h)/r)+1)*r:0===l&&h===r-1&&(h=r-2,l=1),this.closed||h>0?a=s[(h-1)%r]:(kh.subVectors(s[0],s[1]).add(s[0]),a=kh);const c=s[h%r],u=s[(h+1)%r];if(this.closed||h+2s.length-2?s.length-1:n+1],c=s[n>s.length-3?s.length-1:n+2];return i.set(Vh(a,o.x,h.x,l.x,c.x),Vh(a,o.y,h.y,l.y,c.y)),i}copy(t){super.copy(t),this.points=[];for(let e=0,i=t.points.length;e=i){const t=s[r]-i,n=this.curves[r],a=n.getLength(),o=0===a?0:1-t/a;return n.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.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 t=[];let e=0;for(let i=0,s=this.curves.length;i1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,i=t.curves.length;e0){const t=h.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(h);const l=h.getPoint(1);return this.currentPoint.copy(l),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Zh extends Hh{constructor(t){super(t),this.uuid=fs(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let i=0,s=this.holes.length;i80*i){o=t[0],h=t[1];let e=o,s=h;for(let n=i;ne&&(e=i),r>s&&(s=r)}l=Math.max(e-o,s-h),l=0!==l?32767/l:0}return Kh(n,a,i,o,h,l,0),a}function $h(t,e,i,s,r){let n;if(r===function(t,e,i,s){let r=0;for(let n=e,a=i-s;n0)for(let r=e;r=e;r-=s)n=bl(r/s|0,t[r],t[r+1],n);return n&&pl(n,n.next)&&(vl(n),n=n.next),n}function Qh(t,e){if(!t)return t;e||(e=t);let i,s=t;do{if(i=!1,s.steiner||!pl(s,s.next)&&0!==dl(s.prev,s,s.next))s=s.next;else{if(vl(s),s=e=s.prev,s===s.next)break;i=!0}}while(i||s!==e);return e}function Kh(t,e,i,s,r,n,a){if(!t)return;!a&&n&&function(t,e,i,s){let r=t;do{0===r.z&&(r.z=ol(r.x,r.y,e,i,s)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,i=1;do{let s,r=t;t=null;let n=null;for(e=0;r;){e++;let a=r,o=0;for(let t=0;t0||h>0&&a;)0!==o&&(0===h||!a||r.z<=a.z)?(s=r,r=r.nextZ,o--):(s=a,a=a.nextZ,h--),n?n.nextZ=s:t=s,s.prevZ=n,n=s;r=a}n.nextZ=null,i*=2}while(e>1)}(r)}(t,s,r,n);let o=t;for(;t.prev!==t.next;){const h=t.prev,l=t.next;if(n?el(t,s,r,n):tl(t))e.push(h.i,t.i,l.i),vl(t),t=l.next,o=l.next;else if((t=l)===o){a?1===a?Kh(t=il(Qh(t),e),e,i,s,r,n,2):2===a&&sl(t,e,i,s,r,n):Kh(Qh(t),e,i,s,r,n,1);break}}}function tl(t){const e=t.prev,i=t,s=t.next;if(dl(e,i,s)>=0)return!1;const r=e.x,n=i.x,a=s.x,o=e.y,h=i.y,l=s.y,c=Math.min(r,n,a),u=Math.min(o,h,l),d=Math.max(r,n,a),p=Math.max(o,h,l);let m=s.next;for(;m!==e;){if(m.x>=c&&m.x<=d&&m.y>=u&&m.y<=p&&cl(r,o,n,h,a,l,m.x,m.y)&&dl(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function el(t,e,i,s){const r=t.prev,n=t,a=t.next;if(dl(r,n,a)>=0)return!1;const o=r.x,h=n.x,l=a.x,c=r.y,u=n.y,d=a.y,p=Math.min(o,h,l),m=Math.min(c,u,d),y=Math.max(o,h,l),g=Math.max(c,u,d),f=ol(p,m,e,i,s),x=ol(y,g,e,i,s);let b=t.prevZ,v=t.nextZ;for(;b&&b.z>=f&&v&&v.z<=x;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&cl(o,c,h,u,l,d,b.x,b.y)&&dl(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&cl(o,c,h,u,l,d,v.x,v.y)&&dl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;b&&b.z>=f;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&cl(o,c,h,u,l,d,b.x,b.y)&&dl(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;v&&v.z<=x;){if(v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&cl(o,c,h,u,l,d,v.x,v.y)&&dl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function il(t,e){let i=t;do{const s=i.prev,r=i.next.next;!pl(s,r)&&ml(s,i,i.next,r)&&fl(s,r)&&fl(r,s)&&(e.push(s.i,i.i,r.i),vl(i),vl(i.next),i=t=r),i=i.next}while(i!==t);return Qh(i)}function sl(t,e,i,s,r,n){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&ul(a,t)){let o=xl(a,t);return a=Qh(a,a.next),o=Qh(o,o.next),Kh(a,e,i,s,r,n,0),void Kh(o,e,i,s,r,n,0)}t=t.next}a=a.next}while(a!==t)}function rl(t,e){let i=t.x-e.x;if(0===i&&(i=t.y-e.y,0===i)){i=(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x)}return i}function nl(t,e){const i=function(t,e){let i=e;const s=t.x,r=t.y;let n,a=-1/0;if(pl(t,i))return i;do{if(pl(t,i.next))return i.next;if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const t=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(t<=s&&t>a&&(a=t,n=i.x=i.x&&i.x>=h&&s!==i.x&&ll(rn.x||i.x===n.x&&al(n,i)))&&(n=i,c=e)}i=i.next}while(i!==o);return n}(t,e);if(!i)return e;const s=xl(i,t);return Qh(s,s.next),Qh(i,i.next)}function al(t,e){return dl(t.prev,t,e.prev)<0&&dl(e.next,t,t.next)<0}function ol(t,e,i,s,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-s)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function hl(t){let e=t,i=t;do{(e.x=(t-a)*(n-o)&&(t-a)*(s-o)>=(i-a)*(e-o)&&(i-a)*(n-o)>=(r-a)*(s-o)}function cl(t,e,i,s,r,n,a,o){return!(t===a&&e===o)&&ll(t,e,i,s,r,n,a,o)}function ul(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&ml(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(fl(t,e)&&fl(e,t)&&function(t,e){let i=t,s=!1;const r=(t.x+e.x)/2,n=(t.y+e.y)/2;do{i.y>n!=i.next.y>n&&i.next.y!==i.y&&r<(i.next.x-i.x)*(n-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next}while(i!==t);return s}(t,e)&&(dl(t.prev,t,e.prev)||dl(t,e.prev,e))||pl(t,e)&&dl(t.prev,t,t.next)>0&&dl(e.prev,e,e.next)>0)}function dl(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function pl(t,e){return t.x===e.x&&t.y===e.y}function ml(t,e,i,s){const r=gl(dl(t,e,i)),n=gl(dl(t,e,s)),a=gl(dl(i,s,t)),o=gl(dl(i,s,e));return r!==n&&a!==o||(!(0!==r||!yl(t,i,e))||(!(0!==n||!yl(t,s,e))||(!(0!==a||!yl(i,t,s))||!(0!==o||!yl(i,e,s)))))}function yl(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function gl(t){return t>0?1:t<0?-1:0}function fl(t,e){return dl(t.prev,t,t.next)<0?dl(t,e,t.next)>=0&&dl(t,t.prev,e)>=0:dl(t,e,t.prev)<0||dl(t,t.next,e)<0}function xl(t,e){const i=wl(t.i,t.x,t.y),s=wl(e.i,e.x,e.y),r=t.next,n=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,s.next=i,i.prev=s,n.next=s,s.prev=n,s}function bl(t,e,i,s){const r=wl(t,e,i);return s?(r.next=s.next,r.prev=s,s.next.prev=r,s.next=r):(r.prev=r,r.next=r),r}function vl(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function wl(t,e,i){return{i:t,x:e,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}class Ml{static triangulate(t,e,i=2){return Gh(t,e,i)}}class Sl{static area(t){const e=t.length;let i=0;for(let s=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Al(t,e){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(c),d=Math.sqrt(h*h+l*l),p=e.x-o/u,m=e.y+a/u,y=((i.x-l/d-p)*l-(i.y+h/d-m)*h)/(a*l-o*h);s=p+a*y-t.x,r=m+o*y-t.y;const g=s*s+r*r;if(g<=2)return new _s(s,r);n=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?h>Number.EPSILON&&(t=!0):a<-Number.EPSILON?h<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(l)&&(t=!0),t?(s=-o,r=a,n=Math.sqrt(c)):(s=a,r=o,n=Math.sqrt(c/2))}return new _s(s/n,r/n)}const k=[];for(let t=0,e=z.length,i=e-1,s=t+1;t=0;t--){const e=t/p,i=c*Math.cos(e*Math.PI/2),s=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=z.length;t=0;){const s=i;let r=i-1;r<0&&(r=t.length-1);for(let t=0,i=o+2*p;t0)&&d.push(e,r,h),(t!==i-1||o0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const t in this.extensions)!0===this.extensions[t]&&(i[t]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Hl extends Yl{constructor(t){super(t),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class Zl extends Zn{constructor(t){super(),this.isMeshStandardMaterial=!0,this.type="MeshStandardMaterial",this.defines={STANDARD:""},this.color=new Pr(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Gl extends Zl{constructor(t){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new _s(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return xs(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Pr(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Pr(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Pr(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(t)}get anisotropy(){return this._anisotropy}set anisotropy(t){this._anisotropy>0!=t>0&&this.version++,this._anisotropy=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get dispersion(){return this._dispersion}set dispersion(t){this._dispersion>0!=t>0&&this.version++,this._dispersion=t}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=t.anisotropy,this.anisotropyRotation=t.anisotropyRotation,this.anisotropyMap=t.anisotropyMap,this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.dispersion=t.dispersion,this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class $l extends Zn{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Pr(16777215),this.specular=new Pr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Ql extends Zn{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Pr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(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(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class Kl extends Zn{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class tc extends Zn{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Pr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Pr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new hr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class ec extends Zn{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class ic extends Zn{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}class sc extends Zn{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Pr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new _s(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this.fog=t.fog,this}}class rc extends Eo{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function nc(t,e){return t&&t.constructor!==e?"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t):t}function ac(t){const e=t.length,i=new Array(e);for(let t=0;t!==e;++t)i[t]=t;return i.sort(function(e,i){return t[e]-t[i]}),i}function oc(t,e,i){const s=t.length,r=new t.constructor(s);for(let n=0,a=0;a!==s;++n){const s=i[n]*e;for(let i=0;i!==e;++i)r[a++]=t[s+i]}return r}function hc(t,e,i,s){let r=1,n=t[0];for(;void 0!==n&&void 0===n[s];)n=t[r++];if(void 0===n)return;let a=n[s];if(void 0!==a)if(Array.isArray(a))do{a=n[s],void 0!==a&&(e.push(n.time),i.push(...a)),n=t[r++]}while(void 0!==n);else if(void 0!==a.toArray)do{a=n[s],void 0!==a&&(e.push(n.time),a.toArray(i,i.length)),n=t[r++]}while(void 0!==n);else do{a=n[s],void 0!==a&&(e.push(n.time),i.push(a)),n=t[r++]}while(void 0!==n)}class lc{static convertArray(t,e){return nc(t,e)}static isTypedArray(t){return $i(t)}static getKeyframeOrder(t){return ac(t)}static sortedArray(t,e,i){return oc(t,e,i)}static flattenJSON(t,e,i,s){hc(t,e,i,s)}static subclip(t,e,i,s,r=30){return function(t,e,i,s,r=30){const n=t.clone();n.name=e;const a=[];for(let t=0;t=s)){h.push(e.times[t]);for(let i=0;in.tracks[t].times[0]&&(o=n.tracks[t].times[0]);for(let t=0;t=s.times[u]){const t=u*h+o,e=t+h-o;d=s.values.slice(t,e)}else{const t=s.createInterpolant(),e=o,i=h-o;t.evaluate(n),d=t.resultBuffer.slice(e,i)}"quaternion"===r&&(new As).fromArray(d).normalize().conjugate().toArray(d);const p=a.times.length;for(let t=0;t=r)){const a=e[1];t=r)break e}n=i,i=0;break i}break t}for(;i>>1;te;)--n;if(++n,0!==r||n!==s){r>=n&&(n=Math.max(n,1),r=n-1);const t=this.getValueSize();this.times=i.slice(r,n),this.values=this.values.slice(r*t,n*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!==0&&(os("KeyframeTrack: Invalid value size in track.",this),t=!1);const i=this.times,s=this.values,r=i.length;0===r&&(os("KeyframeTrack: Track is empty.",this),t=!1);let n=null;for(let e=0;e!==r;e++){const s=i[e];if("number"==typeof s&&isNaN(s)){os("KeyframeTrack: Time is not a valid number.",this,e,s),t=!1;break}if(null!==n&&n>s){os("KeyframeTrack: Out of order keys.",this,e,s,n),t=!1;break}n=s}if(void 0!==s&&$i(s))for(let e=0,i=s.length;e!==i;++e){const i=s[e];if(isNaN(i)){os("KeyframeTrack: Value is not a valid number.",this,e,i),t=!1;break}}return t}optimize(){const t=this.times.slice(),e=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===Fe,r=t.length-1;let n=1;for(let a=1;a0){t[n]=t[r];for(let t=r*i,s=n*i,a=0;a!==i;++a)e[s+a]=e[t+a];++n}return n!==t.length?(this.times=t.slice(0,n),this.values=e.slice(0,n*i)):(this.times=t,this.values=e),this}clone(){const t=this.times.slice(),e=this.values.slice(),i=new(0,this.constructor)(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}}yc.prototype.ValueTypeName="",yc.prototype.TimeBufferType=Float32Array,yc.prototype.ValueBufferType=Float32Array,yc.prototype.DefaultInterpolation=Ee;class gc extends yc{constructor(t,e,i){super(t,e,i)}}gc.prototype.ValueTypeName="bool",gc.prototype.ValueBufferType=Array,gc.prototype.DefaultInterpolation=Ve,gc.prototype.InterpolantFactoryMethodLinear=void 0,gc.prototype.InterpolantFactoryMethodSmooth=void 0;class fc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}fc.prototype.ValueTypeName="color";class xc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}xc.prototype.ValueTypeName="number";class bc extends cc{constructor(t,e,i,s){super(t,e,i,s)}interpolate_(t,e,i,s){const r=this.resultBuffer,n=this.sampleValues,a=this.valueSize,o=(i-e)/(s-e);let h=t*a;for(let t=h+a;h!==t;h+=4)As.slerpFlat(r,0,n,h-a,n,h,o);return r}}class vc extends yc{constructor(t,e,i,s){super(t,e,i,s)}InterpolantFactoryMethodLinear(t){return new bc(this.times,this.values,this.getValueSize(),t)}}vc.prototype.ValueTypeName="quaternion",vc.prototype.InterpolantFactoryMethodSmooth=void 0;class wc extends yc{constructor(t,e,i){super(t,e,i)}}wc.prototype.ValueTypeName="string",wc.prototype.ValueBufferType=Array,wc.prototype.DefaultInterpolation=Ve,wc.prototype.InterpolantFactoryMethodLinear=void 0,wc.prototype.InterpolantFactoryMethodSmooth=void 0;class Mc extends yc{constructor(t,e,i,s){super(t,e,i,s)}}Mc.prototype.ValueTypeName="vector";class Sc{constructor(t="",e=-1,i=[],s=2500){this.name=t,this.tracks=i,this.duration=e,this.blendMode=s,this.uuid=fs(),this.userData={},this.duration<0&&this.resetDuration()}static parse(t){const e=[],i=t.tracks,s=1/(t.fps||1);for(let t=0,r=i.length;t!==r;++t)e.push(_c(i[t]).scale(s));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r.userData=JSON.parse(t.userData||"{}"),r}static toJSON(t){const e=[],i=t.tracks,s={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode,userData:JSON.stringify(t.userData)};for(let t=0,s=i.length;t!==s;++t)e.push(yc.toJSON(i[t]));return s}static CreateFromMorphTargetSequence(t,e,i,s){const r=e.length,n=[];for(let t=0;t1){const t=n[1];let e=s[t];e||(s[t]=e=[]),e.push(i)}}const n=[];for(const t in s)n.push(this.CreateFromMorphTargetSequence(t,s[t],e,i));return n}static parseAnimation(t,e){if(as("AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!t)return os("AnimationClip: No animation in JSONLoader data."),null;const i=function(t,e,i,s,r){if(0!==i.length){const n=[],a=[];hc(i,n,a,s),0!==n.length&&r.push(new t(e,n,a))}},s=[],r=t.name||"default",n=t.fps||30,a=t.blendMode;let o=t.length||-1;const h=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)},0),r;if(void 0!==Bc[t])return void Bc[t].push({onLoad:e,onProgress:i,onError:s});Bc[t]=[],Bc[t].push({onLoad:e,onProgress:i,onError:s});const n=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:"function"==typeof AbortSignal.any?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),a=this.mimeType,o=this.responseType;fetch(n).then(e=>{if(200===e.status||0===e.status){if(0===e.status&&as("FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const i=Bc[t],s=e.body.getReader(),r=e.headers.get("X-File-Size")||e.headers.get("Content-Length"),n=r?parseInt(r):0,a=0!==n;let o=0;const h=new ReadableStream({start(t){!function e(){s.read().then(({done:s,value:r})=>{if(s)t.close();else{o+=r.byteLength;const s=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:n});for(let t=0,e=i.length;t{t.error(e)})}()}});return new Response(h)}throw new kc(`fetch for "${e.url}" responded with ${e.status}: ${e.statusText}`,e)}).then(t=>{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then(t=>(new DOMParser).parseFromString(t,a));case"json":return t.json();default:if(""===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),i=e&&e[1]?e[1].toLowerCase():void 0,s=new TextDecoder(i);return t.arrayBuffer().then(t=>s.decode(t))}}}).then(e=>{Ac.add(`file:${t}`,e);const i=Bc[t];delete Bc[t];for(let t=0,s=i.length;t{const i=Bc[t];if(void 0===i)throw this.manager.itemError(t),e;delete Bc[t];for(let t=0,s=i.length;t{this.manager.itemEnd(t)}),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class Pc extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(this.manager);n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):os(e),r.manager.itemError(t)}},i,s)}parse(t){const e=[];for(let i=0;i0:s.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(s.uniforms[e]={},r.type){case"t":s.uniforms[e].value=i(r.value);break;case"c":s.uniforms[e].value=(new Pr).setHex(r.value);break;case"v2":s.uniforms[e].value=(new _s).fromArray(r.value);break;case"v3":s.uniforms[e].value=(new Ts).fromArray(r.value);break;case"v4":s.uniforms[e].value=(new Js).fromArray(r.value);break;case"m3":s.uniforms[e].value=(new Is).fromArray(r.value);break;case"m4":s.uniforms[e].value=(new Qs).fromArray(r.value);break;default:s.uniforms[e].value=r.value}}if(void 0!==t.defines&&(s.defines=t.defines),void 0!==t.vertexShader&&(s.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(s.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(s.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)s.extensions[e]=t.extensions[e];if(void 0!==t.lights&&(s.lights=t.lights),void 0!==t.clipping&&(s.clipping=t.clipping),void 0!==t.size&&(s.size=t.size),void 0!==t.sizeAttenuation&&(s.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(s.map=i(t.map)),void 0!==t.matcap&&(s.matcap=i(t.matcap)),void 0!==t.alphaMap&&(s.alphaMap=i(t.alphaMap)),void 0!==t.bumpMap&&(s.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(s.bumpScale=t.bumpScale),void 0!==t.normalMap&&(s.normalMap=i(t.normalMap)),void 0!==t.normalMapType&&(s.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),s.normalScale=(new _s).fromArray(e)}return void 0!==t.displacementMap&&(s.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(s.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(s.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(s.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(s.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(s.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(s.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(s.specularMap=i(t.specularMap)),void 0!==t.specularIntensityMap&&(s.specularIntensityMap=i(t.specularIntensityMap)),void 0!==t.specularColorMap&&(s.specularColorMap=i(t.specularColorMap)),void 0!==t.envMap&&(s.envMap=i(t.envMap)),void 0!==t.envMapRotation&&s.envMapRotation.fromArray(t.envMapRotation),void 0!==t.envMapIntensity&&(s.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(s.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(s.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(s.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(s.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(s.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(s.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(s.gradientMap=i(t.gradientMap)),void 0!==t.clearcoatMap&&(s.clearcoatMap=i(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(s.clearcoatRoughnessMap=i(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(s.clearcoatNormalMap=i(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(s.clearcoatNormalScale=(new _s).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(s.iridescenceMap=i(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(s.iridescenceThicknessMap=i(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(s.transmissionMap=i(t.transmissionMap)),void 0!==t.thicknessMap&&(s.thicknessMap=i(t.thicknessMap)),void 0!==t.anisotropyMap&&(s.anisotropyMap=i(t.anisotropyMap)),void 0!==t.sheenColorMap&&(s.sheenColorMap=i(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(s.sheenRoughnessMap=i(t.sheenRoughnessMap)),s}setTextures(t){return this.textures=t,this}createMaterialFromType(t){return uu.createMaterialFromType(t)}static createMaterialFromType(t){return new{ShadowMaterial:Wl,SpriteMaterial:Gn,RawShaderMaterial:Hl,ShaderMaterial:Yl,PointsMaterial:$o,MeshPhysicalMaterial:Gl,MeshStandardMaterial:Zl,MeshPhongMaterial:$l,MeshToonMaterial:Ql,MeshNormalMaterial:Kl,MeshLambertMaterial:tc,MeshDepthMaterial:ec,MeshDistanceMaterial:ic,MeshBasicMaterial:Ma,MeshMatcapMaterial:sc,LineDashedMaterial:rc,LineBasicMaterial:Eo,Material:Zn}[t]}}class du{static extractUrlBase(t){const e=t.lastIndexOf("/");return-1===e?"./":t.slice(0,e+1)}static resolveURL(t,e){return"string"!=typeof t||""===t?"":(/^https?:\/\//i.test(e)&&/^\//.test(t)&&(e=e.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(t)||/^data:.*,.*$/i.test(t)||/^blob:.*$/i.test(t)?t:e+t)}}class pu extends Un{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}toJSON(){const t=super.toJSON();return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}class mu extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(r.manager);n.setPath(r.path),n.setRequestHeader(r.requestHeader),n.setWithCredentials(r.withCredentials),n.load(t,function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):os(e),r.manager.itemError(t)}},i,s)}parse(t){const e={},i={};function s(t,s){if(void 0!==e[s])return e[s];const r=t.interleavedBuffers[s],n=function(t,e){if(void 0!==i[e])return i[e];const s=t.arrayBuffers,r=s[e],n=new Uint32Array(r).buffer;return i[e]=n,n}(t,r.buffer),a=Gi(r.type,n),o=new qn(a,r.stride);return o.uuid=r.uuid,e[s]=o,o}const r=t.isInstancedBufferGeometry?new pu:new Un,n=t.data.index;if(void 0!==n){const t=Gi(n.type,n.array);r.setIndex(new Mn(t,1))}const a=t.data.attributes;for(const e in a){const i=a[e];let n;if(i.isInterleavedBufferAttribute){const e=s(t.data,i.data);n=new Xn(e,i.itemSize,i.offset,i.normalized)}else{const t=Gi(i.type,i.array);n=new(i.isInstancedBufferAttribute?$a:Mn)(t,i.itemSize,i.normalized)}void 0!==i.name&&(n.name=i.name),void 0!==i.usage&&n.setUsage(i.usage),r.setAttribute(e,n)}const o=t.data.morphAttributes;if(o)for(const e in o){const i=o[e],n=[];for(let e=0,r=i.length;e0){const i=new zc(e);r=new Vc(i),r.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e0){s=new Vc(this.manager),s.setCrossOrigin(this.crossOrigin);for(let e=0,s=t.length;e{let e=null,i=null;return void 0!==t.boundingBox&&(e=(new Qr).fromJSON(t.boundingBox)),void 0!==t.boundingSphere&&(i=(new Nn).fromJSON(t.boundingSphere)),{...t,boundingBox:e,boundingSphere:i}}),n._instanceInfo=t.instanceInfo,n._availableInstanceIds=t._availableInstanceIds,n._availableGeometryIds=t._availableGeometryIds,n._nextIndexStart=t.nextIndexStart,n._nextVertexStart=t.nextVertexStart,n._geometryCount=t.geometryCount,n._maxInstanceCount=t.maxInstanceCount,n._maxVertexCount=t.maxVertexCount,n._maxIndexCount=t.maxIndexCount,n._geometryInitialized=t.geometryInitialized,n._matricesTexture=c(t.matricesTexture.uuid),n._indirectTexture=c(t.indirectTexture.uuid),void 0!==t.colorsTexture&&(n._colorsTexture=c(t.colorsTexture.uuid)),void 0!==t.boundingSphere&&(n.boundingSphere=(new Nn).fromJSON(t.boundingSphere)),void 0!==t.boundingBox&&(n.boundingBox=(new Qr).fromJSON(t.boundingBox));break;case"LOD":n=new pa;break;case"Line":n=new Jo(h(t.geometry),l(t.material));break;case"LineLoop":n=new Go(h(t.geometry),l(t.material));break;case"LineSegments":n=new Zo(h(t.geometry),l(t.material));break;case"PointCloud":case"Points":n=new ih(h(t.geometry),l(t.material));break;case"Sprite":n=new la(l(t.material));break;case"Group":n=new Tr;break;case"Bone":n=new Xa;break;default:n=new Ar}if(n.uuid=t.uuid,void 0!==t.name&&(n.name=t.name),void 0!==t.matrix?(n.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(n.matrixAutoUpdate=t.matrixAutoUpdate),n.matrixAutoUpdate&&n.matrix.decompose(n.position,n.quaternion,n.scale)):(void 0!==t.position&&n.position.fromArray(t.position),void 0!==t.rotation&&n.rotation.fromArray(t.rotation),void 0!==t.quaternion&&n.quaternion.fromArray(t.quaternion),void 0!==t.scale&&n.scale.fromArray(t.scale)),void 0!==t.up&&n.up.fromArray(t.up),void 0!==t.pivot&&(n.pivot=(new Ts).fromArray(t.pivot)),void 0!==t.morphTargetDictionary&&(n.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),void 0!==t.morphTargetInfluences&&(n.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.castShadow&&(n.castShadow=t.castShadow),void 0!==t.receiveShadow&&(n.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.intensity&&(n.shadow.intensity=t.shadow.intensity),void 0!==t.shadow.bias&&(n.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(n.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(n.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&n.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(n.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(n.visible=t.visible),void 0!==t.frustumCulled&&(n.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(n.renderOrder=t.renderOrder),void 0!==t.static&&(n.static=t.static),void 0!==t.userData&&(n.userData=t.userData),void 0!==t.layers&&(n.layers.mask=t.layers),void 0!==t.children){const a=t.children;for(let t=0;t{if(!0!==bu.has(n))return e&&e(i),r.manager.itemEnd(t),i;s&&s(bu.get(n)),r.manager.itemError(t),r.manager.itemEnd(t)}):(setTimeout(function(){e&&e(n),r.manager.itemEnd(t)},0),n);const a={};a.credentials="anonymous"===this.crossOrigin?"same-origin":"include",a.headers=this.requestHeader,a.signal="function"==typeof AbortSignal.any?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const o=fetch(t,a).then(function(t){return t.blob()}).then(function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:"none"}))}).then(function(i){return Ac.add(`image-bitmap:${t}`,i),e&&e(i),r.manager.itemEnd(t),i}).catch(function(e){s&&s(e),bu.set(o,e),Ac.remove(`image-bitmap:${t}`),r.manager.itemError(t),r.manager.itemEnd(t)});Ac.add(`image-bitmap:${t}`,o),r.manager.itemStart(t)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let wu;class Mu{static getContext(){return void 0===wu&&(wu=new(window.AudioContext||window.webkitAudioContext)),wu}static setContext(t){wu=t}}class Su extends Ic{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new Oc(this.manager);function a(e){s?s(e):os(e),r.manager.itemError(t)}n.setResponseType("arraybuffer"),n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,function(t){try{const i=t.slice(0);Mu.getContext().decodeAudioData(i,function(t){e(t)}).catch(a)}catch(t){a(t)}},i,s)}}const _u=new Qs,Au=new Qs,Tu=new Qs;class zu{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Kc,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Kc,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(t){const e=this._cache;if(e.focus!==t.focus||e.fov!==t.fov||e.aspect!==t.aspect*this.aspect||e.near!==t.near||e.far!==t.far||e.zoom!==t.zoom||e.eyeSep!==this.eyeSep){e.focus=t.focus,e.fov=t.fov,e.aspect=t.aspect*this.aspect,e.near=t.near,e.far=t.far,e.zoom=t.zoom,e.eyeSep=this.eyeSep,Tu.copy(t.projectionMatrix);const i=e.eyeSep/2,s=i*e.near/e.focus,r=e.near*Math.tan(ys*e.fov*.5)/e.zoom;let n,a;Au.elements[12]=-i,_u.elements[12]=i,n=-r*e.aspect+s,a=r*e.aspect+s,Tu.elements[0]=2*e.near/(a-n),Tu.elements[8]=(a+n)/(a-n),this.cameraL.projectionMatrix.copy(Tu),n=-r*e.aspect-s,a=r*e.aspect-s,Tu.elements[0]=2*e.near/(a-n),Tu.elements[8]=(a+n)/(a-n),this.cameraR.projectionMatrix.copy(Tu)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Au),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(_u)}}const Cu=-90;class Iu extends Ar{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Kc(Cu,1,t,e);s.layers=this.layers,this.add(s);const r=new Kc(Cu,1,t,e);r.layers=this.layers,this.add(r);const n=new Kc(Cu,1,t,e);n.layers=this.layers,this.add(n);const a=new Kc(Cu,1,t,e);a.layers=this.layers,this.add(a);const o=new Kc(Cu,1,t,e);o.layers=this.layers,this.add(o);const h=new Kc(Cu,1,t,e);h.layers=this.layers,this.add(h)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[i,s,r,n,a,o]=e;for(const t of e)this.remove(t);if(t===Ui)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),n.up.set(0,0,1),n.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else{if(t!==qi)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),n.up.set(0,0,-1),n.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1)}for(const t of e)this.add(t),t.updateMatrixWorld()}update(t,e){null===this.parent&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,n,a,o,h,l]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1;let y=!1;y=!0===t.isWebGLRenderer?t.state.buffers.depth.getReversed():t.reversedDepthBuffer,t.setRenderTarget(i,0,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,r),t.setRenderTarget(i,1,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,n),t.setRenderTarget(i,2,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,a),t.setRenderTarget(i,3,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,o),t.setRenderTarget(i,4,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,h),i.texture.generateMipmaps=m,t.setRenderTarget(i,5,s),y&&!1===t.autoClear&&t.clearDepth(),t.render(e,l),t.setRenderTarget(c,u,d),t.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Bu extends Kc{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class ku{constructor(){this._previousTime=0,this._currentTime=0,this._startTime=performance.now(),this._delta=0,this._elapsed=0,this._timescale=1,this._document=null,this._pageVisibilityHandler=null}connect(t){this._document=t,void 0!==t.hidden&&(this._pageVisibilityHandler=Ou.bind(this),t.addEventListener("visibilitychange",this._pageVisibilityHandler,!1))}disconnect(){null!==this._pageVisibilityHandler&&(this._document.removeEventListener("visibilitychange",this._pageVisibilityHandler),this._pageVisibilityHandler=null),this._document=null}getDelta(){return this._delta/1e3}getElapsed(){return this._elapsed/1e3}getTimescale(){return this._timescale}setTimescale(t){return this._timescale=t,this}reset(){return this._currentTime=performance.now()-this._startTime,this}dispose(){this.disconnect()}update(t){return null!==this._pageVisibilityHandler&&!0===this._document.hidden?this._delta=0:(this._previousTime=this._currentTime,this._currentTime=(void 0!==t?t:performance.now())-this._startTime,this._delta=(this._currentTime-this._previousTime)*this._timescale,this._elapsed+=this._delta),this}}function Ou(){!1===this._document.hidden&&this.reset()}const Pu=new Ts,Ru=new As,Nu=new Ts,Vu=new Ts,Eu=new Ts;class Fu extends Ar{constructor(){super(),this.type="AudioListener",this.context=Mu.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._timer=new ku}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(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(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t),this._timer.update();const e=this.context.listener;if(this.timeDelta=this._timer.getDelta(),this.matrixWorld.decompose(Pu,Ru,Nu),Vu.set(0,0,-1).applyQuaternion(Ru),Eu.set(0,1,0).applyQuaternion(Ru),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(Pu.x,t),e.positionY.linearRampToValueAtTime(Pu.y,t),e.positionZ.linearRampToValueAtTime(Pu.z,t),e.forwardX.linearRampToValueAtTime(Vu.x,t),e.forwardY.linearRampToValueAtTime(Vu.y,t),e.forwardZ.linearRampToValueAtTime(Vu.z,t),e.upX.linearRampToValueAtTime(Eu.x,t),e.upY.linearRampToValueAtTime(Eu.y,t),e.upZ.linearRampToValueAtTime(Eu.z,t)}else e.setPosition(Pu.x,Pu.y,Pu.z),e.setOrientation(Vu.x,Vu.y,Vu.z,Eu.x,Eu.y,Eu.z)}}class Lu extends Ar{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.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(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void as("Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void as("Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;as("Audio: this Audio has no playback control.")}stop(t=0){if(!1!==this.hasPlaybackControl)return this._progress=0,null!==this.source&&(this.source.stop(this.context.currentTime+t),this.source.onended=null),this.isPlaying=!1,this;as("Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(i,s,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(i[t]!==i[t+e]){a.setValue(i,s);break}}saveOriginalState(){const t=this.binding,e=this.buffer,i=this.valueSize,s=i*this._origIndex;t.getValue(e,s);for(let t=i,r=s;t!==r;++t)e[t]=e[s+t%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let i=t;i=.5)for(let s=0;s!==r;++s)t[e+s]=t[i+s]}_slerp(t,e,i,s){As.slerpFlat(t,e,t,e,t,i,s)}_slerpAdditive(t,e,i,s,r){const n=this._workIndex*r;As.multiplyQuaternionsFlat(t,n,t,e,t,i),As.slerpFlat(t,e,t,e,t,n,s)}_lerp(t,e,i,s,r){const n=1-s;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*n+t[i+a]*s}}_lerpAdditive(t,e,i,s,r){for(let n=0;n!==r;++n){const r=e+n;t[r]=t[r]+t[i+n]*s}}}const Yu="\\[\\]\\.:\\/",Hu=new RegExp("["+Yu+"]","g"),Zu="[^"+Yu+"]",Gu="[^"+Yu.replace("\\.","")+"]",$u=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",Zu)+/(WCOD+)?/.source.replace("WCOD",Gu)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Zu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Zu)+"$"),Qu=["material","materials","bones","map"];class Ku{constructor(t,e,i){this.path=e,this.parsedPath=i||Ku.parseTrackName(e),this.node=Ku.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,i){return t&&t.isAnimationObjectGroup?new Ku.Composite(t,e,i):new Ku(t,e,i)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(Hu,"")}static parseTrackName(t){const e=$u.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==s&&-1!==s){const t=i.nodeName.substring(s+1);-1!==Qu.indexOf(t)&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=t)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const i=t.skeleton.getBoneByName(e);if(void 0!==i)return i}if(t.children){const i=function(t){for(let s=0;s=r){const n=r++,l=t[n];e[l.uuid]=h,t[h]=l,e[o]=n,t[n]=a;for(let t=0,e=s;t!==e;++t){const e=i[t],s=e[n],r=e[h];e[h]=s,e[n]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,i=this._bindings,s=i.length;let r=this.nCachedObjects_,n=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,h=e[o];if(void 0!==h)if(delete e[o],h0&&(e[a.uuid]=h),t[h]=a,t.pop();for(let t=0,e=s;t!==e;++t){const e=i[t];e[h]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const i=this._bindingsIndicesByPath;let s=i[t];const r=this._bindings;if(void 0!==s)return r[s];const n=this._paths,a=this._parsedPaths,o=this._objects,h=o.length,l=this.nCachedObjects_,c=new Array(h);s=r.length,i[t]=s,n.push(t),a.push(e),r.push(c);for(let i=l,s=o.length;i!==s;++i){const s=o[i];c[i]=new Ku(s,t,e)}return c}unsubscribe_(t){const e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){const s=this._paths,r=this._parsedPaths,n=this._bindings,a=n.length-1,o=n[a];e[t[a]]=i,n[i]=o,n.pop(),r[i]=r[a],r.pop(),s[i]=s[a],s.pop()}}}class ed{constructor(t,e,i=null,s=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=i,this.blendMode=s;const r=e.tracks,n=r.length,a=new Array(n),o={endingStart:je,endingEnd:je};for(let t=0;t!==n;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings&&Object.assign(o,e.settings),e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(n),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,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&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,i=!1){if(t.fadeOut(e),this.fadeIn(e),!0===i){const i=this._clip.duration,s=t._clip.duration,r=s/i,n=i/s;t.warp(1,r,e),this.warp(n,1,e)}return this}crossFadeTo(t,e,i=!1){return t.crossFadeFrom(this,e,i)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,i){const s=this._mixer,r=s.time,n=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=s._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,h=a.sampleValues;return o[0]=r,o[1]=r+i,h[0]=t/n,h[1]=e/n,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,i,s){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const s=(t-r)*i;s<0||0===i?e=0:(this._startTime=null,e=i*s)}e*=this._updateTimeScale(t);const n=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===qe)for(let i=0,s=t.length;i!==s;++i)t[i].evaluate(n),e[i].accumulateAdditive(a);else for(let i=0,r=t.length;i!==r;++i)t[i].evaluate(n),e[i].accumulate(s,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const i=this._weightInterpolant;if(null!==i){const s=i.evaluate(t)[0];e*=s,t>i.parameterPositions[1]&&(this.stopFading(),0===s&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,i=this.loop;let s=this.time+t,r=this._loopCount;const n=2202===i;if(0===t)return-1===r||!n||1&~r?s:e-s;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(s>=e)s=e;else{if(!(s<0)){this.time=s;break t}s=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,n)):this._setEndings(0===this.repetitions,!0,n)),s>=e||s<0){const i=Math.floor(s/e);s-=e*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=t>0?e:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,n)}else this._setEndings(!1,!1,n);this._loopCount=r,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this._loopCount=r,this.time=s;if(n&&!(1&~r))return e-s}return s}_setEndings(t,e,i){const s=this._interpolantSettings;i?(s.endingStart=De,s.endingEnd=De):(s.endingStart=t?this.zeroSlopeAtStart?De:je:We,s.endingEnd=e?this.zeroSlopeAtEnd?De:je:We)}_scheduleFading(t,e,i){const s=this._mixer,r=s.time;let n=this._weightInterpolant;null===n&&(n=s._lendControlInterpolant(),this._weightInterpolant=n);const a=n.parameterPositions,o=n.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=i,this}}const id=new Float32Array(1);class sd extends ds{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}_bindAction(t,e){const i=t._localRoot||this._root,s=t._clip.tracks,r=s.length,n=t._propertyBindings,a=t._interpolants,o=i.uuid,h=this._bindingsByRootAndName;let l=h[o];void 0===l&&(l={},h[o]=l);for(let t=0;t!==r;++t){const r=s[t],h=r.name;let c=l[h];if(void 0!==c)++c.referenceCount,n[t]=c;else{if(c=n[t],void 0!==c){null===c._cacheIndex&&(++c.referenceCount,this._addInactiveBinding(c,o,h));continue}const s=e&&e._propertyBindings[t].binding.parsedPath;c=new Xu(Ku.create(i,h,s),r.ValueTypeName,r.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,o,h),n[t]=c}a[t].resultBuffer=c.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,i=t._clip.uuid,s=this._actionsByClip[i];this._bindAction(t,s&&s.knownActions[0]),this._addInactiveAction(t,i,e)}const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0===i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0===--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,i=this._nActiveActions,s=this.time+=t,r=Math.sign(t),n=this._accuIndex^=1;for(let a=0;a!==i;++a){e[a]._update(s,t,r,n)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(n);return this}setTime(t){this.time=0;for(let t=0;t=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,xd).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const vd=new Ts,wd=new Ts,Md=new Ts,Sd=new Ts,_d=new Ts,Ad=new Ts,Td=new Ts;class zd{constructor(t=new Ts,e=new Ts){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){vd.subVectors(t,this.start),wd.subVectors(this.end,this.start);const i=wd.dot(wd);let s=wd.dot(vd)/i;return e&&(s=xs(s,0,1)),s}closestPointToPoint(t,e,i){const s=this.closestPointToPointParameter(t,e);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(t,e=Ad,i=Td){const s=1e-8*1e-8;let r,n;const a=this.start,o=t.start,h=this.end,l=t.end;Md.subVectors(h,a),Sd.subVectors(l,o),_d.subVectors(a,o);const c=Md.dot(Md),u=Sd.dot(Sd),d=Sd.dot(_d);if(c<=s&&u<=s)return e.copy(a),i.copy(o),e.sub(i),e.dot(e);if(c<=s)r=0,n=d/u,n=xs(n,0,1);else{const t=Md.dot(_d);if(u<=s)n=0,r=xs(-t/c,0,1);else{const e=Md.dot(Sd),i=c*u-e*e;r=0!==i?xs((e*d-t*u)/i,0,1):0,n=(e*r+d)/u,n<0?(n=0,r=xs(-t/c,0,1)):n>1&&(n=1,r=xs((e-t)/c,0,1))}}return e.copy(a).addScaledVector(Md,r),i.copy(o).addScaledVector(Sd,n),e.distanceToSquared(i)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const Cd=new Ts;class Id extends Ar{constructor(t,e){super(),this.light=t,this.matrixAutoUpdate=!1,this.color=e,this.type="SpotLightHelper";const i=new Un,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 t=0,e=1,i=32;t1)for(let i=0;i.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{tp.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(tp,e)}}setLength(t,e=.2*t,i=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class rp extends Zo{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],i=new Un;i.setAttribute("position",new kn(e,3)),i.setAttribute("color",new kn([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(i,new Eo({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(t,e,i){const s=new Pr,r=this.geometry.attributes.color.array;return s.set(t),s.toArray(r,0),s.toArray(r,3),s.set(e),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 np{constructor(){this.type="ShapePath",this.color=new Pr,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new Hh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,i,s){return this.currentPath.quadraticCurveTo(t,e,i,s),this}bezierCurveTo(t,e,i,s,r,n){return this.currentPath.bezierCurveTo(t,e,i,s,r,n),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t){function e(t,e){const i=e.length;let s=!1;for(let r=i-1,n=0;nNumber.EPSILON){if(h<0&&(i=e[n],o=-o,a=e[r],h=-h),t.ya.y)continue;if(t.y===i.y){if(t.x===i.x)return!0}else{const e=h*(t.x-i.x)-o*(t.y-i.y);if(0===e)return!0;if(e<0)continue;s=!s}}else{if(t.y!==i.y)continue;if(a.x<=t.x&&t.x<=i.x||i.x<=t.x&&t.x<=a.x)return!0}}return s}const i=Sl.isClockWise,s=this.subPaths;if(0===s.length)return[];let r,n,a;const o=[];if(1===s.length)return n=s[0],a=new Zh,a.curves=n.curves,o.push(a),o;let h=!i(s[0].getPoints());h=t?!h:h;const l=[],c=[];let u,d,p=[],m=0;c[m]=void 0,p[m]=[];for(let e=0,a=s.length;e1){let t=!1,i=0;for(let t=0,e=c.length;t0&&!1===t&&(p=l)}for(let t=0,e=c.length;te?(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2):(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0),t}(t,e)}static cover(t,e){return function(t,e){const i=t.image&&t.image.width?t.image.width/t.image.height:1;return i>e?(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0):(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2),t}(t,e)}static fill(t){return function(t){return t.repeat.x=1,t.repeat.y=1,t.offset.x=0,t.offset.y=0,t}(t)}static getByteLength(t,e,i,s){return op(t,e,i,s)}}"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:t}})),"undefined"!=typeof window&&(window.__THREE__?as("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=t);export{it as ACESFilmicToneMapping,w as AddEquation,$ as AddOperation,qe as AdditiveAnimationBlendMode,g as AdditiveBlending,rt as AgXToneMapping,jt as AlphaFormat,ki as AlwaysCompare,W as AlwaysDepth,Si as AlwaysStencilFunc,ou as AmbientLight,ed as AnimationAction,Sc as AnimationClip,Pc as AnimationLoader,sd as AnimationMixer,td as AnimationObjectGroup,lc as AnimationUtils,Ih as ArcCurve,Bu as ArrayCamera,sp as ArrowHelper,at as AttachedBindMode,Lu as Audio,Ju as AudioAnalyser,Mu as AudioContext,Fu as AudioListener,Su as AudioLoader,rp as AxesHelper,d as BackSide,He as BasicDepthPacking,o as BasicShadowMap,Vo as BatchedMesh,mc as BezierInterpolant,Xa as Bone,gc as BooleanKeyframeTrack,bd as Box2,Qr as Box3,Qd as Box3Helper,yh as BoxGeometry,$d as BoxHelper,Mn as BufferAttribute,Un as BufferGeometry,mu as BufferGeometryLoader,Ct as ByteType,Ac as Cache,Zc as Camera,Hd as CameraHelper,uh as CanvasTexture,gh as CapsuleGeometry,Nh as CatmullRomCurve3,et as CineonToneMapping,fh as CircleGeometry,yt as ClampToEdgeWrapping,md as Clock,Pr as Color,fc as ColorKeyframeTrack,Rs as ColorManagement,Hi as Compatibility,hh as CompressedArrayTexture,lh as CompressedCubeTexture,oh as CompressedTexture,Rc as CompressedTextureLoader,bh as ConeGeometry,L as ConstantAlphaFactor,E as ConstantColorFactor,ap as Controls,Iu as CubeCamera,ph as CubeDepthTexture,lt as CubeReflectionMapping,ct as CubeRefractionMapping,ch as CubeTexture,Ec as CubeTextureLoader,pt as CubeUVReflectionMapping,Lh as CubicBezierCurve,jh as CubicBezierCurve3,uc as CubicInterpolant,r as CullFaceBack,n as CullFaceFront,a as CullFaceFrontBack,s as CullFaceNone,zh as Curve,Yh as CurvePath,b as CustomBlending,st as CustomToneMapping,xh as CylinderGeometry,gd as Cylindrical,Gs as Data3DTexture,Hs as DataArrayTexture,Ya as DataTexture,Fc as DataTextureLoader,xn as DataUtils,di as DecrementStencilOp,mi as DecrementWrapStencilOp,Cc as DefaultLoadingManager,Ut as DepthFormat,qt as DepthStencilFormat,dh as DepthTexture,ot as DetachedBindMode,au as DirectionalLight,Jd as DirectionalLightHelper,pc as DiscreteInterpolant,wh as DodecahedronGeometry,p as DoubleSide,O as DstAlphaFactor,R as DstColorFactor,Li as DynamicCopyUsage,Pi as DynamicDrawUsage,Vi as DynamicReadUsage,Th as EdgesGeometry,Ch as EllipseCurve,Ti as EqualCompare,J as EqualDepth,xi as EqualStencilFunc,ut as EquirectangularReflectionMapping,dt as EquirectangularRefractionMapping,hr as Euler,ds as EventDispatcher,mh as ExternalTexture,Tl as ExtrudeGeometry,Oc as FileLoader,Bn as Float16BufferAttribute,kn as Float32BufferAttribute,Pt as FloatType,Vr as Fog,Nr as FogExp2,ah as FramebufferTexture,u as FrontSide,mo as Frustum,fo as FrustumArray,ld as GLBufferAttribute,Di as GLSL1,Wi as GLSL3,Ci as GreaterCompare,Y as GreaterDepth,Bi as GreaterEqualCompare,X as GreaterEqualDepth,Mi as GreaterEqualStencilFunc,vi as GreaterStencilFunc,jd as GridHelper,Tr as Group,Rt as HalfFloatType,Dc as HemisphereLight,Ld as HemisphereLightHelper,Cl as IcosahedronGeometry,vu as ImageBitmapLoader,Vc as ImageLoader,Fs as ImageUtils,ui as IncrementStencilOp,pi as IncrementWrapStencilOp,$a as InstancedBufferAttribute,pu as InstancedBufferGeometry,hd as InstancedInterleavedBuffer,no as InstancedMesh,Tn as Int16BufferAttribute,Cn as Int32BufferAttribute,Sn as Int8BufferAttribute,kt as IntType,qn as InterleavedBuffer,Xn as InterleavedBufferAttribute,cc as Interpolant,Le as InterpolateBezier,Ve as InterpolateDiscrete,Ee as InterpolateLinear,Fe as InterpolateSmooth,Yi as InterpolationSamplingMode,Xi as InterpolationSamplingType,yi as InvertStencilOp,li as KeepStencilOp,yc as KeyframeTrack,pa as LOD,Il as LatheGeometry,lr as Layers,Ai as LessCompare,U as LessDepth,zi as LessEqualCompare,q as LessEqualDepth,bi as LessEqualStencilFunc,fi as LessStencilFunc,jc as Light,cu as LightProbe,Jo as Line,zd as Line3,Eo as LineBasicMaterial,Dh as LineCurve,Wh as LineCurve3,rc as LineDashedMaterial,Go as LineLoop,Zo as LineSegments,Mt as LinearFilter,dc as LinearInterpolant,Tt as LinearMipMapLinearFilter,_t as LinearMipMapNearestFilter,At as LinearMipmapLinearFilter,St as LinearMipmapNearestFilter,ii as LinearSRGBColorSpace,K as LinearToneMapping,si as LinearTransfer,Ic as Loader,du as LoaderUtils,zc as LoadingManager,Pe as LoopOnce,Ne as LoopPingPong,Re as LoopRepeat,e as MOUSE,Zn as Material,v as MaterialBlending,uu as MaterialLoader,Ss as MathUtils,fd as Matrix2,Is as Matrix3,Qs as Matrix4,A as MaxEquation,Ra as Mesh,Ma as MeshBasicMaterial,ec as MeshDepthMaterial,ic as MeshDistanceMaterial,tc as MeshLambertMaterial,sc as MeshMatcapMaterial,Kl as MeshNormalMaterial,$l as MeshPhongMaterial,Gl as MeshPhysicalMaterial,Zl as MeshStandardMaterial,Ql as MeshToonMaterial,_ as MinEquation,gt as MirroredRepeatWrapping,G as MixOperation,x as MultiplyBlending,Z as MultiplyOperation,ft as NearestFilter,wt as NearestMipMapLinearFilter,bt as NearestMipMapNearestFilter,vt as NearestMipmapLinearFilter,xt as NearestMipmapNearestFilter,nt as NeutralToneMapping,_i as NeverCompare,D as NeverDepth,gi as NeverStencilFunc,m as NoBlending,ti as NoColorSpace,ni as NoNormalPacking,Q as NoToneMapping,Ue as NormalAnimationBlendMode,y as NormalBlending,oi as NormalGAPacking,ai as NormalRGPacking,Ii as NotEqualCompare,H as NotEqualDepth,wi as NotEqualStencilFunc,xc as NumberKeyframeTrack,Ar as Object3D,yu as ObjectLoader,Ke as ObjectSpaceNormalMap,Bl as OctahedronGeometry,z as OneFactor,j as OneMinusConstantAlphaFactor,F as OneMinusConstantColorFactor,P as OneMinusDstAlphaFactor,N as OneMinusDstColorFactor,k as OneMinusSrcAlphaFactor,I as OneMinusSrcColorFactor,ru as OrthographicCamera,h as PCFShadowMap,l as PCFSoftShadowMap,Hh as Path,Kc as PerspectiveCamera,lo as Plane,kl as PlaneGeometry,Kd as PlaneHelper,su as PointLight,Nd as PointLightHelper,ih as Points,$o as PointsMaterial,Dd as PolarGridHelper,vh as PolyhedronGeometry,qu as PositionalAudio,Ku as PropertyBinding,Xu as PropertyMixer,Uh as QuadraticBezierCurve,qh as QuadraticBezierCurve3,As as Quaternion,vc as QuaternionKeyframeTrack,bc as QuaternionLinearInterpolant,he as R11_EAC_Format,gs as RAD2DEG,ke as RED_GREEN_RGTC2_Format,Ie as RED_RGTC1_Format,t as REVISION,ce as RG11_EAC_Format,Ze as RGBADepthPacking,Wt as RGBAFormat,Gt as RGBAIntegerFormat,Se as RGBA_ASTC_10x10_Format,ve as RGBA_ASTC_10x5_Format,we as RGBA_ASTC_10x6_Format,Me as RGBA_ASTC_10x8_Format,_e as RGBA_ASTC_12x10_Format,Ae as RGBA_ASTC_12x12_Format,de as RGBA_ASTC_4x4_Format,pe as RGBA_ASTC_5x4_Format,me as RGBA_ASTC_5x5_Format,ye as RGBA_ASTC_6x5_Format,ge as RGBA_ASTC_6x6_Format,fe as RGBA_ASTC_8x5_Format,xe as RGBA_ASTC_8x6_Format,be as RGBA_ASTC_8x8_Format,Te as RGBA_BPTC_Format,oe as RGBA_ETC2_EAC_Format,re as RGBA_PVRTC_2BPPV1_Format,se as RGBA_PVRTC_4BPPV1_Format,Qt as RGBA_S3TC_DXT1_Format,Kt as RGBA_S3TC_DXT3_Format,te as RGBA_S3TC_DXT5_Format,Ge as RGBDepthPacking,Dt as RGBFormat,Zt as RGBIntegerFormat,ze as RGB_BPTC_SIGNED_Format,Ce as RGB_BPTC_UNSIGNED_Format,ne as RGB_ETC1_Format,ae as RGB_ETC2_Format,ie as RGB_PVRTC_2BPPV1_Format,ee as RGB_PVRTC_4BPPV1_Format,$t as RGB_S3TC_DXT1_Format,$e as RGDepthPacking,Yt as RGFormat,Ht as RGIntegerFormat,Hl as RawShaderMaterial,wa as Ray,ud as Raycaster,hu as RectAreaLight,Jt as RedFormat,Xt as RedIntegerFormat,tt as ReinhardToneMapping,Xs as RenderTarget,rd as RenderTarget3D,mt as RepeatWrapping,ci as ReplaceStencilOp,S as ReverseSubtractEquation,us as ReversedDepthFuncs,Ol as RingGeometry,le as SIGNED_R11_EAC_Format,Oe as SIGNED_RED_GREEN_RGTC2_Format,Be as SIGNED_RED_RGTC1_Format,ue as SIGNED_RG11_EAC_Format,ei as SRGBColorSpace,ri as SRGBTransfer,Er as Scene,Yl as ShaderMaterial,Wl as ShadowMaterial,Zh as Shape,Pl as ShapeGeometry,np as ShapePath,Sl as ShapeUtils,It as ShortType,Ga as Skeleton,Pd as SkeletonHelper,Ja as SkinnedMesh,js as Source,Nn as Sphere,Rl as SphereGeometry,yd as Spherical,lu as SphericalHarmonics3,Jh as SplineCurve,eu as SpotLight,Id as SpotLightHelper,la as Sprite,Gn as SpriteMaterial,B as SrcAlphaFactor,V as SrcAlphaSaturateFactor,C as SrcColorFactor,Fi as StaticCopyUsage,Oi as StaticDrawUsage,Ni as StaticReadUsage,zu as StereoCamera,ji as StreamCopyUsage,Ri as StreamDrawUsage,Ei as StreamReadUsage,wc as StringKeyframeTrack,M as SubtractEquation,f as SubtractiveBlending,i as TOUCH,Qe as TangentSpaceNormalMap,Nl as TetrahedronGeometry,qs as Texture,Lc as TextureLoader,hp as TextureUtils,ku as Timer,Ji as TimestampQuery,Vl as TorusGeometry,El as TorusKnotGeometry,$r as Triangle,Ye as TriangleFanDrawMode,Xe as TriangleStripDrawMode,Je as TrianglesDrawMode,Fl as TubeGeometry,ht as UVMapping,zn as Uint16BufferAttribute,In as Uint32BufferAttribute,_n as Uint8BufferAttribute,An as Uint8ClampedBufferAttribute,nd as Uniform,od as UniformsGroup,Xl as UniformsUtils,zt as UnsignedByteType,Lt as UnsignedInt101111Type,Et as UnsignedInt248Type,Ft as UnsignedInt5999Type,Ot as UnsignedIntType,Nt as UnsignedShort4444Type,Vt as UnsignedShort5551Type,Bt as UnsignedShortType,c as VSMShadowMap,_s as Vector2,Ts as Vector3,Js as Vector4,Mc as VectorKeyframeTrack,nh as VideoFrameTexture,rh as VideoTexture,$s as WebGL3DRenderTarget,Zs as WebGLArrayRenderTarget,Ui as WebGLCoordinateSystem,Ys as WebGLRenderTarget,qi as WebGPUCoordinateSystem,Cr as WebXRController,Ll as WireframeGeometry,We as WrapAroundEnding,je as ZeroCurvatureEnding,T as ZeroFactor,De as ZeroSlopeEnding,hi as ZeroStencilOp,Ul as cloneUniforms,Ki as createCanvasElement,Qi as createElementNS,os as error,op as getByteLength,ss as getConsoleFunction,Jl as getUnlitUniformColorSpace,$i as isTypedArray,rs as log,ql as mergeUniforms,cs as probeAsync,is as setConsoleFunction,as as warn,hs as warnOnce,ls as yieldToMain}; diff --git a/build/three.module.js b/build/three.module.js index 6ea4375d2393e4..ce410c58094c3b 100644 --- a/build/three.module.js +++ b/build/three.module.js @@ -3,7 +3,7 @@ * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT */ -import { Matrix3, Vector2, Color, mergeUniforms, Vector3, CubeUVReflectionMapping, Mesh, BoxGeometry, ShaderMaterial, BackSide, cloneUniforms, Euler, Matrix4, ColorManagement, SRGBTransfer, PlaneGeometry, FrontSide, getUnlitUniformColorSpace, IntType, warn, HalfFloatType, UnsignedByteType, FloatType, RGBAFormat, Plane, CubeReflectionMapping, CubeRefractionMapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, NoToneMapping, MeshBasicMaterial, error, NoBlending, WebGLRenderTarget, BufferAttribute, LinearSRGBColorSpace, LinearFilter, CubeTexture, LinearMipmapLinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, warnOnce, Uint32BufferAttribute, Uint16BufferAttribute, Vector4, DataArrayTexture, Float32BufferAttribute, RawShaderMaterial, CustomToneMapping, NeutralToneMapping, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, ReinhardToneMapping, LinearToneMapping, Data3DTexture, GreaterEqualCompare, LessEqualCompare, DepthTexture, Texture, GLSL3, VSMShadowMap, PCFShadowMap, AddOperation, MixOperation, MultiplyOperation, LinearTransfer, UniformsUtils, DoubleSide, NormalBlending, TangentSpaceNormalMap, ObjectSpaceNormalMap, Layers, RGFormat, Frustum, MeshDepthMaterial, MeshDistanceMaterial, PCFSoftShadowMap, DepthFormat, NearestFilter, CubeDepthTexture, UnsignedIntType, LessEqualDepth, ReverseSubtractEquation, SubtractEquation, AddEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcAlphaFactor, SrcColorFactor, OneFactor, ZeroFactor, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceNone, CullFaceBack, CullFaceFront, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, ReversedDepthFuncs, MinEquation, MaxEquation, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, LinearMipmapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NotEqualCompare, GreaterCompare, EqualCompare, LessCompare, AlwaysCompare, NeverCompare, NoColorSpace, DepthStencilFormat, getByteLength, UnsignedInt248Type, UnsignedShortType, createElementNS, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt5999Type, UnsignedInt101111Type, ByteType, ShortType, AlphaFormat, RGBFormat, RedFormat, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, ExternalTexture, EventDispatcher, ArrayCamera, WebXRController, RAD2DEG, DataTexture, createCanvasElement, SRGBColorSpace, REVISION, log, WebGLCoordinateSystem, probeAsync } from './three.core.js'; +import { Matrix3, Vector2, Color, mergeUniforms, Vector3, CubeUVReflectionMapping, Mesh, BoxGeometry, ShaderMaterial, BackSide, cloneUniforms, Euler, Matrix4, ColorManagement, SRGBTransfer, PlaneGeometry, FrontSide, getUnlitUniformColorSpace, IntType, warn, HalfFloatType, UnsignedByteType, FloatType, RGBAFormat, Plane, CubeReflectionMapping, CubeRefractionMapping, BufferGeometry, OrthographicCamera, PerspectiveCamera, NoToneMapping, MeshBasicMaterial, error, NoBlending, WebGLRenderTarget, BufferAttribute, LinearSRGBColorSpace, LinearFilter, CubeTexture, LinearMipmapLinearFilter, CubeCamera, EquirectangularReflectionMapping, EquirectangularRefractionMapping, warnOnce, Uint32BufferAttribute, Uint16BufferAttribute, Vector4, DataArrayTexture, Float32BufferAttribute, RawShaderMaterial, CustomToneMapping, NeutralToneMapping, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, ReinhardToneMapping, LinearToneMapping, Data3DTexture, GreaterEqualCompare, LessEqualCompare, DepthTexture, Texture, GLSL3, VSMShadowMap, PCFShadowMap, AddOperation, MixOperation, MultiplyOperation, LinearTransfer, UniformsUtils, DoubleSide, NormalBlending, TangentSpaceNormalMap, ObjectSpaceNormalMap, Layers, RGFormat, RG11_EAC_Format, RED_GREEN_RGTC2_Format, Frustum, MeshDepthMaterial, MeshDistanceMaterial, PCFSoftShadowMap, DepthFormat, NearestFilter, CubeDepthTexture, UnsignedIntType, LessEqualDepth, ReverseSubtractEquation, SubtractEquation, AddEquation, OneMinusConstantAlphaFactor, ConstantAlphaFactor, OneMinusConstantColorFactor, ConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, DstAlphaFactor, DstColorFactor, SrcAlphaSaturateFactor, SrcAlphaFactor, SrcColorFactor, OneFactor, ZeroFactor, NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceNone, CullFaceBack, CullFaceFront, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, ReversedDepthFuncs, MinEquation, MaxEquation, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, LinearMipmapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NotEqualCompare, GreaterCompare, EqualCompare, LessCompare, AlwaysCompare, NeverCompare, NoColorSpace, DepthStencilFormat, getByteLength, UnsignedInt248Type, UnsignedShortType, createElementNS, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedInt5999Type, UnsignedInt101111Type, ByteType, ShortType, AlphaFormat, RGBFormat, RedFormat, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, SIGNED_RED_GREEN_RGTC2_Format, ExternalTexture, EventDispatcher, ArrayCamera, WebXRController, RAD2DEG, DataTexture, createCanvasElement, SRGBColorSpace, REVISION, log, WebGLCoordinateSystem, probeAsync } from './three.core.js'; export { AdditiveAnimationBlendMode, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxHelper, BufferGeometryLoader, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CircleGeometry, Clock, ColorKeyframeTrack, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, Controls, CubeTextureLoader, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceFrontBack, Curve, CurvePath, CylinderGeometry, Cylindrical, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualStencilFunc, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Fog, FogExp2, FramebufferTexture, FrustumArray, GLBufferAttribute, GLSL1, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NeverStencilFunc, NoNormalPacking, NormalAnimationBlendMode, NormalGAPacking, NormalRGPacking, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, OctahedronGeometry, Path, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RGBADepthPacking, RGBDepthPacking, RGBIntegerFormat, RGDepthPacking, Ray, Raycaster, RectAreaLight, RenderTarget, RenderTarget3D, ReplaceStencilOp, RingGeometry, Scene, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, TOUCH, TetrahedronGeometry, TextureLoader, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroSlopeEnding, ZeroStencilOp, getConsoleFunction, setConsoleFunction } from './three.core.js'; function WebGLAnimation() { @@ -437,7 +437,7 @@ var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetB var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;"; -var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; +var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#if defined( USE_PACKED_NORMALMAP )\n\t\tmapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) );\n\t#endif\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; @@ -6976,6 +6976,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '', parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '', + parameters.packedNormalMap ? '#define USE_PACKED_NORMALMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.anisotropy ? '#define USE_ANISOTROPY' : '', @@ -7427,6 +7428,12 @@ class WebGLShaderStage { } +function isPackedRGFormat( format ) { + + return format === RGFormat || format === RG11_EAC_Format || format === RED_GREEN_RGTC2_Format; + +} + function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) { const _programLayers = new Layers(); @@ -7637,6 +7644,7 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap, normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap, + packedNormalMap: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap && isPackedRGFormat( material.normalMap.format ), metalnessMap: HAS_METALNESSMAP, roughnessMap: HAS_ROUGHNESSMAP, @@ -7941,6 +7949,8 @@ function WebGLPrograms( renderer, environments, extensions, capabilities, bindin _programLayers.enable( 20 ); if ( parameters.gradientMap ) _programLayers.enable( 21 ); + if ( parameters.packedNormalMap ) + _programLayers.enable( 22 ); array.push( _programLayers.mask ); _programLayers.disableAll(); @@ -17747,7 +17757,7 @@ class WebGLRenderer { generateMipmaps: true, type: hasHalfFloatSupport ? HalfFloatType : UnsignedByteType, minFilter: LinearMipmapLinearFilter, - samples: capabilities.samples, + samples: Math.max( 4, capabilities.samples ), // to avoid feedback loops, the transmission render target requires a resolve, see #26177 stencilBuffer: stencil, resolveDepthBuffer: false, resolveStencilBuffer: false, diff --git a/build/three.module.min.js b/build/three.module.min.js index 1f59cbb9a0a186..1c0bc82719ea58 100644 --- a/build/three.module.min.js +++ b/build/three.module.min.js @@ -3,4 +3,4 @@ * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT */ -import{Matrix3 as e,Vector2 as t,Color as n,mergeUniforms as i,Vector3 as r,CubeUVReflectionMapping as a,Mesh as o,BoxGeometry as s,ShaderMaterial as l,BackSide as c,cloneUniforms as d,Euler as u,Matrix4 as f,ColorManagement as p,SRGBTransfer as m,PlaneGeometry as h,FrontSide as _,getUnlitUniformColorSpace as g,IntType as v,warn as E,HalfFloatType as S,UnsignedByteType as M,FloatType as T,RGBAFormat as x,Plane as A,CubeReflectionMapping as R,CubeRefractionMapping as b,BufferGeometry as C,OrthographicCamera as P,PerspectiveCamera as L,NoToneMapping as U,MeshBasicMaterial as D,error as w,NoBlending as I,WebGLRenderTarget as N,BufferAttribute as y,LinearSRGBColorSpace as F,LinearFilter as O,CubeTexture as B,LinearMipmapLinearFilter as G,CubeCamera as H,EquirectangularReflectionMapping as V,EquirectangularRefractionMapping as W,warnOnce as z,Uint32BufferAttribute as k,Uint16BufferAttribute as X,Vector4 as Y,DataArrayTexture as K,Float32BufferAttribute as q,RawShaderMaterial as j,CustomToneMapping as Z,NeutralToneMapping as $,AgXToneMapping as Q,ACESFilmicToneMapping as J,CineonToneMapping as ee,ReinhardToneMapping as te,LinearToneMapping as ne,Data3DTexture as ie,GreaterEqualCompare as re,LessEqualCompare as ae,DepthTexture as oe,Texture as se,GLSL3 as le,VSMShadowMap as ce,PCFShadowMap as de,AddOperation as ue,MixOperation as fe,MultiplyOperation as pe,LinearTransfer as me,UniformsUtils as he,DoubleSide as _e,NormalBlending as ge,TangentSpaceNormalMap as ve,ObjectSpaceNormalMap as Ee,Layers as Se,RGFormat as Me,Frustum as Te,MeshDepthMaterial as xe,MeshDistanceMaterial as Ae,PCFSoftShadowMap as Re,DepthFormat as be,NearestFilter as Ce,CubeDepthTexture as Pe,UnsignedIntType as Le,LessEqualDepth as Ue,ReverseSubtractEquation as De,SubtractEquation as we,AddEquation as Ie,OneMinusConstantAlphaFactor as Ne,ConstantAlphaFactor as ye,OneMinusConstantColorFactor as Fe,ConstantColorFactor as Oe,OneMinusDstAlphaFactor as Be,OneMinusDstColorFactor as Ge,OneMinusSrcAlphaFactor as He,OneMinusSrcColorFactor as Ve,DstAlphaFactor as We,DstColorFactor as ze,SrcAlphaSaturateFactor as ke,SrcAlphaFactor as Xe,SrcColorFactor as Ye,OneFactor as Ke,ZeroFactor as qe,NotEqualDepth as je,GreaterDepth as Ze,GreaterEqualDepth as $e,EqualDepth as Qe,LessDepth as Je,AlwaysDepth as et,NeverDepth as tt,CullFaceNone as nt,CullFaceBack as it,CullFaceFront as rt,CustomBlending as at,MultiplyBlending as ot,SubtractiveBlending as st,AdditiveBlending as lt,ReversedDepthFuncs as ct,MinEquation as dt,MaxEquation as ut,MirroredRepeatWrapping as ft,ClampToEdgeWrapping as pt,RepeatWrapping as mt,LinearMipmapNearestFilter as ht,NearestMipmapLinearFilter as _t,NearestMipmapNearestFilter as gt,NotEqualCompare as vt,GreaterCompare as Et,EqualCompare as St,LessCompare as Mt,AlwaysCompare as Tt,NeverCompare as xt,NoColorSpace as At,DepthStencilFormat as Rt,getByteLength as bt,UnsignedInt248Type as Ct,UnsignedShortType as Pt,createElementNS as Lt,UnsignedShort4444Type as Ut,UnsignedShort5551Type as Dt,UnsignedInt5999Type as wt,UnsignedInt101111Type as It,ByteType as Nt,ShortType as yt,AlphaFormat as Ft,RGBFormat as Ot,RedFormat as Bt,RedIntegerFormat as Gt,RGIntegerFormat as Ht,RGBAIntegerFormat as Vt,RGB_S3TC_DXT1_Format as Wt,RGBA_S3TC_DXT1_Format as zt,RGBA_S3TC_DXT3_Format as kt,RGBA_S3TC_DXT5_Format as Xt,RGB_PVRTC_4BPPV1_Format as Yt,RGB_PVRTC_2BPPV1_Format as Kt,RGBA_PVRTC_4BPPV1_Format as qt,RGBA_PVRTC_2BPPV1_Format as jt,RGB_ETC1_Format as Zt,RGB_ETC2_Format as $t,RGBA_ETC2_EAC_Format as Qt,R11_EAC_Format as Jt,SIGNED_R11_EAC_Format as en,RG11_EAC_Format as tn,SIGNED_RG11_EAC_Format as nn,RGBA_ASTC_4x4_Format as rn,RGBA_ASTC_5x4_Format as an,RGBA_ASTC_5x5_Format as on,RGBA_ASTC_6x5_Format as sn,RGBA_ASTC_6x6_Format as ln,RGBA_ASTC_8x5_Format as cn,RGBA_ASTC_8x6_Format as dn,RGBA_ASTC_8x8_Format as un,RGBA_ASTC_10x5_Format as fn,RGBA_ASTC_10x6_Format as pn,RGBA_ASTC_10x8_Format as mn,RGBA_ASTC_10x10_Format as hn,RGBA_ASTC_12x10_Format as _n,RGBA_ASTC_12x12_Format as gn,RGBA_BPTC_Format as vn,RGB_BPTC_SIGNED_Format as En,RGB_BPTC_UNSIGNED_Format as Sn,RED_RGTC1_Format as Mn,SIGNED_RED_RGTC1_Format as Tn,RED_GREEN_RGTC2_Format as xn,SIGNED_RED_GREEN_RGTC2_Format as An,ExternalTexture as Rn,EventDispatcher as bn,ArrayCamera as Cn,WebXRController as Pn,RAD2DEG as Ln,DataTexture as Un,createCanvasElement as Dn,SRGBColorSpace as wn,REVISION as In,log as Nn,WebGLCoordinateSystem as yn,probeAsync as Fn}from"./three.core.min.js";export{AdditiveAnimationBlendMode,AlwaysStencilFunc,AmbientLight,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrowHelper,AttachedBindMode,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BasicDepthPacking,BasicShadowMap,BatchedMesh,BezierInterpolant,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxHelper,BufferGeometryLoader,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CircleGeometry,Clock,ColorKeyframeTrack,Compatibility,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,Controls,CubeTextureLoader,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceFrontBack,Curve,CurvePath,CylinderGeometry,Cylindrical,DataTextureLoader,DataUtils,DecrementStencilOp,DecrementWrapStencilOp,DefaultLoadingManager,DetachedBindMode,DirectionalLight,DirectionalLightHelper,DiscreteInterpolant,DodecahedronGeometry,DynamicCopyUsage,DynamicDrawUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,EqualStencilFunc,ExtrudeGeometry,FileLoader,Float16BufferAttribute,Fog,FogExp2,FramebufferTexture,FrustumArray,GLBufferAttribute,GLSL1,GreaterEqualStencilFunc,GreaterStencilFunc,GridHelper,Group,HemisphereLight,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,IncrementStencilOp,IncrementWrapStencilOp,InstancedBufferAttribute,InstancedBufferGeometry,InstancedInterleavedBuffer,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,InterleavedBuffer,InterleavedBufferAttribute,Interpolant,InterpolateBezier,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InterpolationSamplingMode,InterpolationSamplingType,InvertStencilOp,KeepStencilOp,KeyframeTrack,LOD,LatheGeometry,LessEqualStencilFunc,LessStencilFunc,Light,LightProbe,Line,Line3,LineBasicMaterial,LineCurve,LineCurve3,LineDashedMaterial,LineLoop,LineSegments,LinearInterpolant,LinearMipMapLinearFilter,LinearMipMapNearestFilter,Loader,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,MOUSE,Material,MaterialBlending,MaterialLoader,MathUtils,Matrix2,MeshLambertMaterial,MeshMatcapMaterial,MeshNormalMaterial,MeshPhongMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshToonMaterial,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NeverStencilFunc,NoNormalPacking,NormalAnimationBlendMode,NormalGAPacking,NormalRGPacking,NotEqualStencilFunc,NumberKeyframeTrack,Object3D,ObjectLoader,OctahedronGeometry,Path,PlaneHelper,PointLight,PointLightHelper,Points,PointsMaterial,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,Quaternion,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RGBADepthPacking,RGBDepthPacking,RGBIntegerFormat,RGDepthPacking,Ray,Raycaster,RectAreaLight,RenderTarget,RenderTarget3D,ReplaceStencilOp,RingGeometry,Scene,ShadowMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,Skeleton,SkeletonHelper,SkinnedMesh,Source,Sphere,SphereGeometry,Spherical,SphericalHarmonics3,SplineCurve,SpotLight,SpotLightHelper,Sprite,SpriteMaterial,StaticCopyUsage,StaticDrawUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,TOUCH,TetrahedronGeometry,TextureLoader,TextureUtils,Timer,TimestampQuery,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,UVMapping,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,VectorKeyframeTrack,VideoFrameTexture,VideoTexture,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGPUCoordinateSystem,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroSlopeEnding,ZeroStencilOp,getConsoleFunction,setConsoleFunction}from"./three.core.min.js";function On(){let e=null,t=!1,n=null,i=null;function r(t,a){n(t,a),i=e.requestAnimationFrame(r)}return{start:function(){!0!==t&&null!==n&&(i=e.requestAnimationFrame(r),t=!0)},stop:function(){e.cancelAnimationFrame(i),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function Bn(e){const t=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),t.get(e)},remove:function(n){n.isInterleavedBufferAttribute&&(n=n.data);const i=t.get(n);i&&(e.deleteBuffer(i.buffer),t.delete(n))},update:function(n,i){if(n.isInterleavedBufferAttribute&&(n=n.data),n.isGLBufferAttribute){const e=t.get(n);return void((!e||e.versione.start-t.start);let t=0;for(let e=1;e 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec4 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec4( 1.0 );\n#endif\n#ifdef USE_COLOR_ALPHA\n\tvColor *= color;\n#elif defined( USE_COLOR )\n\tvColor.rgb *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.rgb *= instanceColor.rgb;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) );\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn 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 );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn 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 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t\t#endif\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, pow4( roughness ) ) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.metalness = metalnessFactor;\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor;\n\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = vec3( 0.04 );\n\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.0001, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"uniform sampler2D dfgLUT;\nstruct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tvec3 diffuseContribution;\n\tvec3 specularColor;\n\tvec3 specularColorBlended;\n\tfloat roughness;\n\tfloat metalness;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t\tvec3 iridescenceFresnelDielectric;\n\t\tvec3 iridescenceFresnelMetallic;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn v;\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColorBlended;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transpose( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat rInv = 1.0 / ( roughness + 0.1 );\n\tfloat a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv;\n\tfloat b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv;\n\tfloat DG = exp( a * dotNV + b );\n\treturn saturate( DG );\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid 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 ) {\n#else\nvoid 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 ) {\n#endif\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nvec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 singleScatter = BRDF_GGX( lightDir, viewDir, normal, material );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg;\n\tvec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg;\n\tvec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y;\n\tvec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y;\n\tfloat Ess_V = dfgV.x + dfgV.y;\n\tfloat Ess_L = dfgL.x + dfgL.y;\n\tfloat Ems_V = 1.0 - Ess_V;\n\tfloat Ems_L = 1.0 - Ess_L;\n\tvec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619;\n\tvec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON );\n\tfloat compensationFactor = Ems_V * Ems_L;\n\tvec3 multiScatter = Fms * compensationFactor;\n\treturn singleScatter + multiScatter;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t\t#ifdef USE_CLEARCOAT\n\t\t\tvec3 Ncc = geometryClearcoatNormal;\n\t\t\tvec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness );\n\t\t\tvec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat );\n\t\t\tvec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat );\n\t\t\tmat3 mInvClearcoat = mat3(\n\t\t\t\tvec3( t1Clearcoat.x, 0, t1Clearcoat.y ),\n\t\t\t\tvec3( 0, 1, 0 ),\n\t\t\t\tvec3( t1Clearcoat.z, 0, t1Clearcoat.w )\n\t\t\t);\n\t\t\tvec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y;\n\t\t\tclearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords );\n\t\t#endif\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n \n \t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n \n \t\tfloat sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n \t\tfloat sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness );\n \n \t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL );\n \n \t\tirradiance *= sheenEnergyComp;\n \n \t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution );\n\t#ifdef USE_SHEEN\n\t\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\n\t\tdiffuse *= sheenEnergyComp;\n\t#endif\n\treflectedLight.indirectDiffuse += diffuse;\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI;\n \t#endif\n\tvec3 singleScatteringDielectric = vec3( 0.0 );\n\tvec3 multiScatteringDielectric = vec3( 0.0 );\n\tvec3 singleScatteringMetallic = vec3( 0.0 );\n\tvec3 multiScatteringMetallic = vec3( 0.0 );\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\n\t#endif\n\tvec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness );\n\tvec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness );\n\tvec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;\n\tvec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tvec3 indirectSpecular = radiance * singleScattering;\n\tindirectSpecular += multiScattering * cosineWeightedIrradiance;\n\tvec3 indirectDiffuse = diffuse * cosineWeightedIrradiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\n\t\tindirectSpecular *= sheenEnergyComp;\n\t\tindirectDiffuse *= sheenEnergyComp;\n\t#endif\n\treflectedLight.indirectSpecular += indirectSpecular;\n\treflectedLight.indirectDiffuse += indirectDiffuse;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnelDielectric = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceFresnelMetallic = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.diffuseColor );\n\t\tmaterial.iridescenceFresnel = mix( material.iridescenceFresnelDielectric, material.iridescenceFresnelMetallic, material.metalness );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\t#if defined( STANDARD ) || defined( LAMBERT ) || defined( PHONG )\n\t\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t\t#endif\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\t#if defined( LAMBERT ) || defined( PHONG )\n\t\tirradiance += iblIrradiance;\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\n\t\treturn depth * ( far - near ) - far;\n\t#else\n\t\treturn depth * ( near - far ) - near;\n\t#endif\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\t\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\treturn ( near * far ) / ( ( near - far ) * depth - near );\n\t#else\n\t\treturn ( near * far ) / ( ( far - near ) * depth - far );\n\t#endif\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\t\t\tuniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat interleavedGradientNoise( vec2 position ) {\n\t\t\treturn fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );\n\t\t}\n\t\tvec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {\n\t\t\tconst float goldenAngle = 2.399963229728653;\n\t\t\tfloat r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );\n\t\t\tfloat theta = float( sampleIndex ) * goldenAngle + phi;\n\t\t\treturn vec2( cos( theta ), sin( theta ) ) * r;\n\t\t}\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\tshadowCoord.z += shadowBias;\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\t\tfloat radius = shadowRadius * texelSize.x;\n\t\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )\n\t\t\t\t) * 0.2;\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;\n\t\t\t\tfloat mean = distribution.x;\n\t\t\t\tfloat variance = distribution.y * distribution.y;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tfloat hard_shadow = step( mean, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tfloat hard_shadow = step( shadowCoord.z, mean );\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\tif ( hard_shadow == 1.0 ) {\n\t\t\t\t\tshadow = 1.0;\n\t\t\t\t} else {\n\t\t\t\t\tvariance = max( variance, 0.0000001 );\n\t\t\t\t\tfloat d = shadowCoord.z - mean;\n\t\t\t\t\tfloat p_max = variance / ( variance + d * d );\n\t\t\t\t\tp_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );\n\t\t\t\t\tshadow = max( hard_shadow, p_max );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#else\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tfloat depth = texture2D( shadowMap, shadowCoord.xy ).r;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tshadow = step( depth, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tshadow = step( shadowCoord.z, depth );\n\t\t\t\t#endif\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\tfloat getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tfloat dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp -= shadowBias;\n\t\t\t#else\n\t\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp += shadowBias;\n\t\t\t#endif\n\t\t\tfloat texelSize = shadowRadius / shadowMapSize.x;\n\t\t\tvec3 absDir = abs( bd3D );\n\t\t\tvec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );\n\t\t\ttangent = normalize( cross( bd3D, tangent ) );\n\t\t\tvec3 bitangent = cross( bd3D, tangent );\n\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\tvec2 sample0 = vogelDiskSample( 0, 5, phi );\n\t\t\tvec2 sample1 = vogelDiskSample( 1, 5, phi );\n\t\t\tvec2 sample2 = vogelDiskSample( 2, 5, phi );\n\t\t\tvec2 sample3 = vogelDiskSample( 3, 5, phi );\n\t\t\tvec2 sample4 = vogelDiskSample( 4, 5, phi );\n\t\t\tshadow = (\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )\n\t\t\t) * 0.2;\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\tfloat getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tfloat depth = textureCube( shadowMap, bd3D ).r;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tdepth = 1.0 - depth;\n\t\t\t#endif\n\t\t\tshadow = step( dp, depth );\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#endif\n\t#endif\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0 && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseContribution, material.specularColorBlended, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distance_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distance_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = vec4( dist, 0.0, 0.0, 1.0 );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n \n\t\toutgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;\n \n \t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Hn={common:{diffuse:{value:new n(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new e}},envmap:{envMap:{value:null},envMapRotation:{value:new e},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new e}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new e}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new e},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new e},normalScale:{value:new t(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new e},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new e}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new e}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new e}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new n(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},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 n(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0},uvTransform:{value:new e}},sprite:{diffuse:{value:new n(16777215)},opacity:{value:1},center:{value:new t(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}}},Vn={basic:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.fog]),vertexShader:Gn.meshbasic_vert,fragmentShader:Gn.meshbasic_frag},lambert:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},envMapIntensity:{value:1}}]),vertexShader:Gn.meshlambert_vert,fragmentShader:Gn.meshlambert_frag},phong:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},specular:{value:new n(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:Gn.meshphong_vert,fragmentShader:Gn.meshphong_frag},standard:{uniforms:i([Hn.common,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.roughnessmap,Hn.metalnessmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Gn.meshphysical_vert,fragmentShader:Gn.meshphysical_frag},toon:{uniforms:i([Hn.common,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.gradientmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)}}]),vertexShader:Gn.meshtoon_vert,fragmentShader:Gn.meshtoon_frag},matcap:{uniforms:i([Hn.common,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,{matcap:{value:null}}]),vertexShader:Gn.meshmatcap_vert,fragmentShader:Gn.meshmatcap_frag},points:{uniforms:i([Hn.points,Hn.fog]),vertexShader:Gn.points_vert,fragmentShader:Gn.points_frag},dashed:{uniforms:i([Hn.common,Hn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Gn.linedashed_vert,fragmentShader:Gn.linedashed_frag},depth:{uniforms:i([Hn.common,Hn.displacementmap]),vertexShader:Gn.depth_vert,fragmentShader:Gn.depth_frag},normal:{uniforms:i([Hn.common,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,{opacity:{value:1}}]),vertexShader:Gn.meshnormal_vert,fragmentShader:Gn.meshnormal_frag},sprite:{uniforms:i([Hn.sprite,Hn.fog]),vertexShader:Gn.sprite_vert,fragmentShader:Gn.sprite_frag},background:{uniforms:{uvTransform:{value:new e},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Gn.background_vert,fragmentShader:Gn.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new e}},vertexShader:Gn.backgroundCube_vert,fragmentShader:Gn.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Gn.cube_vert,fragmentShader:Gn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Gn.equirect_vert,fragmentShader:Gn.equirect_frag},distance:{uniforms:i([Hn.common,Hn.displacementmap,{referencePosition:{value:new r},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Gn.distance_vert,fragmentShader:Gn.distance_frag},shadow:{uniforms:i([Hn.lights,Hn.fog,{color:{value:new n(0)},opacity:{value:1}}]),vertexShader:Gn.shadow_vert,fragmentShader:Gn.shadow_frag}};Vn.physical={uniforms:i([Vn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new e},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new e},clearcoatNormalScale:{value:new t(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new e},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new e},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new e},sheen:{value:0},sheenColor:{value:new n(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new e},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new e},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new e},transmissionSamplerSize:{value:new t},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new e},attenuationDistance:{value:0},attenuationColor:{value:new n(0)},specularColor:{value:new n(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new e},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new e},anisotropyVector:{value:new t},anisotropyMap:{value:null},anisotropyMapTransform:{value:new e}}]),vertexShader:Gn.meshphysical_vert,fragmentShader:Gn.meshphysical_frag};const Wn={r:0,b:0,g:0},zn=new u,kn=new f;function Xn(e,t,i,r,u,f){const v=new n(0);let E,S,M=!0===u?0:1,T=null,x=0,A=null;function R(e){let n=!0===e.isScene?e.background:null;if(n&&n.isTexture){const i=e.backgroundBlurriness>0;n=t.get(n,i)}return n}function b(t,n){t.getRGB(Wn,g(e)),i.buffers.color.setClear(Wn.r,Wn.g,Wn.b,n,f)}return{getClearColor:function(){return v},setClearColor:function(e,t=1){v.set(e),M=t,b(v,M)},getClearAlpha:function(){return M},setClearAlpha:function(e){M=e,b(v,M)},render:function(t){let n=!1;const r=R(t);null===r?b(v,M):r&&r.isColor&&(b(r,1),n=!0);const a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,f):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,f),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){const i=R(n);i&&(i.isCubeTexture||i.mapping===a)?(void 0===S&&(S=new o(new s(1,1,1),new l({name:"BackgroundCubeMaterial",uniforms:d(Vn.backgroundCube.uniforms),vertexShader:Vn.backgroundCube.vertexShader,fragmentShader:Vn.backgroundCube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),S.geometry.deleteAttribute("normal"),S.geometry.deleteAttribute("uv"),S.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(S.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(S)),zn.copy(n.backgroundRotation),zn.x*=-1,zn.y*=-1,zn.z*=-1,i.isCubeTexture&&!1===i.isRenderTargetTexture&&(zn.y*=-1,zn.z*=-1),S.material.uniforms.envMap.value=i,S.material.uniforms.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,S.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,S.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,S.material.uniforms.backgroundRotation.value.setFromMatrix4(kn.makeRotationFromEuler(zn)),S.material.toneMapped=p.getTransfer(i.colorSpace)!==m,T===i&&x===i.version&&A===e.toneMapping||(S.material.needsUpdate=!0,T=i,x=i.version,A=e.toneMapping),S.layers.enableAll(),t.unshift(S,S.geometry,S.material,0,0,null)):i&&i.isTexture&&(void 0===E&&(E=new o(new h(2,2),new l({name:"BackgroundMaterial",uniforms:d(Vn.background.uniforms),vertexShader:Vn.background.vertexShader,fragmentShader:Vn.background.fragmentShader,side:_,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),E.geometry.deleteAttribute("normal"),Object.defineProperty(E.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(E)),E.material.uniforms.t2D.value=i,E.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,E.material.toneMapped=p.getTransfer(i.colorSpace)!==m,!0===i.matrixAutoUpdate&&i.updateMatrix(),E.material.uniforms.uvTransform.value.copy(i.matrix),T===i&&x===i.version&&A===e.toneMapping||(E.material.needsUpdate=!0,T=i,x=i.version,A=e.toneMapping),E.layers.enableAll(),t.unshift(E,E.geometry,E.material,0,0,null))},dispose:function(){void 0!==S&&(S.geometry.dispose(),S.material.dispose(),S=void 0),void 0!==E&&(E.geometry.dispose(),E.material.dispose(),E=void 0)}}}function Yn(e,t){const n=e.getParameter(e.MAX_VERTEX_ATTRIBS),i={},r=c(null);let a=r,o=!1;function s(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function c(e){const t=[],i=[],r=[];for(let e=0;e=0){const n=r[t];let i=o[t];if(void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;s++}}return a.attributesNum!==s||a.index!==i}(n,h,l,_),g&&function(e,t,n,i){const r={},o=t.attributes;let s=0;const l=n.getAttributes();for(const t in l){if(l[t].location>=0){let n=o[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[t]=i,s++}}a.attributes=r,a.attributesNum=s,a.index=i}(n,h,l,_),null!==_&&t.update(_,e.ELEMENT_ARRAY_BUFFER),(g||o)&&(o=!1,function(n,i,r,a){d();const o=a.attributes,s=r.getAttributes(),l=i.defaultAttributeValues;for(const i in s){const r=s[i];if(r.location>=0){let s=o[i];if(void 0===s&&("instanceMatrix"===i&&n.instanceMatrix&&(s=n.instanceMatrix),"instanceColor"===i&&n.instanceColor&&(s=n.instanceColor)),void 0!==s){const i=s.normalized,o=s.itemSize,l=t.get(s);if(void 0===l)continue;const c=l.buffer,d=l.type,p=l.bytesPerElement,h=d===e.INT||d===e.UNSIGNED_INT||s.gpuType===v;if(s.isInterleavedBufferAttribute){const t=s.data,l=t.stride,_=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let o=void 0!==n.precision?n.precision:"highp";const s=a(o);s!==o&&(E("WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,textureFormatReadable:function(t){return t===x||i.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){const r=n===S&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(n!==M&&i.convert(n)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&n!==T&&!r)},precision:o,logarithmicDepthBuffer:!0===n.logarithmicDepthBuffer,reversedDepthBuffer:!0===n.reversedDepthBuffer&&t.has("EXT_clip_control"),maxTextures:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),maxVertexTextures:e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),maxSamples:e.getParameter(e.MAX_SAMPLES),samples:e.getParameter(e.SAMPLES)}}function jn(t){const n=this;let i=null,r=0,a=!1,o=!1;const s=new A,l=new e,c={value:null,needsUpdate:!1};function d(e,t,i,r){const a=null!==e?e.length:0;let o=null;if(0!==a){if(o=c.value,!0!==r||null===o){const n=i+4*a,r=t.matrixWorldInverse;l.getNormalMatrix(r),(null===o||o.length0);n.numPlanes=r,n.numIntersection=0}();else{const e=o?0:r,t=4*e;let n=m.clippingState||null;c.value=n,n=d(u,s,t,l);for(let e=0;e!==t;++e)n[e]=i[e];m.clippingState=n,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}}}const Zn=[.125,.215,.35,.446,.526,.582],$n=20,Qn=new P,Jn=new n;let ei=null,ti=0,ni=0,ii=!1;const ri=new r;class ai{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._backgroundBox=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._blurMaterial=null,this._ggxMaterial=null}fromScene(e,t=0,n=.1,i=100,r={}){const{size:a=256,position:o=ri}=r;ei=this._renderer.getRenderTarget(),ti=this._renderer.getActiveCubeFace(),ni=this._renderer.getActiveMipmapLevel(),ii=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,n,i,s,o),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=ci(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=li(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?l=Zn[s-e+4-1]:0===s&&(l=0),n.push(l);const c=1/(a-2),d=-c,u=1+c,f=[d,d,u,d,u,u,d,d,u,u,d,u],p=6,m=6,h=3,_=2,g=1,v=new Float32Array(h*m*p),E=new Float32Array(_*m*p),S=new Float32Array(g*m*p);for(let e=0;e2?0:-1,i=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];v.set(i,h*m*e),E.set(f,_*m*e);const r=[e,e,e,e,e,e];S.set(r,g*m*e)}const M=new C;M.setAttribute("position",new y(v,h)),M.setAttribute("uv",new y(E,_)),M.setAttribute("faceIndex",new y(S,g)),i.push(new o(M,null)),r>4&&r--}return{lodMeshes:i,sizeLods:t,sigmas:n}}(i)),this._blurMaterial=function(e,t,n){const i=new Float32Array($n),a=new r(0,1,0),o=new l({name:"SphericalGaussianBlur",defines:{n:$n,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:a}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1});return o}(i,e,t),this._ggxMaterial=function(e,t,n){const i=new l({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:256,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:di(),fragmentShader:'\n\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform float roughness;\n\t\t\tuniform float mipInt;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\t#define PI 3.14159265359\n\n\t\t\t// Van der Corput radical inverse\n\t\t\tfloat radicalInverse_VdC(uint bits) {\n\t\t\t\tbits = (bits << 16u) | (bits >> 16u);\n\t\t\t\tbits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);\n\t\t\t\tbits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);\n\t\t\t\tbits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);\n\t\t\t\tbits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);\n\t\t\t\treturn float(bits) * 2.3283064365386963e-10; // / 0x100000000\n\t\t\t}\n\n\t\t\t// Hammersley sequence\n\t\t\tvec2 hammersley(uint i, uint N) {\n\t\t\t\treturn vec2(float(i) / float(N), radicalInverse_VdC(i));\n\t\t\t}\n\n\t\t\t// GGX VNDF importance sampling (Eric Heitz 2018)\n\t\t\t// "Sampling the GGX Distribution of Visible Normals"\n\t\t\t// https://jcgt.org/published/0007/04/01/\n\t\t\tvec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {\n\t\t\t\tfloat alpha = roughness * roughness;\n\n\t\t\t\t// Section 4.1: Orthonormal basis\n\t\t\t\tvec3 T1 = vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 T2 = cross(V, T1);\n\n\t\t\t\t// Section 4.2: Parameterization of projected area\n\t\t\t\tfloat r = sqrt(Xi.x);\n\t\t\t\tfloat phi = 2.0 * PI * Xi.y;\n\t\t\t\tfloat t1 = r * cos(phi);\n\t\t\t\tfloat t2 = r * sin(phi);\n\t\t\t\tfloat s = 0.5 * (1.0 + V.z);\n\t\t\t\tt2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;\n\n\t\t\t\t// Section 4.3: Reprojection onto hemisphere\n\t\t\t\tvec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;\n\n\t\t\t\t// Section 3.4: Transform back to ellipsoid configuration\n\t\t\t\treturn normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));\n\t\t\t}\n\n\t\t\tvoid main() {\n\t\t\t\tvec3 N = normalize(vOutputDirection);\n\t\t\t\tvec3 V = N; // Assume view direction equals normal for pre-filtering\n\n\t\t\t\tvec3 prefilteredColor = vec3(0.0);\n\t\t\t\tfloat totalWeight = 0.0;\n\n\t\t\t\t// For very low roughness, just sample the environment directly\n\t\t\t\tif (roughness < 0.001) {\n\t\t\t\t\tgl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Tangent space basis for VNDF sampling\n\t\t\t\tvec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 tangent = normalize(cross(up, N));\n\t\t\t\tvec3 bitangent = cross(N, tangent);\n\n\t\t\t\tfor(uint i = 0u; i < uint(GGX_SAMPLES); i++) {\n\t\t\t\t\tvec2 Xi = hammersley(i, uint(GGX_SAMPLES));\n\n\t\t\t\t\t// For PMREM, V = N, so in tangent space V is always (0, 0, 1)\n\t\t\t\t\tvec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);\n\n\t\t\t\t\t// Transform H back to world space\n\t\t\t\t\tvec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);\n\t\t\t\t\tvec3 L = normalize(2.0 * dot(V, H) * H - V);\n\n\t\t\t\t\tfloat NdotL = max(dot(N, L), 0.0);\n\n\t\t\t\t\tif(NdotL > 0.0) {\n\t\t\t\t\t\t// Sample environment at fixed mip level\n\t\t\t\t\t\t// VNDF importance sampling handles the distribution filtering\n\t\t\t\t\t\tvec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);\n\n\t\t\t\t\t\t// Weight by NdotL for the split-sum approximation\n\t\t\t\t\t\t// VNDF PDF naturally accounts for the visible microfacet distribution\n\t\t\t\t\t\tprefilteredColor += sampleColor * NdotL;\n\t\t\t\t\t\ttotalWeight += NdotL;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (totalWeight > 0.0) {\n\t\t\t\t\tprefilteredColor = prefilteredColor / totalWeight;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4(prefilteredColor, 1.0);\n\t\t\t}\n\t\t',blending:I,depthTest:!1,depthWrite:!1});return i}(i,e,t)}return i}_compileMaterial(e){const t=new o(new C,e);this._renderer.compile(t,Qn)}_sceneToCubeUV(e,t,n,i,r){const a=new L(90,1,t,n),l=[1,-1,1,1,1,1],d=[1,1,1,-1,-1,-1],u=this._renderer,f=u.autoClear,p=u.toneMapping;u.getClearColor(Jn),u.toneMapping=U,u.autoClear=!1;u.state.buffers.depth.getReversed()&&(u.setRenderTarget(i),u.clearDepth(),u.setRenderTarget(null)),null===this._backgroundBox&&(this._backgroundBox=new o(new s,new D({name:"PMREM.Background",side:c,depthWrite:!1,depthTest:!1})));const m=this._backgroundBox,h=m.material;let _=!1;const g=e.background;g?g.isColor&&(h.color.copy(g),e.background=null,_=!0):(h.color.copy(Jn),_=!0);for(let t=0;t<6;t++){const n=t%3;0===n?(a.up.set(0,l[t],0),a.position.set(r.x,r.y,r.z),a.lookAt(r.x+d[t],r.y,r.z)):1===n?(a.up.set(0,0,l[t]),a.position.set(r.x,r.y,r.z),a.lookAt(r.x,r.y+d[t],r.z)):(a.up.set(0,l[t],0),a.position.set(r.x,r.y,r.z),a.lookAt(r.x,r.y,r.z+d[t]));const o=this._cubeSize;si(i,n*o,t>2?o:0,o,o),u.setRenderTarget(i),_&&u.render(m,a),u.render(e,a)}u.toneMapping=p,u.autoClear=f,e.background=g}_textureToCubeUV(e,t){const n=this._renderer,i=e.mapping===R||e.mapping===b;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=ci()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=li());const r=i?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=r;r.uniforms.envMap.value=e;const o=this._cubeSize;si(t,0,0,3*o,2*o),n.setRenderTarget(t),n.render(a,Qn)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const i=this._lodMeshes.length;for(let t=1;tu-4?n-u+4:0),m=4*(this._cubeSize-f);s.envMap.value=e.texture,s.roughness.value=d,s.mipInt.value=u-t,si(r,p,m,3*f,2*f),i.setRenderTarget(r),i.render(o,Qn),s.envMap.value=r.texture,s.roughness.value=0,s.mipInt.value=u-n,si(e,p,m,3*f,2*f),i.setRenderTarget(e),i.render(o,Qn)}_blur(e,t,n,i,r){const a=this._pingPongRenderTarget;this._halfBlur(e,a,t,n,i,"latitudinal",r),this._halfBlur(a,e,n,n,i,"longitudinal",r)}_halfBlur(e,t,n,i,r,a,o){const s=this._renderer,l=this._blurMaterial;"latitudinal"!==a&&"longitudinal"!==a&&w("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[i];c.material=l;const d=l.uniforms,u=this._sizeLods[n]-1,f=isFinite(r)?Math.PI/(2*u):2*Math.PI/39,p=r/f,m=isFinite(r)?1+Math.floor(3*p):$n;m>$n&&E(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const h=[];let _=0;for(let e=0;e<$n;++e){const t=e/p,n=Math.exp(-t*t/2);h.push(n),0===e?_+=n:eg-4?i-g+4:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(c,Qn)}}function oi(e,t,n){const i=new N(e,t,n);return i.texture.mapping=a,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function si(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function li(){return new l({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1})}function ci(){return new l({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1})}function di(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}class ui extends N{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1},i=[n,n,n,n,n,n];this.texture=new B(i),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}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 n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new s(5,5,5),r=new l({name:"CubemapFromEquirect",uniforms:d(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:c,blending:I});r.uniforms.tEquirect.value=t;const a=new o(i,r),u=t.minFilter;t.minFilter===G&&(t.minFilter=O);return new H(1,10,this).update(e,a),t.minFilter=u,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,n=!0,i=!0){const r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,i);e.setRenderTarget(r)}}function fi(e){let t=new WeakMap,n=new WeakMap,i=null;function r(e,t){return t===V?e.mapping=R:t===W&&(e.mapping=b),e}function a(e){const n=e.target;n.removeEventListener("dispose",a);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}function o(e){const t=e.target;t.removeEventListener("dispose",o);const i=n.get(t);void 0!==i&&(n.delete(t),i.dispose())}return{get:function(s,l=!1){return null==s?null:l?function(t){if(t&&t.isTexture){const r=t.mapping,a=r===V||r===W,s=r===R||r===b;if(a||s){let r=n.get(t);const l=void 0!==r?r.texture.pmremVersion:0;if(t.isRenderTargetTexture&&t.pmremVersion!==l)return null===i&&(i=new ai(e)),r=a?i.fromEquirectangular(t,r):i.fromCubemap(t,r),r.texture.pmremVersion=t.pmremVersion,n.set(t,r),r.texture;if(void 0!==r)return r.texture;{const l=t.image;return a&&l&&l.height>0||s&&l&&function(e){let t=0;const n=6;for(let i=0;i0){const o=new ui(i.height);return o.fromEquirectangularTexture(e,n),t.set(n,o),n.addEventListener("dispose",a),r(o.texture,n.mapping)}return null}}}return n}(s)},dispose:function(){t=new WeakMap,n=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function pi(e){const t={};function n(n){if(void 0!==t[n])return t[n];const i=e.getExtension(n);return t[n]=i,i}return{has:function(e){return null!==n(e)},init:function(){n("EXT_color_buffer_float"),n("WEBGL_clip_cull_distance"),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float"),n("WEBGL_multisampled_render_to_texture"),n("WEBGL_render_shared_exponent")},get:function(e){const t=n(e);return null===t&&z("WebGLRenderer: "+e+" extension not supported."),t}}}function mi(e,t,n,i){const r={},a=new WeakMap;function o(e){const s=e.target;null!==s.index&&t.remove(s.index);for(const e in s.attributes)t.remove(s.attributes[e]);s.removeEventListener("dispose",o),delete r[s.id];const l=a.get(s);l&&(t.remove(l),a.delete(s)),i.releaseStatesOfGeometry(s),!0===s.isInstancedBufferGeometry&&delete s._maxInstanceCount,n.memory.geometries--}function s(e){const n=[],i=e.index,r=e.attributes.position;let o=0;if(void 0===r)return;if(null!==i){const e=i.array;o=i.version;for(let t=0,i=e.length;t=65535?k:X)(n,1);s.version=o;const l=a.get(e);l&&t.remove(l),a.set(e,s)}return{get:function(e,t){return!0===r[t.id]||(t.addEventListener("dispose",o),r[t.id]=!0,n.memory.geometries++),t},update:function(n){const i=n.attributes;for(const n in i)t.update(i[n],e.ARRAY_BUFFER)},getWireframeAttribute:function(e){const t=a.get(e);if(t){const n=e.index;null!==n&&t.versionn.maxTextureSize&&(M=Math.ceil(S/n.maxTextureSize),S=n.maxTextureSize);const x=new Float32Array(S*M*4*u),A=new K(x,S,M,u);A.type=T,A.needsUpdate=!0;const R=4*E;for(let C=0;C\n\t\t\t#include \n\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t\t#ifdef LINEAR_TONE_MAPPING\n\t\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( AGX_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CUSTOM_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef SRGB_TRANSFER\n\t\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\t\t\t\t#endif\n\t\t\t}",depthTest:!1,depthWrite:!1}),d=new o(l,c),u=new P(-1,1,1,-1,0,1);let f,h=null,_=null,g=!1,v=null,E=[],M=!1;this.setSize=function(e,t){a.setSize(e,t),s.setSize(e,t);for(let n=0;n0&&!0===E[0].isRenderPass;const t=a.width,n=a.height;for(let e=0;e0)return e;const r=t*n;let a=bi[r];if(void 0===a&&(a=new Float32Array(r),bi[r]=a),0!==t){i.toArray(a,0);for(let i=1,r=0;i!==t;++i)r+=n,e[i].toArray(a,r)}return a}function wi(e,t){if(e.length!==t.length)return!1;for(let n=0,i=e.length;n0&&(this.seq=i.concat(r))}setValue(e,t,n,i){const r=this.map[t];void 0!==r&&r.setValue(e,n,i)}setOptional(e,t,n){const i=t[n];void 0!==i&&this.setValue(e,n,i)}static upload(e,t,n,i){for(let r=0,a=t.length;r!==a;++r){const a=t[r],o=n[a.id];!1!==o.needsUpdate&&a.setValue(e,o.value,i)}}static seqWithValue(e,t){const n=[];for(let i=0,r=e.length;i!==r;++i){const r=e[i];r.id in t&&n.push(r)}return n}}function br(e,t,n){const i=e.createShader(t);return e.shaderSource(i,n),e.compileShader(i),i}let Cr=0;const Pr=new e;function Lr(e,t,n){const i=e.getShaderParameter(t,e.COMPILE_STATUS),r=(e.getShaderInfoLog(t)||"").trim();if(i&&""===r)return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const i=parseInt(a[1]);return n.toUpperCase()+"\n\n"+r+"\n\n"+function(e,t){const n=e.split("\n"),i=[],r=Math.max(t-6,0),a=Math.min(t+6,n.length);for(let e=r;e":" "} ${r}: ${n[e]}`)}return i.join("\n")}(e.getShaderSource(t),i)}return r}function Ur(e,t){const n=function(e){p._getMatrix(Pr,p.workingColorSpace,e);const t=`mat3( ${Pr.elements.map(e=>e.toFixed(4))} )`;switch(p.getTransfer(e)){case me:return[t,"LinearTransferOETF"];case m:return[t,"sRGBTransferOETF"];default:return E("WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(t);return[`vec4 ${e}( vec4 value ) {`,`\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,"}"].join("\n")}const Dr={[ne]:"Linear",[te]:"Reinhard",[ee]:"Cineon",[J]:"ACESFilmic",[Q]:"AgX",[$]:"Neutral",[Z]:"Custom"};function wr(e,t){const n=Dr[t];return void 0===n?(E("WebGLProgram: Unsupported toneMapping:",t),"vec3 "+e+"( vec3 color ) { return LinearToneMapping( color ); }"):"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}const Ir=new r;function Nr(){p.getLuminanceCoefficients(Ir);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${Ir.x.toFixed(4)}, ${Ir.y.toFixed(4)}, ${Ir.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function yr(e){return""!==e}function Fr(e,t){const n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function Or(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const Br=/^[ \t]*#include +<([\w\d./]+)>/gm;function Gr(e){return e.replace(Br,Vr)}const Hr=new Map;function Vr(e,t){let n=Gn[t];if(void 0===n){const e=Hr.get(t);if(void 0===e)throw new Error("Can not resolve #include <"+t+">");n=Gn[e],E('WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e)}return Gr(n)}const Wr=/#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 zr(e){return e.replace(Wr,kr)}function kr(e,t,n,i){let r="";for(let e=parseInt(t);e0&&(_+="\n"),g=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m].filter(yr).join("\n"),g.length>0&&(g+="\n")):(_=[Xr(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(yr).join("\n"),g=[Xr(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+d:"",n.envMap?"#define "+u:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas||n.batchingColor?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==U?"#define TONE_MAPPING":"",n.toneMapping!==U?Gn.tonemapping_pars_fragment:"",n.toneMapping!==U?wr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",Gn.colorspace_pars_fragment,Ur("linearToOutputTexel",n.outputColorSpace),Nr(),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(yr).join("\n")),o=Gr(o),o=Fr(o,n),o=Or(o,n),s=Gr(s),s=Fr(s,n),s=Or(s,n),o=zr(o),s=zr(s),!0!==n.isRawShaderMaterial&&(v="#version 300 es\n",_=[p,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,g=["#define varying in",n.glslVersion===le?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===le?"":"#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("\n")+"\n"+g);const S=v+_+o,M=v+g+s,T=br(r,r.VERTEX_SHADER,S),x=br(r,r.FRAGMENT_SHADER,M);function A(t){if(e.debug.checkShaderErrors){const n=r.getProgramInfoLog(h)||"",i=r.getShaderInfoLog(T)||"",a=r.getShaderInfoLog(x)||"",o=n.trim(),s=i.trim(),l=a.trim();let c=!0,d=!0;if(!1===r.getProgramParameter(h,r.LINK_STATUS))if(c=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(r,h,T,x);else{const e=Lr(r,T,"vertex"),n=Lr(r,x,"fragment");w("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(h,r.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+o+"\n"+e+"\n"+n)}else""!==o?E("WebGLProgram: Program Info Log:",o):""!==s&&""!==l||(d=!1);d&&(t.diagnostics={runnable:c,programLog:o,vertexShader:{log:s,prefix:_},fragmentShader:{log:l,prefix:g}})}r.deleteShader(T),r.deleteShader(x),R=new Rr(r,h),b=function(e,t){const n={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;r0,Q=r.clearcoat>0,J=r.dispersion>0,ee=r.iridescence>0,te=r.sheen>0,ne=r.transmission>0,ie=$&&!!r.anisotropyMap,re=Q&&!!r.clearcoatMap,ae=Q&&!!r.clearcoatNormalMap,oe=Q&&!!r.clearcoatRoughnessMap,se=ee&&!!r.iridescenceMap,le=ee&&!!r.iridescenceThicknessMap,ce=te&&!!r.sheenColorMap,de=te&&!!r.sheenRoughnessMap,ue=!!r.specularMap,fe=!!r.specularColorMap,pe=!!r.specularIntensityMap,me=ne&&!!r.transmissionMap,he=ne&&!!r.thicknessMap,Se=!!r.gradientMap,Me=!!r.alphaMap,Te=r.alphaTest>0,xe=!!r.alphaHash,Ae=!!r.extensions;let Re=U;r.toneMapped&&(null!==F&&!0!==F.isXRRenderTarget||(Re=e.toneMapping));const be={shaderID:C,shaderType:r.type,shaderName:r.name,vertexShader:D,fragmentShader:w,defines:r.defines,customVertexShaderID:I,customFragmentShaderID:N,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:_,batching:G,batchingColor:G&&null!==S._colorsTexture,instancing:B,instancingColor:B&&null!==S.instanceColor,instancingMorph:B&&null!==S.morphTexture,outputColorSpace:null===F?e.outputColorSpace:!0===F.isXRRenderTarget?F.texture.colorSpace:p.workingColorSpace,alphaToCoverage:!!r.alphaToCoverage,map:H,matcap:V,envMap:W,envMapMode:W&&R.mapping,envMapCubeUVHeight:b,aoMap:z,lightMap:k,bumpMap:X,normalMap:Y,displacementMap:K,emissiveMap:q,normalMapObjectSpace:Y&&r.normalMapType===Ee,normalMapTangentSpace:Y&&r.normalMapType===ve,metalnessMap:j,roughnessMap:Z,anisotropy:$,anisotropyMap:ie,clearcoat:Q,clearcoatMap:re,clearcoatNormalMap:ae,clearcoatRoughnessMap:oe,dispersion:J,iridescence:ee,iridescenceMap:se,iridescenceThicknessMap:le,sheen:te,sheenColorMap:ce,sheenRoughnessMap:de,specularMap:ue,specularColorMap:fe,specularIntensityMap:pe,transmission:ne,transmissionMap:me,thicknessMap:he,gradientMap:Se,opaque:!1===r.transparent&&r.blending===ge&&!1===r.alphaToCoverage,alphaMap:Me,alphaTest:Te,alphaHash:xe,combine:r.combine,mapUv:H&&v(r.map.channel),aoMapUv:z&&v(r.aoMap.channel),lightMapUv:k&&v(r.lightMap.channel),bumpMapUv:X&&v(r.bumpMap.channel),normalMapUv:Y&&v(r.normalMap.channel),displacementMapUv:K&&v(r.displacementMap.channel),emissiveMapUv:q&&v(r.emissiveMap.channel),metalnessMapUv:j&&v(r.metalnessMap.channel),roughnessMapUv:Z&&v(r.roughnessMap.channel),anisotropyMapUv:ie&&v(r.anisotropyMap.channel),clearcoatMapUv:re&&v(r.clearcoatMap.channel),clearcoatNormalMapUv:ae&&v(r.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:oe&&v(r.clearcoatRoughnessMap.channel),iridescenceMapUv:se&&v(r.iridescenceMap.channel),iridescenceThicknessMapUv:le&&v(r.iridescenceThicknessMap.channel),sheenColorMapUv:ce&&v(r.sheenColorMap.channel),sheenRoughnessMapUv:de&&v(r.sheenRoughnessMap.channel),specularMapUv:ue&&v(r.specularMap.channel),specularColorMapUv:fe&&v(r.specularColorMap.channel),specularIntensityMapUv:pe&&v(r.specularIntensityMap.channel),transmissionMapUv:me&&v(r.transmissionMap.channel),thicknessMapUv:he&&v(r.thicknessMap.channel),alphaMapUv:Me&&v(r.alphaMap.channel),vertexTangents:!!T.attributes.tangent&&(Y||$),vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors&&!!T.attributes.color&&4===T.attributes.color.itemSize,pointsUvs:!0===S.isPoints&&!!T.attributes.uv&&(H||Me),fog:!!M,useFog:!0===r.fog,fogExp2:!!M&&M.isFogExp2,flatShading:!1===r.wireframe&&(!0===r.flatShading||void 0===T.attributes.normal&&!1===Y&&(r.isMeshLambertMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.isMeshPhysicalMaterial)),sizeAttenuation:!0===r.sizeAttenuation,logarithmicDepthBuffer:h,reversedDepthBuffer:O,skinning:!0===S.isSkinnedMesh,morphTargets:void 0!==T.morphAttributes.position,morphNormals:void 0!==T.morphAttributes.normal,morphColors:void 0!==T.morphAttributes.color,morphTargetsCount:L,morphTextureStride:y,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numSpotLightMaps:s.spotLightMap.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numSpotLightShadowsWithMaps:s.numSpotLightShadowsWithMaps,numLightProbes:s.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:e.shadowMap.enabled&&u.length>0,shadowMapType:e.shadowMap.type,toneMapping:Re,decodeVideoTexture:H&&!0===r.map.isVideoTexture&&p.getTransfer(r.map.colorSpace)===m,decodeVideoTextureEmissive:q&&!0===r.emissiveMap.isVideoTexture&&p.getTransfer(r.emissiveMap.colorSpace)===m,premultipliedAlpha:r.premultipliedAlpha,doubleSided:r.side===_e,flipSided:r.side===c,useDepthPacking:r.depthPacking>=0,depthPacking:r.depthPacking||0,index0AttributeName:r.index0AttributeName,extensionClipCullDistance:Ae&&!0===r.extensions.clipCullDistance&&n.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ae&&!0===r.extensions.multiDraw||G)&&n.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:n.has("KHR_parallel_shader_compile"),customProgramCacheKey:r.customProgramCacheKey()};return be.vertexUv1s=d.has(1),be.vertexUv2s=d.has(2),be.vertexUv3s=d.has(3),d.clear(),be},getProgramCacheKey:function(t){const n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),void 0!==t.defines)for(const e in t.defines)n.push(e),n.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(!function(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}(n,t),function(e,t){s.disableAll(),t.instancing&&s.enable(0);t.instancingColor&&s.enable(1);t.instancingMorph&&s.enable(2);t.matcap&&s.enable(3);t.envMap&&s.enable(4);t.normalMapObjectSpace&&s.enable(5);t.normalMapTangentSpace&&s.enable(6);t.clearcoat&&s.enable(7);t.iridescence&&s.enable(8);t.alphaTest&&s.enable(9);t.vertexColors&&s.enable(10);t.vertexAlphas&&s.enable(11);t.vertexUv1s&&s.enable(12);t.vertexUv2s&&s.enable(13);t.vertexUv3s&&s.enable(14);t.vertexTangents&&s.enable(15);t.anisotropy&&s.enable(16);t.alphaHash&&s.enable(17);t.batching&&s.enable(18);t.dispersion&&s.enable(19);t.batchingColor&&s.enable(20);t.gradientMap&&s.enable(21);e.push(s.mask),s.disableAll(),t.fog&&s.enable(0);t.useFog&&s.enable(1);t.flatShading&&s.enable(2);t.logarithmicDepthBuffer&&s.enable(3);t.reversedDepthBuffer&&s.enable(4);t.skinning&&s.enable(5);t.morphTargets&&s.enable(6);t.morphNormals&&s.enable(7);t.morphColors&&s.enable(8);t.premultipliedAlpha&&s.enable(9);t.shadowMapEnabled&&s.enable(10);t.doubleSided&&s.enable(11);t.flipSided&&s.enable(12);t.useDepthPacking&&s.enable(13);t.dithering&&s.enable(14);t.transmission&&s.enable(15);t.sheen&&s.enable(16);t.opaque&&s.enable(17);t.pointsUvs&&s.enable(18);t.decodeVideoTexture&&s.enable(19);t.decodeVideoTextureEmissive&&s.enable(20);t.alphaToCoverage&&s.enable(21);e.push(s.mask)}(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()},getUniforms:function(e){const t=g[e.type];let n;if(t){const e=Vn[t];n=he.clone(e.uniforms)}else n=e.uniforms;return n},acquireProgram:function(t,n){let i=f.get(n);return void 0!==i?++i.usedTimes:(i=new Zr(e,n,t,r),u.push(i),f.set(n,i)),i},releaseProgram:function(e){if(0===--e.usedTimes){const t=u.indexOf(e);u[t]=u[u.length-1],u.pop(),f.delete(e.cacheKey),e.destroy()}},releaseShaderCache:function(e){l.remove(e)},programs:u,dispose:function(){l.dispose()}}}function ta(){let e=new WeakMap;return{has:function(t){return e.has(t)},get:function(t){let n=e.get(t);return void 0===n&&(n={},e.set(t,n)),n},remove:function(t){e.delete(t)},update:function(t,n,i){e.get(t)[n]=i},dispose:function(){e=new WeakMap}}}function na(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.materialVariant!==t.materialVariant?e.materialVariant-t.materialVariant:e.z!==t.z?e.z-t.z:e.id-t.id}function ia(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function ra(){const e=[];let t=0;const n=[],i=[],r=[];function a(e){let t=0;return e.isInstancedMesh&&(t+=2),e.isSkinnedMesh&&(t+=1),t}function o(n,i,r,o,s,l){let c=e[t];return void 0===c?(c={id:n.id,object:n,geometry:i,material:r,materialVariant:a(n),groupOrder:o,renderOrder:n.renderOrder,z:s,group:l},e[t]=c):(c.id=n.id,c.object=n,c.geometry=i,c.material=r,c.materialVariant=a(n),c.groupOrder=o,c.renderOrder=n.renderOrder,c.z=s,c.group=l),t++,c}return{opaque:n,transmissive:i,transparent:r,init:function(){t=0,n.length=0,i.length=0,r.length=0},push:function(e,t,a,s,l,c){const d=o(e,t,a,s,l,c);a.transmission>0?i.push(d):!0===a.transparent?r.push(d):n.push(d)},unshift:function(e,t,a,s,l,c){const d=o(e,t,a,s,l,c);a.transmission>0?i.unshift(d):!0===a.transparent?r.unshift(d):n.unshift(d)},finish:function(){for(let n=t,i=e.length;n1&&n.sort(e||na),i.length>1&&i.sort(t||ia),r.length>1&&r.sort(t||ia)}}}function aa(){let e=new WeakMap;return{get:function(t,n){const i=e.get(t);let r;return void 0===i?(r=new ra,e.set(t,[r])):n>=i.length?(r=new ra,i.push(r)):r=i[n],r},dispose:function(){e=new WeakMap}}}function oa(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let i;switch(t.type){case"DirectionalLight":i={direction:new r,color:new n};break;case"SpotLight":i={position:new r,direction:new r,color:new n,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new r,color:new n,distance:0,decay:0};break;case"HemisphereLight":i={direction:new r,skyColor:new n,groundColor:new n};break;case"RectAreaLight":i={color:new n,position:new r,halfWidth:new r,halfHeight:new r}}return e[t.id]=i,i}}}let sa=0;function la(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function ca(e){const n=new oa,i=function(){const e={};return{get:function(n){if(void 0!==e[n.id])return e[n.id];let i;switch(n.type){case"DirectionalLight":case"SpotLight":i={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t};break;case"PointLight":i={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t,shadowCameraNear:1,shadowCameraFar:1e3}}return e[n.id]=i,i}}}(),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-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,numLightProbes:0};for(let e=0;e<9;e++)a.probe.push(new r);const o=new r,s=new f,l=new f;return{setup:function(t){let r=0,o=0,s=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let l=0,c=0,d=0,u=0,f=0,p=0,m=0,h=0,_=0,g=0,v=0;t.sort(la);for(let e=0,E=t.length;e0&&(!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=Hn.LTC_FLOAT_1,a.rectAreaLTC2=Hn.LTC_FLOAT_2):(a.rectAreaLTC1=Hn.LTC_HALF_1,a.rectAreaLTC2=Hn.LTC_HALF_2)),a.ambient[0]=r,a.ambient[1]=o,a.ambient[2]=s;const E=a.hash;E.directionalLength===l&&E.pointLength===c&&E.spotLength===d&&E.rectAreaLength===u&&E.hemiLength===f&&E.numDirectionalShadows===p&&E.numPointShadows===m&&E.numSpotShadows===h&&E.numSpotMaps===_&&E.numLightProbes===v||(a.directional.length=l,a.spot.length=d,a.rectArea.length=u,a.point.length=c,a.hemi.length=f,a.directionalShadow.length=p,a.directionalShadowMap.length=p,a.pointShadow.length=m,a.pointShadowMap.length=m,a.spotShadow.length=h,a.spotShadowMap.length=h,a.directionalShadowMatrix.length=p,a.pointShadowMatrix.length=m,a.spotLightMatrix.length=h+_-g,a.spotLightMap.length=_,a.numSpotLightShadowsWithMaps=g,a.numLightProbes=v,E.directionalLength=l,E.pointLength=c,E.spotLength=d,E.rectAreaLength=u,E.hemiLength=f,E.numDirectionalShadows=p,E.numPointShadows=m,E.numSpotShadows=h,E.numSpotMaps=_,E.numLightProbes=v,a.version=sa++)},setupView:function(e,t){let n=0,i=0,r=0,c=0,d=0;const u=t.matrixWorldInverse;for(let t=0,f=e.length;t=r.length?(a=new da(e),r.push(a)):a=r[i],a},dispose:function(){t=new WeakMap}}}const fa=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],pa=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],ma=new f,ha=new r,_a=new r;function ga(e,n,i){let r=new Te;const a=new t,s=new t,d=new Y,u=new xe,f=new Ae,p={},m=i.maxTextureSize,h={[_]:c,[c]:_,[_e]:_e},g=new l({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new t},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );\n\tgl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );\n}"}),v=g.clone();v.defines.HORIZONTAL_PASS=1;const M=new C;M.setAttribute("position",new y(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const x=new o(M,g),A=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=de;let R=this.type;function b(t,i){const r=n.update(x);g.defines.VSM_SAMPLES!==t.blurSamples&&(g.defines.VSM_SAMPLES=t.blurSamples,v.defines.VSM_SAMPLES=t.blurSamples,g.needsUpdate=!0,v.needsUpdate=!0),null===t.mapPass&&(t.mapPass=new N(a.x,a.y,{format:Me,type:S})),g.uniforms.shadow_pass.value=t.map.depthTexture,g.uniforms.resolution.value=t.mapSize,g.uniforms.radius.value=t.radius,e.setRenderTarget(t.mapPass),e.clear(),e.renderBufferDirect(i,null,r,g,x,null),v.uniforms.shadow_pass.value=t.mapPass.texture,v.uniforms.resolution.value=t.mapSize,v.uniforms.radius.value=t.radius,e.setRenderTarget(t.map),e.clear(),e.renderBufferDirect(i,null,r,v,x,null)}function P(t,n,i,r){let a=null;const o=!0===i.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==o)a=o;else if(a=!0===i.isPointLight?f:u,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0||!0===n.alphaToCoverage){const e=a.uuid,t=n.uuid;let i=p[e];void 0===i&&(i={},p[e]=i);let r=i[t];void 0===r&&(r=a.clone(),i[t]=r,n.addEventListener("dispose",U)),a=r}if(a.visible=n.visible,a.wireframe=n.wireframe,a.side=r===ce?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:h[n.side],a.alphaMap=n.alphaMap,a.alphaTest=!0===n.alphaToCoverage?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial){e.properties.get(a).light=i}return a}function L(t,i,a,o,s){if(!1===t.visible)return;if(t.layers.test(i.layers)&&(t.isMesh||t.isLine||t.isPoints)&&(t.castShadow||t.receiveShadow&&s===ce)&&(!t.frustumCulled||r.intersectsObject(t))){t.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,t.matrixWorld);const r=n.update(t),l=t.material;if(Array.isArray(l)){const n=r.groups;for(let c=0,d=n.length;ce.needsUpdate=!0):e.material.needsUpdate=!0)});for(let o=0,l=t.length;om||a.y>m)&&(a.x>m&&(s.x=Math.floor(m/p.x),a.x=s.x*p.x,c.mapSize.x=s.x),a.y>m&&(s.y=Math.floor(m/p.y),a.y=s.y*p.y,c.mapSize.y=s.y));const h=e.state.buffers.depth.getReversed();if(c.camera._reversedDepth=h,null===c.map||!0===f){if(null!==c.map&&(null!==c.map.depthTexture&&(c.map.depthTexture.dispose(),c.map.depthTexture=null),c.map.dispose()),this.type===ce){if(l.isPointLight){E("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}c.map=new N(a.x,a.y,{format:Me,type:S,minFilter:O,magFilter:O,generateMipmaps:!1}),c.map.texture.name=l.name+".shadowMap",c.map.depthTexture=new oe(a.x,a.y,T),c.map.depthTexture.name=l.name+".shadowMapDepth",c.map.depthTexture.format=be,c.map.depthTexture.compareFunction=null,c.map.depthTexture.minFilter=Ce,c.map.depthTexture.magFilter=Ce}else l.isPointLight?(c.map=new ui(a.x),c.map.depthTexture=new Pe(a.x,Le)):(c.map=new N(a.x,a.y),c.map.depthTexture=new oe(a.x,a.y,Le)),c.map.depthTexture.name=l.name+".shadowMap",c.map.depthTexture.format=be,this.type===de?(c.map.depthTexture.compareFunction=h?re:ae,c.map.depthTexture.minFilter=O,c.map.depthTexture.magFilter=O):(c.map.depthTexture.compareFunction=null,c.map.depthTexture.minFilter=Ce,c.map.depthTexture.magFilter=Ce);c.camera.updateProjectionMatrix()}const _=c.map.isWebGLCubeRenderTarget?6:1;for(let t=0;t<_;t++){if(c.map.isWebGLCubeRenderTarget)e.setRenderTarget(c.map,t),e.clear();else{0===t&&(e.setRenderTarget(c.map),e.clear());const n=c.getViewport(t);d.set(s.x*n.x,s.y*n.y,s.x*n.z,s.y*n.w),u.viewport(d)}if(l.isPointLight){const e=c.camera,n=c.matrix,i=l.distance||e.far;i!==e.far&&(e.far=i,e.updateProjectionMatrix()),ha.setFromMatrixPosition(l.matrixWorld),e.position.copy(ha),_a.copy(e.position),_a.add(fa[t]),e.up.copy(pa[t]),e.lookAt(_a),e.updateMatrixWorld(),n.makeTranslation(-ha.x,-ha.y,-ha.z),ma.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),c._frustum.setFromProjectionMatrix(ma,e.coordinateSystem,e.reversedDepth)}else c.updateMatrices(l);r=c.getFrustum(),L(n,i,c.camera,l,this.type)}!0!==c.isPointLightShadow&&this.type===ce&&b(c,i),c.needsUpdate=!1}R=this.type,A.needsUpdate=!1,e.setRenderTarget(o,l,c)}}function va(e,t){const i=new function(){let t=!1;const n=new Y;let i=null;const r=new Y(0,0,0,0);return{setMask:function(n){i===n||t||(e.colorMask(n,n,n,n),i=n)},setLocked:function(e){t=e},setClear:function(t,i,a,o,s){!0===s&&(t*=o,i*=o,a*=o),n.set(t,i,a,o),!1===r.equals(n)&&(e.clearColor(t,i,a,o),r.copy(n))},reset:function(){t=!1,i=null,r.set(-1,0,0,0)}}},r=new function(){let n=!1,i=!1,r=null,a=null,o=null;return{setReversed:function(e){if(i!==e){const n=t.get("EXT_clip_control");e?n.clipControlEXT(n.LOWER_LEFT_EXT,n.ZERO_TO_ONE_EXT):n.clipControlEXT(n.LOWER_LEFT_EXT,n.NEGATIVE_ONE_TO_ONE_EXT),i=e;const r=o;o=null,this.setClear(r)}},getReversed:function(){return i},setTest:function(t){t?k(e.DEPTH_TEST):X(e.DEPTH_TEST)},setMask:function(t){r===t||n||(e.depthMask(t),r=t)},setFunc:function(t){if(i&&(t=ct[t]),a!==t){switch(t){case tt:e.depthFunc(e.NEVER);break;case et:e.depthFunc(e.ALWAYS);break;case Je:e.depthFunc(e.LESS);break;case Ue:e.depthFunc(e.LEQUAL);break;case Qe:e.depthFunc(e.EQUAL);break;case $e:e.depthFunc(e.GEQUAL);break;case Ze:e.depthFunc(e.GREATER);break;case je:e.depthFunc(e.NOTEQUAL);break;default:e.depthFunc(e.LEQUAL)}a=t}},setLocked:function(e){n=e},setClear:function(t){o!==t&&(o=t,i&&(t=1-t),e.clearDepth(t))},reset:function(){n=!1,r=null,a=null,o=null,i=!1}}},a=new function(){let t=!1,n=null,i=null,r=null,a=null,o=null,s=null,l=null,c=null;return{setTest:function(n){t||(n?k(e.STENCIL_TEST):X(e.STENCIL_TEST))},setMask:function(i){n===i||t||(e.stencilMask(i),n=i)},setFunc:function(t,n,o){i===t&&r===n&&a===o||(e.stencilFunc(t,n,o),i=t,r=n,a=o)},setOp:function(t,n,i){o===t&&s===n&&l===i||(e.stencilOp(t,n,i),o=t,s=n,l=i)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,n=null,i=null,r=null,a=null,o=null,s=null,l=null,c=null}}},o=new WeakMap,s=new WeakMap;let l={},d={},u=new WeakMap,f=[],p=null,m=!1,h=null,_=null,g=null,v=null,E=null,S=null,M=null,T=new n(0,0,0),x=0,A=!1,R=null,b=null,C=null,P=null,L=null;const U=e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let D=!1,N=0;const y=e.getParameter(e.VERSION);-1!==y.indexOf("WebGL")?(N=parseFloat(/^WebGL (\d)/.exec(y)[1]),D=N>=1):-1!==y.indexOf("OpenGL ES")&&(N=parseFloat(/^OpenGL ES (\d)/.exec(y)[1]),D=N>=2);let F=null,O={};const B=e.getParameter(e.SCISSOR_BOX),G=e.getParameter(e.VIEWPORT),H=(new Y).fromArray(B),V=(new Y).fromArray(G);function W(t,n,i,r){const a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;on||r.height>n)&&(i=n/Math.max(r.width,r.height)),i<1){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame){const n=Math.floor(i*r.width),a=Math.floor(i*r.height);void 0===f&&(f=g(n,a));const o=t?g(n,a):f;o.width=n,o.height=a;return o.getContext("2d").drawImage(e,0,0,n,a),E("WebGLRenderer: Texture has been resized from ("+r.width+"x"+r.height+") to ("+n+"x"+a+")."),o}return"data"in e&&E("WebGLRenderer: Image in DataTexture is too big ("+r.width+"x"+r.height+")."),e}return e}function S(e){return e.generateMipmaps}function A(t){e.generateMipmap(t)}function R(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function b(t,i,r,a,o=!1){if(null!==t){if(void 0!==e[t])return e[t];E("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+t+"'")}let s=i;if(i===e.RED&&(r===e.FLOAT&&(s=e.R32F),r===e.HALF_FLOAT&&(s=e.R16F),r===e.UNSIGNED_BYTE&&(s=e.R8)),i===e.RED_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.R8UI),r===e.UNSIGNED_SHORT&&(s=e.R16UI),r===e.UNSIGNED_INT&&(s=e.R32UI),r===e.BYTE&&(s=e.R8I),r===e.SHORT&&(s=e.R16I),r===e.INT&&(s=e.R32I)),i===e.RG&&(r===e.FLOAT&&(s=e.RG32F),r===e.HALF_FLOAT&&(s=e.RG16F),r===e.UNSIGNED_BYTE&&(s=e.RG8)),i===e.RG_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RG8UI),r===e.UNSIGNED_SHORT&&(s=e.RG16UI),r===e.UNSIGNED_INT&&(s=e.RG32UI),r===e.BYTE&&(s=e.RG8I),r===e.SHORT&&(s=e.RG16I),r===e.INT&&(s=e.RG32I)),i===e.RGB_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RGB8UI),r===e.UNSIGNED_SHORT&&(s=e.RGB16UI),r===e.UNSIGNED_INT&&(s=e.RGB32UI),r===e.BYTE&&(s=e.RGB8I),r===e.SHORT&&(s=e.RGB16I),r===e.INT&&(s=e.RGB32I)),i===e.RGBA_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RGBA8UI),r===e.UNSIGNED_SHORT&&(s=e.RGBA16UI),r===e.UNSIGNED_INT&&(s=e.RGBA32UI),r===e.BYTE&&(s=e.RGBA8I),r===e.SHORT&&(s=e.RGBA16I),r===e.INT&&(s=e.RGBA32I)),i===e.RGB&&(r===e.UNSIGNED_INT_5_9_9_9_REV&&(s=e.RGB9_E5),r===e.UNSIGNED_INT_10F_11F_11F_REV&&(s=e.R11F_G11F_B10F)),i===e.RGBA){const t=o?me:p.getTransfer(a);r===e.FLOAT&&(s=e.RGBA32F),r===e.HALF_FLOAT&&(s=e.RGBA16F),r===e.UNSIGNED_BYTE&&(s=t===m?e.SRGB8_ALPHA8:e.RGBA8),r===e.UNSIGNED_SHORT_4_4_4_4&&(s=e.RGBA4),r===e.UNSIGNED_SHORT_5_5_5_1&&(s=e.RGB5_A1)}return s!==e.R16F&&s!==e.R32F&&s!==e.RG16F&&s!==e.RG32F&&s!==e.RGBA16F&&s!==e.RGBA32F||n.get("EXT_color_buffer_float"),s}function C(t,n){let i;return t?null===n||n===Le||n===Ct?i=e.DEPTH24_STENCIL8:n===T?i=e.DEPTH32F_STENCIL8:n===Pt&&(i=e.DEPTH24_STENCIL8,E("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||n===Le||n===Ct?i=e.DEPTH_COMPONENT24:n===T?i=e.DEPTH_COMPONENT32F:n===Pt&&(i=e.DEPTH_COMPONENT16),i}function P(e,t){return!0===S(e)||e.isFramebufferTexture&&e.minFilter!==Ce&&e.minFilter!==O?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function L(e){const t=e.target;t.removeEventListener("dispose",L),function(e){const t=r.get(e);if(void 0===t.__webglInit)return;const n=e.source,i=h.get(n);if(i){const r=i[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&D(e),0===Object.keys(i).length&&h.delete(n)}r.remove(e)}(t),t.isVideoTexture&&u.delete(t)}function U(t){const n=t.target;n.removeEventListener("dispose",U),function(t){const n=r.get(t);t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture));if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let i=0;i0&&a.__version!==t.version){const e=t.image;if(null===e)E("WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void k(a,t,n);E("WebGLRenderer: Texture marked for update but image is incomplete")}}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);i.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+n)}const y={[mt]:e.REPEAT,[pt]:e.CLAMP_TO_EDGE,[ft]:e.MIRRORED_REPEAT},B={[Ce]:e.NEAREST,[gt]:e.NEAREST_MIPMAP_NEAREST,[_t]:e.NEAREST_MIPMAP_LINEAR,[O]:e.LINEAR,[ht]:e.LINEAR_MIPMAP_NEAREST,[G]:e.LINEAR_MIPMAP_LINEAR},H={[xt]:e.NEVER,[Tt]:e.ALWAYS,[Mt]:e.LESS,[ae]:e.LEQUAL,[St]:e.EQUAL,[re]:e.GEQUAL,[Et]:e.GREATER,[vt]:e.NOTEQUAL};function V(t,i){if(i.type!==T||!1!==n.has("OES_texture_float_linear")||i.magFilter!==O&&i.magFilter!==ht&&i.magFilter!==_t&&i.magFilter!==G&&i.minFilter!==O&&i.minFilter!==ht&&i.minFilter!==_t&&i.minFilter!==G||E("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(t,e.TEXTURE_WRAP_S,y[i.wrapS]),e.texParameteri(t,e.TEXTURE_WRAP_T,y[i.wrapT]),t!==e.TEXTURE_3D&&t!==e.TEXTURE_2D_ARRAY||e.texParameteri(t,e.TEXTURE_WRAP_R,y[i.wrapR]),e.texParameteri(t,e.TEXTURE_MAG_FILTER,B[i.magFilter]),e.texParameteri(t,e.TEXTURE_MIN_FILTER,B[i.minFilter]),i.compareFunction&&(e.texParameteri(t,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(t,e.TEXTURE_COMPARE_FUNC,H[i.compareFunction])),!0===n.has("EXT_texture_filter_anisotropic")){if(i.magFilter===Ce)return;if(i.minFilter!==_t&&i.minFilter!==G)return;if(i.type===T&&!1===n.has("OES_texture_float_linear"))return;if(i.anisotropy>1||r.get(i).__currentAnisotropy){const o=n.get("EXT_texture_filter_anisotropic");e.texParameterf(t,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(i.anisotropy,a.getMaxAnisotropy())),r.get(i).__currentAnisotropy=i.anisotropy}}}function W(t,n){let i=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",L));const r=n.source;let a=h.get(r);void 0===a&&(a={},h.set(r,a));const o=function(e){const t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}(n);if(o!==t.__cacheKey){void 0===a[o]&&(a[o]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,i=!0),a[o].usedTimes++;const r=a[t.__cacheKey];void 0!==r&&(a[t.__cacheKey].usedTimes--,0===r.usedTimes&&D(n)),t.__cacheKey=o,t.__webglTexture=a[o].texture}return i}function z(e,t,n){return Math.floor(Math.floor(e/n)/t)}function k(t,n,s){let l=e.TEXTURE_2D;(n.isDataArrayTexture||n.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),n.isData3DTexture&&(l=e.TEXTURE_3D);const c=W(t,n),d=n.source;i.bindTexture(l,t.__webglTexture,e.TEXTURE0+s);const u=r.get(d);if(d.version!==u.__version||!0===c){i.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),r=n.colorSpace===At?null:p.getPrimaries(n.colorSpace),f=n.colorSpace===At||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,f);let m=v(n.image,!1,a.maxTextureSize);m=J(n,m);const h=o.convert(n.format,n.colorSpace),_=o.convert(n.type);let g,M=b(n.internalFormat,h,_,n.colorSpace,n.isVideoTexture);V(l,n);const T=n.mipmaps,R=!0!==n.isVideoTexture,L=void 0===u.__version||!0===c,U=d.dataReady,D=P(n,m);if(n.isDepthTexture)M=C(n.format===Rt,n.type),L&&(R?i.texStorage2D(e.TEXTURE_2D,1,M,m.width,m.height):i.texImage2D(e.TEXTURE_2D,0,M,m.width,m.height,0,h,_,null));else if(n.isDataTexture)if(T.length>0){R&&L&&i.texStorage2D(e.TEXTURE_2D,D,M,T[0].width,T[0].height);for(let t=0,n=T.length;te.start-t.start);let s=0;for(let e=1;e0){const r=bt(g.width,g.height,n.format,n.type);for(const a of n.layerUpdates){const n=g.data.subarray(a*r/g.data.BYTES_PER_ELEMENT,(a+1)*r/g.data.BYTES_PER_ELEMENT);i.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,a,g.width,g.height,1,h,n)}n.clearLayerUpdates()}else i.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,g.data)}else i.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,M,g.width,g.height,m.depth,0,g.data,0,0);else E("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else R?U&&i.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,_,g.data):i.texImage3D(e.TEXTURE_2D_ARRAY,t,M,g.width,g.height,m.depth,0,h,_,g.data)}else{R&&L&&i.texStorage2D(e.TEXTURE_2D,D,M,T[0].width,T[0].height);for(let t=0,r=T.length;t0){const t=bt(m.width,m.height,n.format,n.type);for(const r of n.layerUpdates){const n=m.data.subarray(r*t/m.data.BYTES_PER_ELEMENT,(r+1)*t/m.data.BYTES_PER_ELEMENT);i.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,r,m.width,m.height,1,h,_,n)}n.clearLayerUpdates()}else i.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)}else i.texImage3D(e.TEXTURE_2D_ARRAY,0,M,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isData3DTexture)R?(L&&i.texStorage3D(e.TEXTURE_3D,D,M,m.width,m.height,m.depth),U&&i.texSubImage3D(e.TEXTURE_3D,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)):i.texImage3D(e.TEXTURE_3D,0,M,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isFramebufferTexture){if(L)if(R)i.texStorage2D(e.TEXTURE_2D,D,M,m.width,m.height);else{let t=m.width,n=m.height;for(let r=0;r>=1,n>>=1}}else if(T.length>0){if(R&&L){const t=ee(T[0]);i.texStorage2D(e.TEXTURE_2D,D,M,t.width,t.height)}for(let t=0,n=T.length;t>d),r=Math.max(1,n.height>>d);c===e.TEXTURE_3D||c===e.TEXTURE_2D_ARRAY?i.texImage3D(c,d,p,t,r,n.depth,0,u,f,null):i.texImage2D(c,d,p,t,r,0,u,f,null)}i.bindFramebuffer(e.FRAMEBUFFER,t),Q(n)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,s,c,h.__webglTexture,0,$(n)):(c===e.TEXTURE_2D||c>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,s,c,h.__webglTexture,d),i.bindFramebuffer(e.FRAMEBUFFER,null)}function Y(t,n,i){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){const r=n.depthTexture,a=r&&r.isDepthTexture?r.type:null,o=C(n.stencilBuffer,a),s=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;Q(n)?l.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,$(n),o,n.width,n.height):i?e.renderbufferStorageMultisample(e.RENDERBUFFER,$(n),o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,t)}else{const t=n.textures;for(let r=0;r{delete n.__boundDepthTexture,delete n.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),n.__depthDisposeCallback=t}n.__boundDepthTexture=e}if(t.depthTexture&&!n.__autoAllocateDepthBuffer)if(a)for(let e=0;e<6;e++)K(n.__webglFramebuffer[e],t,e);else{const e=t.texture.mipmaps;e&&e.length>0?K(n.__webglFramebuffer[0],t,0):K(n.__webglFramebuffer,t,0)}else if(a){n.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[r]),void 0===n.__webglDepthbuffer[r])n.__webglDepthbuffer[r]=e.createRenderbuffer(),Y(n.__webglDepthbuffer[r],t,!1);else{const i=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=n.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,i,e.RENDERBUFFER,a)}}else{const r=t.texture.mipmaps;if(r&&r.length>0?i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[0]):i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer),void 0===n.__webglDepthbuffer)n.__webglDepthbuffer=e.createRenderbuffer(),Y(n.__webglDepthbuffer,t,!1);else{const i=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=n.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,i,e.RENDERBUFFER,r)}}i.bindFramebuffer(e.FRAMEBUFFER,null)}const j=[],Z=[];function $(e){return Math.min(a.maxSamples,e.samples)}function Q(e){const t=r.get(e);return e.samples>0&&!0===n.has("WEBGL_multisampled_render_to_texture")&&!1!==t.__useRenderToTexture}function J(e,t){const n=e.colorSpace,i=e.format,r=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==F&&n!==At&&(p.getTransfer(n)===m?i===x&&r===M||E("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):w("WebGLTextures: Unsupported texture color space:",n)),t}function ee(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement?(d.width=e.naturalWidth||e.width,d.height=e.naturalHeight||e.height):"undefined"!=typeof VideoFrame&&e instanceof VideoFrame?(d.width=e.displayWidth,d.height=e.displayHeight):(d.width=e.width,d.height=e.height),d}this.allocateTextureUnit=function(){const e=I;return e>=a.maxTextures&&E("WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+a.maxTextures),I+=1,e},this.resetTextureUnits=function(){I=0},this.setTexture2D=N,this.setTexture2DArray=function(t,n){const a=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&a.__version!==t.version?k(a,t,n):(t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null),i.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+n))},this.setTexture3D=function(t,n){const a=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&a.__version!==t.version?k(a,t,n):i.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+n)},this.setTextureCube=function(t,n){const s=r.get(t);!0!==t.isCubeDepthTexture&&t.version>0&&s.__version!==t.version?function(t,n,s){if(6!==n.image.length)return;const l=W(t,n),c=n.source;i.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+s);const d=r.get(c);if(c.version!==d.__version||!0===l){i.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),r=n.colorSpace===At?null:p.getPrimaries(n.colorSpace),u=n.colorSpace===At||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,u);const f=n.isCompressedTexture||n.image[0].isCompressedTexture,m=n.image[0]&&n.image[0].isDataTexture,h=[];for(let e=0;e<6;e++)h[e]=f||m?m?n.image[e].image:n.image[e]:v(n.image[e],!0,a.maxCubemapSize),h[e]=J(n,h[e]);const _=h[0],g=o.convert(n.format,n.colorSpace),M=o.convert(n.type),T=b(n.internalFormat,g,M,n.colorSpace),R=!0!==n.isVideoTexture,C=void 0===d.__version||!0===l,L=c.dataReady;let U,D=P(n,_);if(V(e.TEXTURE_CUBE_MAP,n),f){R&&C&&i.texStorage2D(e.TEXTURE_CUBE_MAP,D,T,_.width,_.height);for(let t=0;t<6;t++){U=h[t].mipmaps;for(let r=0;r0&&D++;const t=ee(h[0]);i.texStorage2D(e.TEXTURE_CUBE_MAP,D,T,t.width,t.height)}for(let t=0;t<6;t++)if(m){R?L&&i.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,h[t].width,h[t].height,g,M,h[t].data):i.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,T,h[t].width,h[t].height,0,g,M,h[t].data);for(let n=0;n1;if(u||(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=n.version,s.memory.textures++),d){a.__webglFramebuffer=[];for(let t=0;t<6;t++)if(n.mipmaps&&n.mipmaps.length>0){a.__webglFramebuffer[t]=[];for(let i=0;i0){a.__webglFramebuffer=[];for(let t=0;t0&&!1===Q(t)){a.__webglMultisampledFramebuffer=e.createFramebuffer(),a.__webglColorRenderbuffer=[],i.bindFramebuffer(e.FRAMEBUFFER,a.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let i=0;i0)if(!1===Q(t)){const n=t.textures,a=t.width,o=t.height;let s=e.COLOR_BUFFER_BIT;const l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,d=r.get(t),u=n.length>1;if(u)for(let t=0;t0?i.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer[0]):i.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer);for(let i=0;i= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new o(new h(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class Ta extends bn{constructor(e,n){super();const i=this;let a=null,o=1,s=null,l="local-floor",c=1,d=null,u=null,f=null,p=null,m=null,h=null;const _="undefined"!=typeof XRWebGLBinding,g=new Ma,v={},S=n.getContextAttributes();let T=null,A=null;const R=[],b=[],C=new t;let P=null;const U=new L;U.viewport=new Y;const D=new L;D.viewport=new Y;const w=[U,D],I=new Cn;let y=null,F=null;function O(e){const t=b.indexOf(e.inputSource);if(-1===t)return;const n=R[t];void 0!==n&&(n.update(e.inputSource,e.frame,d||s),n.dispatchEvent({type:e.type,data:e.inputSource}))}function B(){a.removeEventListener("select",O),a.removeEventListener("selectstart",O),a.removeEventListener("selectend",O),a.removeEventListener("squeeze",O),a.removeEventListener("squeezestart",O),a.removeEventListener("squeezeend",O),a.removeEventListener("end",B),a.removeEventListener("inputsourceschange",G);for(let e=0;e=0&&(b[i]=null,R[i].disconnect(n))}for(let t=0;t=b.length){b.push(n),i=e;break}if(null===b[e]){b[e]=n,i=e;break}}if(-1===i)break}const r=R[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getGripSpace()},this.getHand=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){o=e,!0===i.isPresenting&&E("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){l=e,!0===i.isPresenting&&E("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return d||s},this.setReferenceSpace=function(e){d=e},this.getBaseLayer=function(){return null!==p?p:m},this.getBinding=function(){return null===f&&_&&(f=new XRWebGLBinding(a,n)),f},this.getFrame=function(){return h},this.getSession=function(){return a},this.setSession=async function(t){if(a=t,null!==a){T=e.getRenderTarget(),a.addEventListener("select",O),a.addEventListener("selectstart",O),a.addEventListener("selectend",O),a.addEventListener("squeeze",O),a.addEventListener("squeezestart",O),a.addEventListener("squeezeend",O),a.addEventListener("end",B),a.addEventListener("inputsourceschange",G),!0!==S.xrCompatible&&await n.makeXRCompatible(),P=e.getPixelRatio(),e.getSize(C);if(_&&"createProjectionLayer"in XRWebGLBinding.prototype){let t=null,i=null,r=null;S.depth&&(r=S.stencil?n.DEPTH24_STENCIL8:n.DEPTH_COMPONENT24,t=S.stencil?Rt:be,i=S.stencil?Ct:Le);const s={colorFormat:n.RGBA8,depthFormat:r,scaleFactor:o};f=this.getBinding(),p=f.createProjectionLayer(s),a.updateRenderState({layers:[p]}),e.setPixelRatio(1),e.setSize(p.textureWidth,p.textureHeight,!1),A=new N(p.textureWidth,p.textureHeight,{format:x,type:M,depthTexture:new oe(p.textureWidth,p.textureHeight,i,void 0,void 0,void 0,void 0,void 0,void 0,t),stencilBuffer:S.stencil,colorSpace:e.outputColorSpace,samples:S.antialias?4:0,resolveDepthBuffer:!1===p.ignoreDepthValues,resolveStencilBuffer:!1===p.ignoreDepthValues})}else{const t={antialias:S.antialias,alpha:!0,depth:S.depth,stencil:S.stencil,framebufferScaleFactor:o};m=new XRWebGLLayer(a,n,t),a.updateRenderState({baseLayer:m}),e.setPixelRatio(1),e.setSize(m.framebufferWidth,m.framebufferHeight,!1),A=new N(m.framebufferWidth,m.framebufferHeight,{format:x,type:M,colorSpace:e.outputColorSpace,stencilBuffer:S.stencil,resolveDepthBuffer:!1===m.ignoreDepthValues,resolveStencilBuffer:!1===m.ignoreDepthValues})}A.isXRRenderTarget=!0,this.setFoveation(c),d=null,s=await a.requestReferenceSpace(l),k.setContext(a),k.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==a)return a.environmentBlendMode},this.getDepthTexture=function(){return g.getDepthTexture()};const H=new r,V=new r;function W(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===a)return;let t=e.near,n=e.far;null!==g.texture&&(g.depthNear>0&&(t=g.depthNear),g.depthFar>0&&(n=g.depthFar)),I.near=D.near=U.near=t,I.far=D.far=U.far=n,y===I.near&&F===I.far||(a.updateRenderState({depthNear:I.near,depthFar:I.far}),y=I.near,F=I.far),I.layers.mask=6|e.layers.mask,U.layers.mask=-5&I.layers.mask,D.layers.mask=-3&I.layers.mask;const i=e.parent,r=I.cameras;W(I,i);for(let e=0;e0&&(e.alphaTest.value=i.alphaTest);const r=t.get(i),a=r.envMap,o=r.envMapRotation;a&&(e.envMap.value=a,xa.copy(o),xa.x*=-1,xa.y*=-1,xa.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(xa.y*=-1,xa.z*=-1),e.envMapRotation.value.setFromMatrix4(Aa.makeRotationFromEuler(xa)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=i.reflectivity,e.ior.value=i.ior,e.refractionRatio.value=i.refractionRatio),i.lightMap&&(e.lightMap.value=i.lightMap,e.lightMapIntensity.value=i.lightMapIntensity,n(i.lightMap,e.lightMapTransform)),i.aoMap&&(e.aoMap.value=i.aoMap,e.aoMapIntensity.value=i.aoMapIntensity,n(i.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,g(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,r,a,o,s){r.isMeshBasicMaterial?i(e,r):r.isMeshLambertMaterial?(i(e,r),r.envMap&&(e.envMapIntensity.value=r.envMapIntensity)):r.isMeshToonMaterial?(i(e,r),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}(e,r)):r.isMeshPhongMaterial?(i(e,r),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}(e,r),r.envMap&&(e.envMapIntensity.value=r.envMapIntensity)):r.isMeshStandardMaterial?(i(e,r),function(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform));e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform));t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}(e,r),r.isMeshPhysicalMaterial&&function(e,t,i){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform)));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===c&&e.clearcoatNormalScale.value.negate()));t.dispersion>0&&(e.dispersion.value=t.dispersion);t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform)));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=i.texture,e.transmissionSamplerSize.value.set(i.width,i.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform)));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform));t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}(e,r,s)):r.isMeshMatcapMaterial?(i(e,r),function(e,t){t.matcap&&(e.matcap.value=t.matcap)}(e,r)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),function(e,n){const i=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(i.matrixWorld),e.nearDistance.value=i.shadow.camera.near,e.farDistance.value=i.shadow.camera.far}(e,r)):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}(e,r),r.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,r)):r.isPointsMaterial?function(e,t,i,r){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*i,e.scale.value=.5*r,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r,a,o):r.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function ba(e,t,n,i){let r={},a={},o=[];const s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e,t,n,i){const r=e.value,a=t+"_"+n;if(void 0===i[a])return i[a]="number"==typeof r||"boolean"==typeof r?r:r.clone(),!0;{const e=i[a];if("number"==typeof r||"boolean"==typeof r){if(e!==r)return i[a]=r,!0}else if(!1===e.equals(r))return e.copy(r),!0}return!1}function c(e){const t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?E("WebGLRenderer: Texture samplers can not be part of an uniforms group."):E("WebGLRenderer: Unsupported uniform value type.",e),t}function d(t){const n=t.target;n.removeEventListener("dispose",d);const i=o.indexOf(n.__bindingPointIndex);o.splice(i,1),e.deleteBuffer(r[n.id]),delete r[n.id],delete a[n.id]}return{bind:function(e,t){const n=t.program;i.uniformBlockBinding(e,n)},update:function(n,u){let f=r[n.id];void 0===f&&(!function(e){const t=e.uniforms;let n=0;const i=16;for(let e=0,r=t.length;e0&&(n+=i-r);e.__size=n,e.__cache={}}(n),f=function(t){const n=function(){for(let e=0;e0),f=!!n.morphAttributes.position,m=!!n.morphAttributes.normal,h=!!n.morphAttributes.color;let _=U;i.toneMapped&&(null!==W&&!0!==W.isXRRenderTarget||(_=F.toneMapping));const g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,v=void 0!==g?g.length:0,E=Se.get(i),M=L.state.lights;if(!0===se&&(!0===le||e!==X)){const t=e===X&&i.id===k;Ie.setState(i,e,t)}let T=!1;i.version===E.__version?E.needsLights&&E.lightsStateVersion!==M.state.version||E.outputColorSpace!==s||r.isBatchedMesh&&!1===E.batching?T=!0:r.isBatchedMesh||!0!==E.batching?r.isBatchedMesh&&!0===E.batchingColor&&null===r.colorTexture||r.isBatchedMesh&&!1===E.batchingColor&&null!==r.colorTexture||r.isInstancedMesh&&!1===E.instancing?T=!0:r.isInstancedMesh||!0!==E.instancing?r.isSkinnedMesh&&!1===E.skinning?T=!0:r.isSkinnedMesh||!0!==E.skinning?r.isInstancedMesh&&!0===E.instancingColor&&null===r.instanceColor||r.isInstancedMesh&&!1===E.instancingColor&&null!==r.instanceColor||r.isInstancedMesh&&!0===E.instancingMorph&&null===r.morphTexture||r.isInstancedMesh&&!1===E.instancingMorph&&null!==r.morphTexture||E.envMap!==c||!0===i.fog&&E.fog!==a?T=!0:void 0===E.numClippingPlanes||E.numClippingPlanes===Ie.numPlanes&&E.numIntersection===Ie.numIntersection?(E.vertexAlphas!==d||E.vertexTangents!==u||E.morphTargets!==f||E.morphNormals!==m||E.morphColors!==h||E.toneMapping!==_||E.morphTargetsCount!==v)&&(T=!0):T=!0:T=!0:T=!0:T=!0:(T=!0,E.__version=i.version);let x=E.currentProgram;!0===T&&(x=ot(i,t,r));let A=!1,R=!1,b=!1;const C=x.getUniforms(),P=E.uniforms;ve.useProgram(x.program)&&(A=!0,R=!0,b=!0);i.id!==k&&(k=i.id,R=!0);if(A||X!==e){ve.buffers.depth.getReversed()&&!0!==e.reversedDepth&&(e._reversedDepth=!0,e.updateProjectionMatrix()),C.setValue(We,"projectionMatrix",e.projectionMatrix),C.setValue(We,"viewMatrix",e.matrixWorldInverse);const t=C.map.cameraPosition;void 0!==t&&t.setValue(We,de.setFromMatrixPosition(e.matrixWorld)),ge.logarithmicDepthBuffer&&C.setValue(We,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&C.setValue(We,"isOrthographic",!0===e.isOrthographicCamera),X!==e&&(X=e,R=!0,b=!0)}E.needsLights&&(M.state.directionalShadowMap.length>0&&C.setValue(We,"directionalShadowMap",M.state.directionalShadowMap,xe),M.state.spotShadowMap.length>0&&C.setValue(We,"spotShadowMap",M.state.spotShadowMap,xe),M.state.pointShadowMap.length>0&&C.setValue(We,"pointShadowMap",M.state.pointShadowMap,xe));if(r.isSkinnedMesh){C.setOptional(We,r,"bindMatrix"),C.setOptional(We,r,"bindMatrixInverse");const e=r.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),C.setValue(We,"boneTexture",e.boneTexture,xe))}r.isBatchedMesh&&(C.setOptional(We,r,"batchingTexture"),C.setValue(We,"batchingTexture",r._matricesTexture,xe),C.setOptional(We,r,"batchingIdTexture"),C.setValue(We,"batchingIdTexture",r._indirectTexture,xe),C.setOptional(We,r,"batchingColorTexture"),null!==r._colorsTexture&&C.setValue(We,"batchingColorTexture",r._colorsTexture,xe));const D=n.morphAttributes;void 0===D.position&&void 0===D.normal&&void 0===D.color||Fe.update(r,n,x);(R||E.receiveShadow!==r.receiveShadow)&&(E.receiveShadow=r.receiveShadow,C.setValue(We,"receiveShadow",r.receiveShadow));(i.isMeshStandardMaterial||i.isMeshLambertMaterial||i.isMeshPhongMaterial)&&null===i.envMap&&null!==t.environment&&(P.envMapIntensity.value=t.environmentIntensity);void 0!==P.dfgLUT&&(P.dfgLUT.value=(null===Pa&&(Pa=new Un(Ca,16,16,Me,S),Pa.name="DFG_LUT",Pa.minFilter=O,Pa.magFilter=O,Pa.wrapS=pt,Pa.wrapT=pt,Pa.generateMipmaps=!1,Pa.needsUpdate=!0),Pa));R&&(C.setValue(We,"toneMappingExposure",F.toneMappingExposure),E.needsLights&&(I=b,(w=P).ambientLightColor.needsUpdate=I,w.lightProbe.needsUpdate=I,w.directionalLights.needsUpdate=I,w.directionalLightShadows.needsUpdate=I,w.pointLights.needsUpdate=I,w.pointLightShadows.needsUpdate=I,w.spotLights.needsUpdate=I,w.spotLightShadows.needsUpdate=I,w.rectAreaLights.needsUpdate=I,w.hemisphereLights.needsUpdate=I),a&&!0===i.fog&&Ue.refreshFogUniforms(P,a),Ue.refreshMaterialUniforms(P,i,ee,J,L.state.transmissionRenderTarget[e.id]),Rr.upload(We,st(E),P,xe));var w,I;i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(Rr.upload(We,st(E),P,xe),i.uniformsNeedUpdate=!1);i.isSpriteMaterial&&C.setValue(We,"center",r.center);if(C.setValue(We,"modelViewMatrix",r.modelViewMatrix),C.setValue(We,"normalMatrix",r.normalMatrix),C.setValue(We,"modelMatrix",r.matrixWorld),i.isShaderMaterial||i.isRawShaderMaterial){const e=i.uniformsGroups;for(let t=0,n=e.length;t{function n(){i.forEach(function(e){Se.get(e).currentProgram.isReady()&&i.delete(e)}),0!==i.size?setTimeout(n,10):t(e)}null!==he.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)})};let $e=null;function Qe(){et.stop()}function Je(){et.start()}const et=new On;function tt(e,t,n,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)L.pushLight(e),e.castShadow&&L.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||oe.intersectsSprite(e)){i&&ue.setFromMatrixPosition(e.matrixWorld).applyMatrix4(ce);const t=Ce.update(e),r=e.material;r.visible&&P.push(e,t,r,n,ue.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||oe.intersectsObject(e))){const t=Ce.update(e),r=e.material;if(i&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),ue.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),ue.copy(t.boundingSphere.center)),ue.applyMatrix4(e.matrixWorld).applyMatrix4(ce)),Array.isArray(r)){const i=t.groups;for(let a=0,o=i.length;a0&&rt(r,t,n),a.length>0&&rt(a,t,n),o.length>0&&rt(o,t,n),ve.buffers.depth.setTest(!0),ve.buffers.depth.setMask(!0),ve.buffers.color.setMask(!0),ve.setPolygonOffset(!1)}function it(e,t,n,i){if(null!==(!0===n.isScene?n.overrideMaterial:null))return;if(void 0===L.state.transmissionRenderTarget[i.id]){const e=he.has("EXT_color_buffer_half_float")||he.has("EXT_color_buffer_float");L.state.transmissionRenderTarget[i.id]=new N(1,1,{generateMipmaps:!0,type:e?S:M,minFilter:G,samples:ge.samples,stencilBuffer:o,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:p.workingColorSpace})}const r=L.state.transmissionRenderTarget[i.id],a=i.viewport||K;r.setSize(a.z*F.transmissionResolutionScale,a.w*F.transmissionResolutionScale);const s=F.getRenderTarget(),l=F.getActiveCubeFace(),d=F.getActiveMipmapLevel();F.setRenderTarget(r),F.getClearColor(Z),$=F.getClearAlpha(),$<1&&F.setClearColor(16777215,.5),F.clear(),pe&&ye.render(n);const u=F.toneMapping;F.toneMapping=U;const f=i.viewport;if(void 0!==i.viewport&&(i.viewport=void 0),L.setupLightsView(i),!0===se&&Ie.setGlobalState(F.clippingPlanes,i),rt(e,n,i),xe.updateMultisampleRenderTarget(r),xe.updateRenderTargetMipmap(r),!1===he.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let r=0,a=t.length;r0)for(let t=0,a=r.length;t0&&it(n,i,e,t),pe&&ye.render(e),nt(P,e,t)}null!==W&&0===V&&(xe.updateMultisampleRenderTarget(W),xe.updateRenderTargetMipmap(W)),i&&y.end(F),!0===e.isScene&&e.onAfterRender(F,e,t),He.resetDefaultState(),k=-1,X=null,I.pop(),I.length>0?(L=I[I.length-1],!0===se&&Ie.setGlobalState(F.clippingPlanes,L.state.camera)):L=null,D.pop(),P=D.length>0?D[D.length-1]:null},this.getActiveCubeFace=function(){return H},this.getActiveMipmapLevel=function(){return V},this.getRenderTarget=function(){return W},this.setRenderTargetTextures=function(e,t,n){const i=Se.get(e);i.__autoAllocateDepthBuffer=!1===e.resolveDepthBuffer,!1===i.__autoAllocateDepthBuffer&&(i.__useRenderToTexture=!1),Se.get(e.texture).__webglTexture=t,Se.get(e.depthTexture).__webglTexture=i.__autoAllocateDepthBuffer?void 0:n,i.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){const n=Se.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t};const ct=We.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){W=e,H=t,V=n;let i=null,r=!1,a=!1;if(e){const o=Se.get(e);if(void 0!==o.__useDefaultFramebuffer)return ve.bindFramebuffer(We.FRAMEBUFFER,o.__webglFramebuffer),K.copy(e.viewport),q.copy(e.scissor),j=e.scissorTest,ve.viewport(K),ve.scissor(q),ve.setScissorTest(j),void(k=-1);if(void 0===o.__webglFramebuffer)xe.setupRenderTarget(e);else if(o.__hasExternalTextures)xe.rebindTextures(e,Se.get(e.texture).__webglTexture,Se.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){const t=e.depthTexture;if(o.__boundDepthTexture!==t){if(null!==t&&Se.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");xe.setupDepthRenderbuffer(e)}}const s=e.texture;(s.isData3DTexture||s.isDataArrayTexture||s.isCompressedArrayTexture)&&(a=!0);const l=Se.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(i=Array.isArray(l[t])?l[t][n]:l[t],r=!0):i=e.samples>0&&!1===xe.useMultisampledRTT(e)?Se.get(e).__webglMultisampledFramebuffer:Array.isArray(l)?l[n]:l,K.copy(e.viewport),q.copy(e.scissor),j=e.scissorTest}else K.copy(ie).multiplyScalar(ee).floor(),q.copy(re).multiplyScalar(ee).floor(),j=ae;0!==n&&(i=ct);if(ve.bindFramebuffer(We.FRAMEBUFFER,i)&&ve.drawBuffers(e,i),ve.viewport(K),ve.scissor(q),ve.setScissorTest(j),r){const i=Se.get(e.texture);We.framebufferTexture2D(We.FRAMEBUFFER,We.COLOR_ATTACHMENT0,We.TEXTURE_CUBE_MAP_POSITIVE_X+t,i.__webglTexture,n)}else if(a){const i=t;for(let t=0;t1&&We.readBuffer(We.COLOR_ATTACHMENT0+s),!ge.textureFormatReadable(l))return void w("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!ge.textureTypeReadable(c))return void w("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r&&We.readPixels(t,n,i,r,Ge.convert(l),Ge.convert(c),a)}finally{const e=null!==W?Se.get(W).__webglFramebuffer:null;ve.bindFramebuffer(We.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,i,r,a,o,s=0){if(!e||!e.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let l=Se.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(l=l[o]),l){if(t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r){ve.bindFramebuffer(We.FRAMEBUFFER,l);const o=e.textures[s],c=o.format,d=o.type;if(e.textures.length>1&&We.readBuffer(We.COLOR_ATTACHMENT0+s),!ge.textureFormatReadable(c))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!ge.textureTypeReadable(d))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const u=We.createBuffer();We.bindBuffer(We.PIXEL_PACK_BUFFER,u),We.bufferData(We.PIXEL_PACK_BUFFER,a.byteLength,We.STREAM_READ),We.readPixels(t,n,i,r,Ge.convert(c),Ge.convert(d),0);const f=null!==W?Se.get(W).__webglFramebuffer:null;ve.bindFramebuffer(We.FRAMEBUFFER,f);const p=We.fenceSync(We.SYNC_GPU_COMMANDS_COMPLETE,0);return We.flush(),await Fn(We,p,4),We.bindBuffer(We.PIXEL_PACK_BUFFER,u),We.getBufferSubData(We.PIXEL_PACK_BUFFER,0,a),We.deleteBuffer(u),We.deleteSync(p),a}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),a=Math.floor(e.image.height*i),o=null!==t?t.x:0,s=null!==t?t.y:0;xe.setTexture2D(e,0),We.copyTexSubImage2D(We.TEXTURE_2D,n,0,0,o,s,r,a),ve.unbindTexture()};const dt=We.createFramebuffer(),ut=We.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,i=null,r=0,a=0){let o,s,l,c,d,u,f,p,m;const h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(null!==n)o=n.max.x-n.min.x,s=n.max.y-n.min.y,l=n.isBox3?n.max.z-n.min.z:1,c=n.min.x,d=n.min.y,u=n.isBox3?n.min.z:0;else{const t=Math.pow(2,-r);o=Math.floor(h.width*t),s=Math.floor(h.height*t),l=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,c=0,d=0,u=0}null!==i?(f=i.x,p=i.y,m=i.z):(f=0,p=0,m=0);const _=Ge.convert(t.format),g=Ge.convert(t.type);let v;t.isData3DTexture?(xe.setTexture3D(t,0),v=We.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(xe.setTexture2DArray(t,0),v=We.TEXTURE_2D_ARRAY):(xe.setTexture2D(t,0),v=We.TEXTURE_2D),We.pixelStorei(We.UNPACK_FLIP_Y_WEBGL,t.flipY),We.pixelStorei(We.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),We.pixelStorei(We.UNPACK_ALIGNMENT,t.unpackAlignment);const E=We.getParameter(We.UNPACK_ROW_LENGTH),S=We.getParameter(We.UNPACK_IMAGE_HEIGHT),M=We.getParameter(We.UNPACK_SKIP_PIXELS),T=We.getParameter(We.UNPACK_SKIP_ROWS),x=We.getParameter(We.UNPACK_SKIP_IMAGES);We.pixelStorei(We.UNPACK_ROW_LENGTH,h.width),We.pixelStorei(We.UNPACK_IMAGE_HEIGHT,h.height),We.pixelStorei(We.UNPACK_SKIP_PIXELS,c),We.pixelStorei(We.UNPACK_SKIP_ROWS,d),We.pixelStorei(We.UNPACK_SKIP_IMAGES,u);const A=e.isDataArrayTexture||e.isData3DTexture,R=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){const n=Se.get(e),i=Se.get(t),h=Se.get(n.__renderTarget),_=Se.get(i.__renderTarget);ve.bindFramebuffer(We.READ_FRAMEBUFFER,h.__webglFramebuffer),ve.bindFramebuffer(We.DRAW_FRAMEBUFFER,_.__webglFramebuffer);for(let n=0;ne.start-t.start);let t=0;for(let e=1;e 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec4 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec4( 1.0 );\n#endif\n#ifdef USE_COLOR_ALPHA\n\tvColor *= color;\n#elif defined( USE_COLOR )\n\tvColor.rgb *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.rgb *= instanceColor.rgb;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) );\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn 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 );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn 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 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t\t#endif\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, pow4( roughness ) ) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.metalness = metalnessFactor;\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor;\n\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = vec3( 0.04 );\n\tmaterial.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.0001, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"uniform sampler2D dfgLUT;\nstruct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tvec3 diffuseContribution;\n\tvec3 specularColor;\n\tvec3 specularColorBlended;\n\tfloat roughness;\n\tfloat metalness;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t\tvec3 iridescenceFresnelDielectric;\n\t\tvec3 iridescenceFresnelMetallic;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn v;\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColorBlended;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transpose( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat rInv = 1.0 / ( roughness + 0.1 );\n\tfloat a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv;\n\tfloat b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv;\n\tfloat DG = exp( a * dotNV + b );\n\treturn saturate( DG );\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid 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 ) {\n#else\nvoid 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 ) {\n#endif\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg;\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nvec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 singleScatter = BRDF_GGX( lightDir, viewDir, normal, material );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg;\n\tvec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg;\n\tvec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y;\n\tvec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y;\n\tfloat Ess_V = dfgV.x + dfgV.y;\n\tfloat Ess_L = dfgL.x + dfgL.y;\n\tfloat Ems_V = 1.0 - Ess_V;\n\tfloat Ems_L = 1.0 - Ess_L;\n\tvec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619;\n\tvec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON );\n\tfloat compensationFactor = Ems_V * Ems_L;\n\tvec3 multiScatter = Fms * compensationFactor;\n\treturn singleScatter + multiScatter;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t\t#ifdef USE_CLEARCOAT\n\t\t\tvec3 Ncc = geometryClearcoatNormal;\n\t\t\tvec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness );\n\t\t\tvec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat );\n\t\t\tvec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat );\n\t\t\tmat3 mInvClearcoat = mat3(\n\t\t\t\tvec3( t1Clearcoat.x, 0, t1Clearcoat.y ),\n\t\t\t\tvec3( 0, 1, 0 ),\n\t\t\t\tvec3( t1Clearcoat.z, 0, t1Clearcoat.w )\n\t\t\t);\n\t\t\tvec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y;\n\t\t\tclearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords );\n\t\t#endif\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n \n \t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n \n \t\tfloat sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n \t\tfloat sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness );\n \n \t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL );\n \n \t\tirradiance *= sheenEnergyComp;\n \n \t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution );\n\t#ifdef USE_SHEEN\n\t\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\n\t\tdiffuse *= sheenEnergyComp;\n\t#endif\n\treflectedLight.indirectDiffuse += diffuse;\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI;\n \t#endif\n\tvec3 singleScatteringDielectric = vec3( 0.0 );\n\tvec3 multiScatteringDielectric = vec3( 0.0 );\n\tvec3 singleScatteringMetallic = vec3( 0.0 );\n\tvec3 multiScatteringMetallic = vec3( 0.0 );\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric );\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic );\n\t#endif\n\tvec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness );\n\tvec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness );\n\tvec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric;\n\tvec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tvec3 indirectSpecular = radiance * singleScattering;\n\tindirectSpecular += multiScattering * cosineWeightedIrradiance;\n\tvec3 indirectDiffuse = diffuse * cosineWeightedIrradiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t\tfloat sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo;\n\t\tindirectSpecular *= sheenEnergyComp;\n\t\tindirectDiffuse *= sheenEnergyComp;\n\t#endif\n\treflectedLight.indirectSpecular += indirectSpecular;\n\treflectedLight.indirectDiffuse += indirectDiffuse;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnelDielectric = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceFresnelMetallic = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.diffuseColor );\n\t\tmaterial.iridescenceFresnel = mix( material.iridescenceFresnelDielectric, material.iridescenceFresnelMetallic, material.metalness );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\t#if defined( STANDARD ) || defined( LAMBERT ) || defined( PHONG )\n\t\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t\t#endif\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\t#if defined( LAMBERT ) || defined( PHONG )\n\t\tirradiance += iblIrradiance;\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGARITHMIC_DEPTH_BUFFER\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#if defined( USE_PACKED_NORMALMAP )\n\t\tmapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) );\n\t#endif\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\n\t\treturn depth * ( far - near ) - far;\n\t#else\n\t\treturn depth * ( near - far ) - near;\n\t#endif\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\t\n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\treturn ( near * far ) / ( ( near - far ) * depth - near );\n\t#else\n\t\treturn ( near * far ) / ( ( far - near ) * depth - far );\n\t#endif\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#else\n\t\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tuniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\t\t\tuniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\t#endif\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat interleavedGradientNoise( vec2 position ) {\n\t\t\treturn fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );\n\t\t}\n\t\tvec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {\n\t\t\tconst float goldenAngle = 2.399963229728653;\n\t\t\tfloat r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );\n\t\t\tfloat theta = float( sampleIndex ) * goldenAngle + phi;\n\t\t\treturn vec2( cos( theta ), sin( theta ) ) * r;\n\t\t}\n\t#endif\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\tfloat getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\tshadowCoord.z += shadowBias;\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\t\tfloat radius = shadowRadius * texelSize.x;\n\t\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +\n\t\t\t\t\ttexture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )\n\t\t\t\t) * 0.2;\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tvec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;\n\t\t\t\tfloat mean = distribution.x;\n\t\t\t\tfloat variance = distribution.y * distribution.y;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tfloat hard_shadow = step( mean, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tfloat hard_shadow = step( shadowCoord.z, mean );\n\t\t\t\t#endif\n\t\t\t\t\n\t\t\t\tif ( hard_shadow == 1.0 ) {\n\t\t\t\t\tshadow = 1.0;\n\t\t\t\t} else {\n\t\t\t\t\tvariance = max( variance, 0.0000001 );\n\t\t\t\t\tfloat d = shadowCoord.z - mean;\n\t\t\t\t\tfloat p_max = variance / ( variance + d * d );\n\t\t\t\t\tp_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );\n\t\t\t\t\tshadow = max( hard_shadow, p_max );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#else\n\t\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\t\tfloat shadow = 1.0;\n\t\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tshadowCoord.z -= shadowBias;\n\t\t\t#else\n\t\t\t\tshadowCoord.z += shadowBias;\n\t\t\t#endif\n\t\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\t\tif ( frustumTest ) {\n\t\t\t\tfloat depth = texture2D( shadowMap, shadowCoord.xy ).r;\n\t\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\t\tshadow = step( depth, shadowCoord.z );\n\t\t\t\t#else\n\t\t\t\t\tshadow = step( shadowCoord.z, depth );\n\t\t\t\t#endif\n\t\t\t}\n\t\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#if defined( SHADOWMAP_TYPE_PCF )\n\tfloat getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tfloat dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp -= shadowBias;\n\t\t\t#else\n\t\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\t\tdp += shadowBias;\n\t\t\t#endif\n\t\t\tfloat texelSize = shadowRadius / shadowMapSize.x;\n\t\t\tvec3 absDir = abs( bd3D );\n\t\t\tvec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );\n\t\t\ttangent = normalize( cross( bd3D, tangent ) );\n\t\t\tvec3 bitangent = cross( bd3D, tangent );\n\t\t\tfloat phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;\n\t\t\tvec2 sample0 = vogelDiskSample( 0, 5, phi );\n\t\t\tvec2 sample1 = vogelDiskSample( 1, 5, phi );\n\t\t\tvec2 sample2 = vogelDiskSample( 2, 5, phi );\n\t\t\tvec2 sample3 = vogelDiskSample( 3, 5, phi );\n\t\t\tvec2 sample4 = vogelDiskSample( 4, 5, phi );\n\t\t\tshadow = (\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +\n\t\t\t\ttexture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )\n\t\t\t) * 0.2;\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#elif defined( SHADOWMAP_TYPE_BASIC )\n\tfloat getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 absVec = abs( lightToPosition );\n\t\tfloat viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );\n\t\tif ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );\n\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tfloat depth = textureCube( shadowMap, bd3D ).r;\n\t\t\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\t\t\tdepth = 1.0 - depth;\n\t\t\t#endif\n\t\t\tshadow = step( dp, depth );\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\t#endif\n\t#endif\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0 && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) )\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseContribution, material.specularColorBlended, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_REVERSED_DEPTH_BUFFER\n\t\tfloat fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];\n\t#else\n\t\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;\n\t#endif\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distance_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distance_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = vec4( dist, 0.0, 0.0, 1.0 );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n \n\t\toutgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect;\n \n \t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Hn={common:{diffuse:{value:new n(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new e}},envmap:{envMap:{value:null},envMapRotation:{value:new e},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new e}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new e}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new e},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new e},normalScale:{value:new t(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new e},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new e}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new e}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new e}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new n(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},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 n(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0},uvTransform:{value:new e}},sprite:{diffuse:{value:new n(16777215)},opacity:{value:1},center:{value:new t(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}}},Vn={basic:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.fog]),vertexShader:Gn.meshbasic_vert,fragmentShader:Gn.meshbasic_frag},lambert:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},envMapIntensity:{value:1}}]),vertexShader:Gn.meshlambert_vert,fragmentShader:Gn.meshlambert_frag},phong:{uniforms:i([Hn.common,Hn.specularmap,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},specular:{value:new n(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:Gn.meshphong_vert,fragmentShader:Gn.meshphong_frag},standard:{uniforms:i([Hn.common,Hn.envmap,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.roughnessmap,Hn.metalnessmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Gn.meshphysical_vert,fragmentShader:Gn.meshphysical_frag},toon:{uniforms:i([Hn.common,Hn.aomap,Hn.lightmap,Hn.emissivemap,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.gradientmap,Hn.fog,Hn.lights,{emissive:{value:new n(0)}}]),vertexShader:Gn.meshtoon_vert,fragmentShader:Gn.meshtoon_frag},matcap:{uniforms:i([Hn.common,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,Hn.fog,{matcap:{value:null}}]),vertexShader:Gn.meshmatcap_vert,fragmentShader:Gn.meshmatcap_frag},points:{uniforms:i([Hn.points,Hn.fog]),vertexShader:Gn.points_vert,fragmentShader:Gn.points_frag},dashed:{uniforms:i([Hn.common,Hn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Gn.linedashed_vert,fragmentShader:Gn.linedashed_frag},depth:{uniforms:i([Hn.common,Hn.displacementmap]),vertexShader:Gn.depth_vert,fragmentShader:Gn.depth_frag},normal:{uniforms:i([Hn.common,Hn.bumpmap,Hn.normalmap,Hn.displacementmap,{opacity:{value:1}}]),vertexShader:Gn.meshnormal_vert,fragmentShader:Gn.meshnormal_frag},sprite:{uniforms:i([Hn.sprite,Hn.fog]),vertexShader:Gn.sprite_vert,fragmentShader:Gn.sprite_frag},background:{uniforms:{uvTransform:{value:new e},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Gn.background_vert,fragmentShader:Gn.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new e}},vertexShader:Gn.backgroundCube_vert,fragmentShader:Gn.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Gn.cube_vert,fragmentShader:Gn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Gn.equirect_vert,fragmentShader:Gn.equirect_frag},distance:{uniforms:i([Hn.common,Hn.displacementmap,{referencePosition:{value:new r},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Gn.distance_vert,fragmentShader:Gn.distance_frag},shadow:{uniforms:i([Hn.lights,Hn.fog,{color:{value:new n(0)},opacity:{value:1}}]),vertexShader:Gn.shadow_vert,fragmentShader:Gn.shadow_frag}};Vn.physical={uniforms:i([Vn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new e},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new e},clearcoatNormalScale:{value:new t(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new e},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new e},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new e},sheen:{value:0},sheenColor:{value:new n(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new e},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new e},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new e},transmissionSamplerSize:{value:new t},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new e},attenuationDistance:{value:0},attenuationColor:{value:new n(0)},specularColor:{value:new n(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new e},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new e},anisotropyVector:{value:new t},anisotropyMap:{value:null},anisotropyMapTransform:{value:new e}}]),vertexShader:Gn.meshphysical_vert,fragmentShader:Gn.meshphysical_frag};const Wn={r:0,b:0,g:0},kn=new u,zn=new f;function Xn(e,t,i,r,u,f){const v=new n(0);let E,S,M=!0===u?0:1,T=null,x=0,A=null;function R(e){let n=!0===e.isScene?e.background:null;if(n&&n.isTexture){const i=e.backgroundBlurriness>0;n=t.get(n,i)}return n}function b(t,n){t.getRGB(Wn,g(e)),i.buffers.color.setClear(Wn.r,Wn.g,Wn.b,n,f)}return{getClearColor:function(){return v},setClearColor:function(e,t=1){v.set(e),M=t,b(v,M)},getClearAlpha:function(){return M},setClearAlpha:function(e){M=e,b(v,M)},render:function(t){let n=!1;const r=R(t);null===r?b(v,M):r&&r.isColor&&(b(r,1),n=!0);const a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,f):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,f),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){const i=R(n);i&&(i.isCubeTexture||i.mapping===a)?(void 0===S&&(S=new o(new s(1,1,1),new l({name:"BackgroundCubeMaterial",uniforms:d(Vn.backgroundCube.uniforms),vertexShader:Vn.backgroundCube.vertexShader,fragmentShader:Vn.backgroundCube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),S.geometry.deleteAttribute("normal"),S.geometry.deleteAttribute("uv"),S.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(S.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(S)),kn.copy(n.backgroundRotation),kn.x*=-1,kn.y*=-1,kn.z*=-1,i.isCubeTexture&&!1===i.isRenderTargetTexture&&(kn.y*=-1,kn.z*=-1),S.material.uniforms.envMap.value=i,S.material.uniforms.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,S.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,S.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,S.material.uniforms.backgroundRotation.value.setFromMatrix4(zn.makeRotationFromEuler(kn)),S.material.toneMapped=p.getTransfer(i.colorSpace)!==m,T===i&&x===i.version&&A===e.toneMapping||(S.material.needsUpdate=!0,T=i,x=i.version,A=e.toneMapping),S.layers.enableAll(),t.unshift(S,S.geometry,S.material,0,0,null)):i&&i.isTexture&&(void 0===E&&(E=new o(new h(2,2),new l({name:"BackgroundMaterial",uniforms:d(Vn.background.uniforms),vertexShader:Vn.background.vertexShader,fragmentShader:Vn.background.fragmentShader,side:_,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),E.geometry.deleteAttribute("normal"),Object.defineProperty(E.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(E)),E.material.uniforms.t2D.value=i,E.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,E.material.toneMapped=p.getTransfer(i.colorSpace)!==m,!0===i.matrixAutoUpdate&&i.updateMatrix(),E.material.uniforms.uvTransform.value.copy(i.matrix),T===i&&x===i.version&&A===e.toneMapping||(E.material.needsUpdate=!0,T=i,x=i.version,A=e.toneMapping),E.layers.enableAll(),t.unshift(E,E.geometry,E.material,0,0,null))},dispose:function(){void 0!==S&&(S.geometry.dispose(),S.material.dispose(),S=void 0),void 0!==E&&(E.geometry.dispose(),E.material.dispose(),E=void 0)}}}function Yn(e,t){const n=e.getParameter(e.MAX_VERTEX_ATTRIBS),i={},r=c(null);let a=r,o=!1;function s(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function c(e){const t=[],i=[],r=[];for(let e=0;e=0){const n=r[t];let i=o[t];if(void 0===i&&("instanceMatrix"===t&&e.instanceMatrix&&(i=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(i=e.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;s++}}return a.attributesNum!==s||a.index!==i}(n,h,l,_),g&&function(e,t,n,i){const r={},o=t.attributes;let s=0;const l=n.getAttributes();for(const t in l){if(l[t].location>=0){let n=o[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[t]=i,s++}}a.attributes=r,a.attributesNum=s,a.index=i}(n,h,l,_),null!==_&&t.update(_,e.ELEMENT_ARRAY_BUFFER),(g||o)&&(o=!1,function(n,i,r,a){d();const o=a.attributes,s=r.getAttributes(),l=i.defaultAttributeValues;for(const i in s){const r=s[i];if(r.location>=0){let s=o[i];if(void 0===s&&("instanceMatrix"===i&&n.instanceMatrix&&(s=n.instanceMatrix),"instanceColor"===i&&n.instanceColor&&(s=n.instanceColor)),void 0!==s){const i=s.normalized,o=s.itemSize,l=t.get(s);if(void 0===l)continue;const c=l.buffer,d=l.type,p=l.bytesPerElement,h=d===e.INT||d===e.UNSIGNED_INT||s.gpuType===v;if(s.isInterleavedBufferAttribute){const t=s.data,l=t.stride,_=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let o=void 0!==n.precision?n.precision:"highp";const s=a(o);s!==o&&(E("WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==r)return r;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");r=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else r=0;return r},getMaxPrecision:a,textureFormatReadable:function(t){return t===x||i.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){const r=n===S&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(n!==M&&i.convert(n)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&n!==T&&!r)},precision:o,logarithmicDepthBuffer:!0===n.logarithmicDepthBuffer,reversedDepthBuffer:!0===n.reversedDepthBuffer&&t.has("EXT_clip_control"),maxTextures:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),maxVertexTextures:e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),maxSamples:e.getParameter(e.MAX_SAMPLES),samples:e.getParameter(e.SAMPLES)}}function jn(t){const n=this;let i=null,r=0,a=!1,o=!1;const s=new A,l=new e,c={value:null,needsUpdate:!1};function d(e,t,i,r){const a=null!==e?e.length:0;let o=null;if(0!==a){if(o=c.value,!0!==r||null===o){const n=i+4*a,r=t.matrixWorldInverse;l.getNormalMatrix(r),(null===o||o.length0);n.numPlanes=r,n.numIntersection=0}();else{const e=o?0:r,t=4*e;let n=m.clippingState||null;c.value=n,n=d(u,s,t,l);for(let e=0;e!==t;++e)n[e]=i[e];m.clippingState=n,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}}}const Zn=[.125,.215,.35,.446,.526,.582],$n=20,Qn=new P,Jn=new n;let ei=null,ti=0,ni=0,ii=!1;const ri=new r;class ai{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._backgroundBox=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._blurMaterial=null,this._ggxMaterial=null}fromScene(e,t=0,n=.1,i=100,r={}){const{size:a=256,position:o=ri}=r;ei=this._renderer.getRenderTarget(),ti=this._renderer.getActiveCubeFace(),ni=this._renderer.getActiveMipmapLevel(),ii=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,n,i,s,o),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=ci(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=li(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?l=Zn[s-e+4-1]:0===s&&(l=0),n.push(l);const c=1/(a-2),d=-c,u=1+c,f=[d,d,u,d,u,u,d,d,u,u,d,u],p=6,m=6,h=3,_=2,g=1,v=new Float32Array(h*m*p),E=new Float32Array(_*m*p),S=new Float32Array(g*m*p);for(let e=0;e2?0:-1,i=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];v.set(i,h*m*e),E.set(f,_*m*e);const r=[e,e,e,e,e,e];S.set(r,g*m*e)}const M=new C;M.setAttribute("position",new y(v,h)),M.setAttribute("uv",new y(E,_)),M.setAttribute("faceIndex",new y(S,g)),i.push(new o(M,null)),r>4&&r--}return{lodMeshes:i,sizeLods:t,sigmas:n}}(i)),this._blurMaterial=function(e,t,n){const i=new Float32Array($n),a=new r(0,1,0),o=new l({name:"SphericalGaussianBlur",defines:{n:$n,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:a}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1});return o}(i,e,t),this._ggxMaterial=function(e,t,n){const i=new l({name:"PMREMGGXConvolution",defines:{GGX_SAMPLES:256,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:di(),fragmentShader:'\n\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform float roughness;\n\t\t\tuniform float mipInt;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\t#define PI 3.14159265359\n\n\t\t\t// Van der Corput radical inverse\n\t\t\tfloat radicalInverse_VdC(uint bits) {\n\t\t\t\tbits = (bits << 16u) | (bits >> 16u);\n\t\t\t\tbits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);\n\t\t\t\tbits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);\n\t\t\t\tbits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);\n\t\t\t\tbits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);\n\t\t\t\treturn float(bits) * 2.3283064365386963e-10; // / 0x100000000\n\t\t\t}\n\n\t\t\t// Hammersley sequence\n\t\t\tvec2 hammersley(uint i, uint N) {\n\t\t\t\treturn vec2(float(i) / float(N), radicalInverse_VdC(i));\n\t\t\t}\n\n\t\t\t// GGX VNDF importance sampling (Eric Heitz 2018)\n\t\t\t// "Sampling the GGX Distribution of Visible Normals"\n\t\t\t// https://jcgt.org/published/0007/04/01/\n\t\t\tvec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {\n\t\t\t\tfloat alpha = roughness * roughness;\n\n\t\t\t\t// Section 4.1: Orthonormal basis\n\t\t\t\tvec3 T1 = vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 T2 = cross(V, T1);\n\n\t\t\t\t// Section 4.2: Parameterization of projected area\n\t\t\t\tfloat r = sqrt(Xi.x);\n\t\t\t\tfloat phi = 2.0 * PI * Xi.y;\n\t\t\t\tfloat t1 = r * cos(phi);\n\t\t\t\tfloat t2 = r * sin(phi);\n\t\t\t\tfloat s = 0.5 * (1.0 + V.z);\n\t\t\t\tt2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2;\n\n\t\t\t\t// Section 4.3: Reprojection onto hemisphere\n\t\t\t\tvec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V;\n\n\t\t\t\t// Section 3.4: Transform back to ellipsoid configuration\n\t\t\t\treturn normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z)));\n\t\t\t}\n\n\t\t\tvoid main() {\n\t\t\t\tvec3 N = normalize(vOutputDirection);\n\t\t\t\tvec3 V = N; // Assume view direction equals normal for pre-filtering\n\n\t\t\t\tvec3 prefilteredColor = vec3(0.0);\n\t\t\t\tfloat totalWeight = 0.0;\n\n\t\t\t\t// For very low roughness, just sample the environment directly\n\t\t\t\tif (roughness < 0.001) {\n\t\t\t\t\tgl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Tangent space basis for VNDF sampling\n\t\t\t\tvec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\n\t\t\t\tvec3 tangent = normalize(cross(up, N));\n\t\t\t\tvec3 bitangent = cross(N, tangent);\n\n\t\t\t\tfor(uint i = 0u; i < uint(GGX_SAMPLES); i++) {\n\t\t\t\t\tvec2 Xi = hammersley(i, uint(GGX_SAMPLES));\n\n\t\t\t\t\t// For PMREM, V = N, so in tangent space V is always (0, 0, 1)\n\t\t\t\t\tvec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness);\n\n\t\t\t\t\t// Transform H back to world space\n\t\t\t\t\tvec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z);\n\t\t\t\t\tvec3 L = normalize(2.0 * dot(V, H) * H - V);\n\n\t\t\t\t\tfloat NdotL = max(dot(N, L), 0.0);\n\n\t\t\t\t\tif(NdotL > 0.0) {\n\t\t\t\t\t\t// Sample environment at fixed mip level\n\t\t\t\t\t\t// VNDF importance sampling handles the distribution filtering\n\t\t\t\t\t\tvec3 sampleColor = bilinearCubeUV(envMap, L, mipInt);\n\n\t\t\t\t\t\t// Weight by NdotL for the split-sum approximation\n\t\t\t\t\t\t// VNDF PDF naturally accounts for the visible microfacet distribution\n\t\t\t\t\t\tprefilteredColor += sampleColor * NdotL;\n\t\t\t\t\t\ttotalWeight += NdotL;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (totalWeight > 0.0) {\n\t\t\t\t\tprefilteredColor = prefilteredColor / totalWeight;\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = vec4(prefilteredColor, 1.0);\n\t\t\t}\n\t\t',blending:I,depthTest:!1,depthWrite:!1});return i}(i,e,t)}return i}_compileMaterial(e){const t=new o(new C,e);this._renderer.compile(t,Qn)}_sceneToCubeUV(e,t,n,i,r){const a=new L(90,1,t,n),l=[1,-1,1,1,1,1],d=[1,1,1,-1,-1,-1],u=this._renderer,f=u.autoClear,p=u.toneMapping;u.getClearColor(Jn),u.toneMapping=U,u.autoClear=!1;u.state.buffers.depth.getReversed()&&(u.setRenderTarget(i),u.clearDepth(),u.setRenderTarget(null)),null===this._backgroundBox&&(this._backgroundBox=new o(new s,new D({name:"PMREM.Background",side:c,depthWrite:!1,depthTest:!1})));const m=this._backgroundBox,h=m.material;let _=!1;const g=e.background;g?g.isColor&&(h.color.copy(g),e.background=null,_=!0):(h.color.copy(Jn),_=!0);for(let t=0;t<6;t++){const n=t%3;0===n?(a.up.set(0,l[t],0),a.position.set(r.x,r.y,r.z),a.lookAt(r.x+d[t],r.y,r.z)):1===n?(a.up.set(0,0,l[t]),a.position.set(r.x,r.y,r.z),a.lookAt(r.x,r.y+d[t],r.z)):(a.up.set(0,l[t],0),a.position.set(r.x,r.y,r.z),a.lookAt(r.x,r.y,r.z+d[t]));const o=this._cubeSize;si(i,n*o,t>2?o:0,o,o),u.setRenderTarget(i),_&&u.render(m,a),u.render(e,a)}u.toneMapping=p,u.autoClear=f,e.background=g}_textureToCubeUV(e,t){const n=this._renderer,i=e.mapping===R||e.mapping===b;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=ci()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=li());const r=i?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=r;r.uniforms.envMap.value=e;const o=this._cubeSize;si(t,0,0,3*o,2*o),n.setRenderTarget(t),n.render(a,Qn)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const i=this._lodMeshes.length;for(let t=1;tu-4?n-u+4:0),m=4*(this._cubeSize-f);s.envMap.value=e.texture,s.roughness.value=d,s.mipInt.value=u-t,si(r,p,m,3*f,2*f),i.setRenderTarget(r),i.render(o,Qn),s.envMap.value=r.texture,s.roughness.value=0,s.mipInt.value=u-n,si(e,p,m,3*f,2*f),i.setRenderTarget(e),i.render(o,Qn)}_blur(e,t,n,i,r){const a=this._pingPongRenderTarget;this._halfBlur(e,a,t,n,i,"latitudinal",r),this._halfBlur(a,e,n,n,i,"longitudinal",r)}_halfBlur(e,t,n,i,r,a,o){const s=this._renderer,l=this._blurMaterial;"latitudinal"!==a&&"longitudinal"!==a&&w("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[i];c.material=l;const d=l.uniforms,u=this._sizeLods[n]-1,f=isFinite(r)?Math.PI/(2*u):2*Math.PI/39,p=r/f,m=isFinite(r)?1+Math.floor(3*p):$n;m>$n&&E(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const h=[];let _=0;for(let e=0;e<$n;++e){const t=e/p,n=Math.exp(-t*t/2);h.push(n),0===e?_+=n:eg-4?i-g+4:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(c,Qn)}}function oi(e,t,n){const i=new N(e,t,n);return i.texture.mapping=a,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function si(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function li(){return new l({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1})}function ci(){return new l({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:di(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:I,depthTest:!1,depthWrite:!1})}function di(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}class ui extends N{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1},i=[n,n,n,n,n,n];this.texture=new B(i),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}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 n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new s(5,5,5),r=new l({name:"CubemapFromEquirect",uniforms:d(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:c,blending:I});r.uniforms.tEquirect.value=t;const a=new o(i,r),u=t.minFilter;t.minFilter===G&&(t.minFilter=O);return new H(1,10,this).update(e,a),t.minFilter=u,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,n=!0,i=!0){const r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,n,i);e.setRenderTarget(r)}}function fi(e){let t=new WeakMap,n=new WeakMap,i=null;function r(e,t){return t===V?e.mapping=R:t===W&&(e.mapping=b),e}function a(e){const n=e.target;n.removeEventListener("dispose",a);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}function o(e){const t=e.target;t.removeEventListener("dispose",o);const i=n.get(t);void 0!==i&&(n.delete(t),i.dispose())}return{get:function(s,l=!1){return null==s?null:l?function(t){if(t&&t.isTexture){const r=t.mapping,a=r===V||r===W,s=r===R||r===b;if(a||s){let r=n.get(t);const l=void 0!==r?r.texture.pmremVersion:0;if(t.isRenderTargetTexture&&t.pmremVersion!==l)return null===i&&(i=new ai(e)),r=a?i.fromEquirectangular(t,r):i.fromCubemap(t,r),r.texture.pmremVersion=t.pmremVersion,n.set(t,r),r.texture;if(void 0!==r)return r.texture;{const l=t.image;return a&&l&&l.height>0||s&&l&&function(e){let t=0;const n=6;for(let i=0;i0){const o=new ui(i.height);return o.fromEquirectangularTexture(e,n),t.set(n,o),n.addEventListener("dispose",a),r(o.texture,n.mapping)}return null}}}return n}(s)},dispose:function(){t=new WeakMap,n=new WeakMap,null!==i&&(i.dispose(),i=null)}}}function pi(e){const t={};function n(n){if(void 0!==t[n])return t[n];const i=e.getExtension(n);return t[n]=i,i}return{has:function(e){return null!==n(e)},init:function(){n("EXT_color_buffer_float"),n("WEBGL_clip_cull_distance"),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float"),n("WEBGL_multisampled_render_to_texture"),n("WEBGL_render_shared_exponent")},get:function(e){const t=n(e);return null===t&&k("WebGLRenderer: "+e+" extension not supported."),t}}}function mi(e,t,n,i){const r={},a=new WeakMap;function o(e){const s=e.target;null!==s.index&&t.remove(s.index);for(const e in s.attributes)t.remove(s.attributes[e]);s.removeEventListener("dispose",o),delete r[s.id];const l=a.get(s);l&&(t.remove(l),a.delete(s)),i.releaseStatesOfGeometry(s),!0===s.isInstancedBufferGeometry&&delete s._maxInstanceCount,n.memory.geometries--}function s(e){const n=[],i=e.index,r=e.attributes.position;let o=0;if(void 0===r)return;if(null!==i){const e=i.array;o=i.version;for(let t=0,i=e.length;t=65535?z:X)(n,1);s.version=o;const l=a.get(e);l&&t.remove(l),a.set(e,s)}return{get:function(e,t){return!0===r[t.id]||(t.addEventListener("dispose",o),r[t.id]=!0,n.memory.geometries++),t},update:function(n){const i=n.attributes;for(const n in i)t.update(i[n],e.ARRAY_BUFFER)},getWireframeAttribute:function(e){const t=a.get(e);if(t){const n=e.index;null!==n&&t.versionn.maxTextureSize&&(M=Math.ceil(S/n.maxTextureSize),S=n.maxTextureSize);const x=new Float32Array(S*M*4*u),A=new K(x,S,M,u);A.type=T,A.needsUpdate=!0;const R=4*E;for(let C=0;C\n\t\t\t#include \n\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t\t#ifdef LINEAR_TONE_MAPPING\n\t\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( AGX_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\t\t\t\t#elif defined( CUSTOM_TONE_MAPPING )\n\t\t\t\t\tgl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef SRGB_TRANSFER\n\t\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\t\t\t\t#endif\n\t\t\t}",depthTest:!1,depthWrite:!1}),d=new o(l,c),u=new P(-1,1,1,-1,0,1);let f,h=null,_=null,g=!1,v=null,E=[],M=!1;this.setSize=function(e,t){a.setSize(e,t),s.setSize(e,t);for(let n=0;n0&&!0===E[0].isRenderPass;const t=a.width,n=a.height;for(let e=0;e0)return e;const r=t*n;let a=bi[r];if(void 0===a&&(a=new Float32Array(r),bi[r]=a),0!==t){i.toArray(a,0);for(let i=1,r=0;i!==t;++i)r+=n,e[i].toArray(a,r)}return a}function wi(e,t){if(e.length!==t.length)return!1;for(let n=0,i=e.length;n0&&(this.seq=i.concat(r))}setValue(e,t,n,i){const r=this.map[t];void 0!==r&&r.setValue(e,n,i)}setOptional(e,t,n){const i=t[n];void 0!==i&&this.setValue(e,n,i)}static upload(e,t,n,i){for(let r=0,a=t.length;r!==a;++r){const a=t[r],o=n[a.id];!1!==o.needsUpdate&&a.setValue(e,o.value,i)}}static seqWithValue(e,t){const n=[];for(let i=0,r=e.length;i!==r;++i){const r=e[i];r.id in t&&n.push(r)}return n}}function br(e,t,n){const i=e.createShader(t);return e.shaderSource(i,n),e.compileShader(i),i}let Cr=0;const Pr=new e;function Lr(e,t,n){const i=e.getShaderParameter(t,e.COMPILE_STATUS),r=(e.getShaderInfoLog(t)||"").trim();if(i&&""===r)return"";const a=/ERROR: 0:(\d+)/.exec(r);if(a){const i=parseInt(a[1]);return n.toUpperCase()+"\n\n"+r+"\n\n"+function(e,t){const n=e.split("\n"),i=[],r=Math.max(t-6,0),a=Math.min(t+6,n.length);for(let e=r;e":" "} ${r}: ${n[e]}`)}return i.join("\n")}(e.getShaderSource(t),i)}return r}function Ur(e,t){const n=function(e){p._getMatrix(Pr,p.workingColorSpace,e);const t=`mat3( ${Pr.elements.map(e=>e.toFixed(4))} )`;switch(p.getTransfer(e)){case me:return[t,"LinearTransferOETF"];case m:return[t,"sRGBTransferOETF"];default:return E("WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(t);return[`vec4 ${e}( vec4 value ) {`,`\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,"}"].join("\n")}const Dr={[ne]:"Linear",[te]:"Reinhard",[ee]:"Cineon",[J]:"ACESFilmic",[Q]:"AgX",[$]:"Neutral",[Z]:"Custom"};function wr(e,t){const n=Dr[t];return void 0===n?(E("WebGLProgram: Unsupported toneMapping:",t),"vec3 "+e+"( vec3 color ) { return LinearToneMapping( color ); }"):"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}const Ir=new r;function Nr(){p.getLuminanceCoefficients(Ir);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${Ir.x.toFixed(4)}, ${Ir.y.toFixed(4)}, ${Ir.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function yr(e){return""!==e}function Fr(e,t){const n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function Or(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const Br=/^[ \t]*#include +<([\w\d./]+)>/gm;function Gr(e){return e.replace(Br,Vr)}const Hr=new Map;function Vr(e,t){let n=Gn[t];if(void 0===n){const e=Hr.get(t);if(void 0===e)throw new Error("Can not resolve #include <"+t+">");n=Gn[e],E('WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e)}return Gr(n)}const Wr=/#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 kr(e){return e.replace(Wr,zr)}function zr(e,t,n,i){let r="";for(let e=parseInt(t);e0&&(_+="\n"),g=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m].filter(yr).join("\n"),g.length>0&&(g+="\n")):(_=[Xr(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(yr).join("\n"),g=[Xr(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,m,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+d:"",n.envMap?"#define "+u:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.packedNormalMap?"#define USE_PACKED_NORMALMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas||n.batchingColor?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",n.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==U?"#define TONE_MAPPING":"",n.toneMapping!==U?Gn.tonemapping_pars_fragment:"",n.toneMapping!==U?wr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",Gn.colorspace_pars_fragment,Ur("linearToOutputTexel",n.outputColorSpace),Nr(),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(yr).join("\n")),o=Gr(o),o=Fr(o,n),o=Or(o,n),s=Gr(s),s=Fr(s,n),s=Or(s,n),o=kr(o),s=kr(s),!0!==n.isRawShaderMaterial&&(v="#version 300 es\n",_=[p,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,g=["#define varying in",n.glslVersion===le?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===le?"":"#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("\n")+"\n"+g);const S=v+_+o,M=v+g+s,T=br(r,r.VERTEX_SHADER,S),x=br(r,r.FRAGMENT_SHADER,M);function A(t){if(e.debug.checkShaderErrors){const n=r.getProgramInfoLog(h)||"",i=r.getShaderInfoLog(T)||"",a=r.getShaderInfoLog(x)||"",o=n.trim(),s=i.trim(),l=a.trim();let c=!0,d=!0;if(!1===r.getProgramParameter(h,r.LINK_STATUS))if(c=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(r,h,T,x);else{const e=Lr(r,T,"vertex"),n=Lr(r,x,"fragment");w("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(h,r.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+o+"\n"+e+"\n"+n)}else""!==o?E("WebGLProgram: Program Info Log:",o):""!==s&&""!==l||(d=!1);d&&(t.diagnostics={runnable:c,programLog:o,vertexShader:{log:s,prefix:_},fragmentShader:{log:l,prefix:g}})}r.deleteShader(T),r.deleteShader(x),R=new Rr(r,h),b=function(e,t){const n={},i=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let r=0;r0,Q=r.clearcoat>0,J=r.dispersion>0,ee=r.iridescence>0,te=r.sheen>0,ne=r.transmission>0,ie=$&&!!r.anisotropyMap,re=Q&&!!r.clearcoatMap,ae=Q&&!!r.clearcoatNormalMap,oe=Q&&!!r.clearcoatRoughnessMap,se=ee&&!!r.iridescenceMap,le=ee&&!!r.iridescenceThicknessMap,ce=te&&!!r.sheenColorMap,de=te&&!!r.sheenRoughnessMap,ue=!!r.specularMap,fe=!!r.specularColorMap,pe=!!r.specularIntensityMap,me=ne&&!!r.transmissionMap,he=ne&&!!r.thicknessMap,Se=!!r.gradientMap,Ae=!!r.alphaMap,Re=r.alphaTest>0,be=!!r.alphaHash,Ce=!!r.extensions;let Pe=U;r.toneMapped&&(null!==F&&!0!==F.isXRRenderTarget||(Pe=e.toneMapping));const Le={shaderID:C,shaderType:r.type,shaderName:r.name,vertexShader:D,fragmentShader:w,defines:r.defines,customVertexShaderID:I,customFragmentShaderID:N,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:_,batching:G,batchingColor:G&&null!==S._colorsTexture,instancing:B,instancingColor:B&&null!==S.instanceColor,instancingMorph:B&&null!==S.morphTexture,outputColorSpace:null===F?e.outputColorSpace:!0===F.isXRRenderTarget?F.texture.colorSpace:p.workingColorSpace,alphaToCoverage:!!r.alphaToCoverage,map:H,matcap:V,envMap:W,envMapMode:W&&R.mapping,envMapCubeUVHeight:b,aoMap:k,lightMap:z,bumpMap:X,normalMap:Y,displacementMap:K,emissiveMap:q,normalMapObjectSpace:Y&&r.normalMapType===Ee,normalMapTangentSpace:Y&&r.normalMapType===ve,packedNormalMap:Y&&r.normalMapType===ve&&(Ue=r.normalMap.format,Ue===Me||Ue===Te||Ue===xe),metalnessMap:j,roughnessMap:Z,anisotropy:$,anisotropyMap:ie,clearcoat:Q,clearcoatMap:re,clearcoatNormalMap:ae,clearcoatRoughnessMap:oe,dispersion:J,iridescence:ee,iridescenceMap:se,iridescenceThicknessMap:le,sheen:te,sheenColorMap:ce,sheenRoughnessMap:de,specularMap:ue,specularColorMap:fe,specularIntensityMap:pe,transmission:ne,transmissionMap:me,thicknessMap:he,gradientMap:Se,opaque:!1===r.transparent&&r.blending===ge&&!1===r.alphaToCoverage,alphaMap:Ae,alphaTest:Re,alphaHash:be,combine:r.combine,mapUv:H&&v(r.map.channel),aoMapUv:k&&v(r.aoMap.channel),lightMapUv:z&&v(r.lightMap.channel),bumpMapUv:X&&v(r.bumpMap.channel),normalMapUv:Y&&v(r.normalMap.channel),displacementMapUv:K&&v(r.displacementMap.channel),emissiveMapUv:q&&v(r.emissiveMap.channel),metalnessMapUv:j&&v(r.metalnessMap.channel),roughnessMapUv:Z&&v(r.roughnessMap.channel),anisotropyMapUv:ie&&v(r.anisotropyMap.channel),clearcoatMapUv:re&&v(r.clearcoatMap.channel),clearcoatNormalMapUv:ae&&v(r.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:oe&&v(r.clearcoatRoughnessMap.channel),iridescenceMapUv:se&&v(r.iridescenceMap.channel),iridescenceThicknessMapUv:le&&v(r.iridescenceThicknessMap.channel),sheenColorMapUv:ce&&v(r.sheenColorMap.channel),sheenRoughnessMapUv:de&&v(r.sheenRoughnessMap.channel),specularMapUv:ue&&v(r.specularMap.channel),specularColorMapUv:fe&&v(r.specularColorMap.channel),specularIntensityMapUv:pe&&v(r.specularIntensityMap.channel),transmissionMapUv:me&&v(r.transmissionMap.channel),thicknessMapUv:he&&v(r.thicknessMap.channel),alphaMapUv:Ae&&v(r.alphaMap.channel),vertexTangents:!!T.attributes.tangent&&(Y||$),vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors&&!!T.attributes.color&&4===T.attributes.color.itemSize,pointsUvs:!0===S.isPoints&&!!T.attributes.uv&&(H||Ae),fog:!!M,useFog:!0===r.fog,fogExp2:!!M&&M.isFogExp2,flatShading:!1===r.wireframe&&(!0===r.flatShading||void 0===T.attributes.normal&&!1===Y&&(r.isMeshLambertMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.isMeshPhysicalMaterial)),sizeAttenuation:!0===r.sizeAttenuation,logarithmicDepthBuffer:h,reversedDepthBuffer:O,skinning:!0===S.isSkinnedMesh,morphTargets:void 0!==T.morphAttributes.position,morphNormals:void 0!==T.morphAttributes.normal,morphColors:void 0!==T.morphAttributes.color,morphTargetsCount:L,morphTextureStride:y,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numSpotLightMaps:s.spotLightMap.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numSpotLightShadowsWithMaps:s.numSpotLightShadowsWithMaps,numLightProbes:s.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:e.shadowMap.enabled&&u.length>0,shadowMapType:e.shadowMap.type,toneMapping:Pe,decodeVideoTexture:H&&!0===r.map.isVideoTexture&&p.getTransfer(r.map.colorSpace)===m,decodeVideoTextureEmissive:q&&!0===r.emissiveMap.isVideoTexture&&p.getTransfer(r.emissiveMap.colorSpace)===m,premultipliedAlpha:r.premultipliedAlpha,doubleSided:r.side===_e,flipSided:r.side===c,useDepthPacking:r.depthPacking>=0,depthPacking:r.depthPacking||0,index0AttributeName:r.index0AttributeName,extensionClipCullDistance:Ce&&!0===r.extensions.clipCullDistance&&n.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ce&&!0===r.extensions.multiDraw||G)&&n.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:n.has("KHR_parallel_shader_compile"),customProgramCacheKey:r.customProgramCacheKey()};var Ue;return Le.vertexUv1s=d.has(1),Le.vertexUv2s=d.has(2),Le.vertexUv3s=d.has(3),d.clear(),Le},getProgramCacheKey:function(t){const n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),void 0!==t.defines)for(const e in t.defines)n.push(e),n.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(!function(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}(n,t),function(e,t){s.disableAll(),t.instancing&&s.enable(0);t.instancingColor&&s.enable(1);t.instancingMorph&&s.enable(2);t.matcap&&s.enable(3);t.envMap&&s.enable(4);t.normalMapObjectSpace&&s.enable(5);t.normalMapTangentSpace&&s.enable(6);t.clearcoat&&s.enable(7);t.iridescence&&s.enable(8);t.alphaTest&&s.enable(9);t.vertexColors&&s.enable(10);t.vertexAlphas&&s.enable(11);t.vertexUv1s&&s.enable(12);t.vertexUv2s&&s.enable(13);t.vertexUv3s&&s.enable(14);t.vertexTangents&&s.enable(15);t.anisotropy&&s.enable(16);t.alphaHash&&s.enable(17);t.batching&&s.enable(18);t.dispersion&&s.enable(19);t.batchingColor&&s.enable(20);t.gradientMap&&s.enable(21);t.packedNormalMap&&s.enable(22);e.push(s.mask),s.disableAll(),t.fog&&s.enable(0);t.useFog&&s.enable(1);t.flatShading&&s.enable(2);t.logarithmicDepthBuffer&&s.enable(3);t.reversedDepthBuffer&&s.enable(4);t.skinning&&s.enable(5);t.morphTargets&&s.enable(6);t.morphNormals&&s.enable(7);t.morphColors&&s.enable(8);t.premultipliedAlpha&&s.enable(9);t.shadowMapEnabled&&s.enable(10);t.doubleSided&&s.enable(11);t.flipSided&&s.enable(12);t.useDepthPacking&&s.enable(13);t.dithering&&s.enable(14);t.transmission&&s.enable(15);t.sheen&&s.enable(16);t.opaque&&s.enable(17);t.pointsUvs&&s.enable(18);t.decodeVideoTexture&&s.enable(19);t.decodeVideoTextureEmissive&&s.enable(20);t.alphaToCoverage&&s.enable(21);e.push(s.mask)}(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()},getUniforms:function(e){const t=g[e.type];let n;if(t){const e=Vn[t];n=he.clone(e.uniforms)}else n=e.uniforms;return n},acquireProgram:function(t,n){let i=f.get(n);return void 0!==i?++i.usedTimes:(i=new Zr(e,n,t,r),u.push(i),f.set(n,i)),i},releaseProgram:function(e){if(0===--e.usedTimes){const t=u.indexOf(e);u[t]=u[u.length-1],u.pop(),f.delete(e.cacheKey),e.destroy()}},releaseShaderCache:function(e){l.remove(e)},programs:u,dispose:function(){l.dispose()}}}function ta(){let e=new WeakMap;return{has:function(t){return e.has(t)},get:function(t){let n=e.get(t);return void 0===n&&(n={},e.set(t,n)),n},remove:function(t){e.delete(t)},update:function(t,n,i){e.get(t)[n]=i},dispose:function(){e=new WeakMap}}}function na(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.material.id!==t.material.id?e.material.id-t.material.id:e.materialVariant!==t.materialVariant?e.materialVariant-t.materialVariant:e.z!==t.z?e.z-t.z:e.id-t.id}function ia(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function ra(){const e=[];let t=0;const n=[],i=[],r=[];function a(e){let t=0;return e.isInstancedMesh&&(t+=2),e.isSkinnedMesh&&(t+=1),t}function o(n,i,r,o,s,l){let c=e[t];return void 0===c?(c={id:n.id,object:n,geometry:i,material:r,materialVariant:a(n),groupOrder:o,renderOrder:n.renderOrder,z:s,group:l},e[t]=c):(c.id=n.id,c.object=n,c.geometry=i,c.material=r,c.materialVariant=a(n),c.groupOrder=o,c.renderOrder=n.renderOrder,c.z=s,c.group=l),t++,c}return{opaque:n,transmissive:i,transparent:r,init:function(){t=0,n.length=0,i.length=0,r.length=0},push:function(e,t,a,s,l,c){const d=o(e,t,a,s,l,c);a.transmission>0?i.push(d):!0===a.transparent?r.push(d):n.push(d)},unshift:function(e,t,a,s,l,c){const d=o(e,t,a,s,l,c);a.transmission>0?i.unshift(d):!0===a.transparent?r.unshift(d):n.unshift(d)},finish:function(){for(let n=t,i=e.length;n1&&n.sort(e||na),i.length>1&&i.sort(t||ia),r.length>1&&r.sort(t||ia)}}}function aa(){let e=new WeakMap;return{get:function(t,n){const i=e.get(t);let r;return void 0===i?(r=new ra,e.set(t,[r])):n>=i.length?(r=new ra,i.push(r)):r=i[n],r},dispose:function(){e=new WeakMap}}}function oa(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let i;switch(t.type){case"DirectionalLight":i={direction:new r,color:new n};break;case"SpotLight":i={position:new r,direction:new r,color:new n,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new r,color:new n,distance:0,decay:0};break;case"HemisphereLight":i={direction:new r,skyColor:new n,groundColor:new n};break;case"RectAreaLight":i={color:new n,position:new r,halfWidth:new r,halfHeight:new r}}return e[t.id]=i,i}}}let sa=0;function la(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function ca(e){const n=new oa,i=function(){const e={};return{get:function(n){if(void 0!==e[n.id])return e[n.id];let i;switch(n.type){case"DirectionalLight":case"SpotLight":i={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t};break;case"PointLight":i={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t,shadowCameraNear:1,shadowCameraFar:1e3}}return e[n.id]=i,i}}}(),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-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,numLightProbes:0};for(let e=0;e<9;e++)a.probe.push(new r);const o=new r,s=new f,l=new f;return{setup:function(t){let r=0,o=0,s=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let l=0,c=0,d=0,u=0,f=0,p=0,m=0,h=0,_=0,g=0,v=0;t.sort(la);for(let e=0,E=t.length;e0&&(!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=Hn.LTC_FLOAT_1,a.rectAreaLTC2=Hn.LTC_FLOAT_2):(a.rectAreaLTC1=Hn.LTC_HALF_1,a.rectAreaLTC2=Hn.LTC_HALF_2)),a.ambient[0]=r,a.ambient[1]=o,a.ambient[2]=s;const E=a.hash;E.directionalLength===l&&E.pointLength===c&&E.spotLength===d&&E.rectAreaLength===u&&E.hemiLength===f&&E.numDirectionalShadows===p&&E.numPointShadows===m&&E.numSpotShadows===h&&E.numSpotMaps===_&&E.numLightProbes===v||(a.directional.length=l,a.spot.length=d,a.rectArea.length=u,a.point.length=c,a.hemi.length=f,a.directionalShadow.length=p,a.directionalShadowMap.length=p,a.pointShadow.length=m,a.pointShadowMap.length=m,a.spotShadow.length=h,a.spotShadowMap.length=h,a.directionalShadowMatrix.length=p,a.pointShadowMatrix.length=m,a.spotLightMatrix.length=h+_-g,a.spotLightMap.length=_,a.numSpotLightShadowsWithMaps=g,a.numLightProbes=v,E.directionalLength=l,E.pointLength=c,E.spotLength=d,E.rectAreaLength=u,E.hemiLength=f,E.numDirectionalShadows=p,E.numPointShadows=m,E.numSpotShadows=h,E.numSpotMaps=_,E.numLightProbes=v,a.version=sa++)},setupView:function(e,t){let n=0,i=0,r=0,c=0,d=0;const u=t.matrixWorldInverse;for(let t=0,f=e.length;t=r.length?(a=new da(e),r.push(a)):a=r[i],a},dispose:function(){t=new WeakMap}}}const fa=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],pa=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],ma=new f,ha=new r,_a=new r;function ga(e,n,i){let r=new Ae;const a=new t,s=new t,d=new Y,u=new Re,f=new be,p={},m=i.maxTextureSize,h={[_]:c,[c]:_,[_e]:_e},g=new l({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new t},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg;\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r;\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) );\n\tgl_FragColor = vec4( mean, std_dev, 0.0, 1.0 );\n}"}),v=g.clone();v.defines.HORIZONTAL_PASS=1;const M=new C;M.setAttribute("position",new y(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const x=new o(M,g),A=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=de;let R=this.type;function b(t,i){const r=n.update(x);g.defines.VSM_SAMPLES!==t.blurSamples&&(g.defines.VSM_SAMPLES=t.blurSamples,v.defines.VSM_SAMPLES=t.blurSamples,g.needsUpdate=!0,v.needsUpdate=!0),null===t.mapPass&&(t.mapPass=new N(a.x,a.y,{format:Me,type:S})),g.uniforms.shadow_pass.value=t.map.depthTexture,g.uniforms.resolution.value=t.mapSize,g.uniforms.radius.value=t.radius,e.setRenderTarget(t.mapPass),e.clear(),e.renderBufferDirect(i,null,r,g,x,null),v.uniforms.shadow_pass.value=t.mapPass.texture,v.uniforms.resolution.value=t.mapSize,v.uniforms.radius.value=t.radius,e.setRenderTarget(t.map),e.clear(),e.renderBufferDirect(i,null,r,v,x,null)}function P(t,n,i,r){let a=null;const o=!0===i.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==o)a=o;else if(a=!0===i.isPointLight?f:u,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0||!0===n.alphaToCoverage){const e=a.uuid,t=n.uuid;let i=p[e];void 0===i&&(i={},p[e]=i);let r=i[t];void 0===r&&(r=a.clone(),i[t]=r,n.addEventListener("dispose",U)),a=r}if(a.visible=n.visible,a.wireframe=n.wireframe,a.side=r===ce?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:h[n.side],a.alphaMap=n.alphaMap,a.alphaTest=!0===n.alphaToCoverage?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial){e.properties.get(a).light=i}return a}function L(t,i,a,o,s){if(!1===t.visible)return;if(t.layers.test(i.layers)&&(t.isMesh||t.isLine||t.isPoints)&&(t.castShadow||t.receiveShadow&&s===ce)&&(!t.frustumCulled||r.intersectsObject(t))){t.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,t.matrixWorld);const r=n.update(t),l=t.material;if(Array.isArray(l)){const n=r.groups;for(let c=0,d=n.length;ce.needsUpdate=!0):e.material.needsUpdate=!0)});for(let o=0,l=t.length;om||a.y>m)&&(a.x>m&&(s.x=Math.floor(m/p.x),a.x=s.x*p.x,c.mapSize.x=s.x),a.y>m&&(s.y=Math.floor(m/p.y),a.y=s.y*p.y,c.mapSize.y=s.y));const h=e.state.buffers.depth.getReversed();if(c.camera._reversedDepth=h,null===c.map||!0===f){if(null!==c.map&&(null!==c.map.depthTexture&&(c.map.depthTexture.dispose(),c.map.depthTexture=null),c.map.dispose()),this.type===ce){if(l.isPointLight){E("WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.");continue}c.map=new N(a.x,a.y,{format:Me,type:S,minFilter:O,magFilter:O,generateMipmaps:!1}),c.map.texture.name=l.name+".shadowMap",c.map.depthTexture=new oe(a.x,a.y,T),c.map.depthTexture.name=l.name+".shadowMapDepth",c.map.depthTexture.format=Pe,c.map.depthTexture.compareFunction=null,c.map.depthTexture.minFilter=Le,c.map.depthTexture.magFilter=Le}else l.isPointLight?(c.map=new ui(a.x),c.map.depthTexture=new Ue(a.x,De)):(c.map=new N(a.x,a.y),c.map.depthTexture=new oe(a.x,a.y,De)),c.map.depthTexture.name=l.name+".shadowMap",c.map.depthTexture.format=Pe,this.type===de?(c.map.depthTexture.compareFunction=h?re:ae,c.map.depthTexture.minFilter=O,c.map.depthTexture.magFilter=O):(c.map.depthTexture.compareFunction=null,c.map.depthTexture.minFilter=Le,c.map.depthTexture.magFilter=Le);c.camera.updateProjectionMatrix()}const _=c.map.isWebGLCubeRenderTarget?6:1;for(let t=0;t<_;t++){if(c.map.isWebGLCubeRenderTarget)e.setRenderTarget(c.map,t),e.clear();else{0===t&&(e.setRenderTarget(c.map),e.clear());const n=c.getViewport(t);d.set(s.x*n.x,s.y*n.y,s.x*n.z,s.y*n.w),u.viewport(d)}if(l.isPointLight){const e=c.camera,n=c.matrix,i=l.distance||e.far;i!==e.far&&(e.far=i,e.updateProjectionMatrix()),ha.setFromMatrixPosition(l.matrixWorld),e.position.copy(ha),_a.copy(e.position),_a.add(fa[t]),e.up.copy(pa[t]),e.lookAt(_a),e.updateMatrixWorld(),n.makeTranslation(-ha.x,-ha.y,-ha.z),ma.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),c._frustum.setFromProjectionMatrix(ma,e.coordinateSystem,e.reversedDepth)}else c.updateMatrices(l);r=c.getFrustum(),L(n,i,c.camera,l,this.type)}!0!==c.isPointLightShadow&&this.type===ce&&b(c,i),c.needsUpdate=!1}R=this.type,A.needsUpdate=!1,e.setRenderTarget(o,l,c)}}function va(e,t){const i=new function(){let t=!1;const n=new Y;let i=null;const r=new Y(0,0,0,0);return{setMask:function(n){i===n||t||(e.colorMask(n,n,n,n),i=n)},setLocked:function(e){t=e},setClear:function(t,i,a,o,s){!0===s&&(t*=o,i*=o,a*=o),n.set(t,i,a,o),!1===r.equals(n)&&(e.clearColor(t,i,a,o),r.copy(n))},reset:function(){t=!1,i=null,r.set(-1,0,0,0)}}},r=new function(){let n=!1,i=!1,r=null,a=null,o=null;return{setReversed:function(e){if(i!==e){const n=t.get("EXT_clip_control");e?n.clipControlEXT(n.LOWER_LEFT_EXT,n.ZERO_TO_ONE_EXT):n.clipControlEXT(n.LOWER_LEFT_EXT,n.NEGATIVE_ONE_TO_ONE_EXT),i=e;const r=o;o=null,this.setClear(r)}},getReversed:function(){return i},setTest:function(t){t?z(e.DEPTH_TEST):X(e.DEPTH_TEST)},setMask:function(t){r===t||n||(e.depthMask(t),r=t)},setFunc:function(t){if(i&&(t=ut[t]),a!==t){switch(t){case it:e.depthFunc(e.NEVER);break;case nt:e.depthFunc(e.ALWAYS);break;case tt:e.depthFunc(e.LESS);break;case we:e.depthFunc(e.LEQUAL);break;case et:e.depthFunc(e.EQUAL);break;case Je:e.depthFunc(e.GEQUAL);break;case Qe:e.depthFunc(e.GREATER);break;case $e:e.depthFunc(e.NOTEQUAL);break;default:e.depthFunc(e.LEQUAL)}a=t}},setLocked:function(e){n=e},setClear:function(t){o!==t&&(o=t,i&&(t=1-t),e.clearDepth(t))},reset:function(){n=!1,r=null,a=null,o=null,i=!1}}},a=new function(){let t=!1,n=null,i=null,r=null,a=null,o=null,s=null,l=null,c=null;return{setTest:function(n){t||(n?z(e.STENCIL_TEST):X(e.STENCIL_TEST))},setMask:function(i){n===i||t||(e.stencilMask(i),n=i)},setFunc:function(t,n,o){i===t&&r===n&&a===o||(e.stencilFunc(t,n,o),i=t,r=n,a=o)},setOp:function(t,n,i){o===t&&s===n&&l===i||(e.stencilOp(t,n,i),o=t,s=n,l=i)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,n=null,i=null,r=null,a=null,o=null,s=null,l=null,c=null}}},o=new WeakMap,s=new WeakMap;let l={},d={},u=new WeakMap,f=[],p=null,m=!1,h=null,_=null,g=null,v=null,E=null,S=null,M=null,T=new n(0,0,0),x=0,A=!1,R=null,b=null,C=null,P=null,L=null;const U=e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let D=!1,N=0;const y=e.getParameter(e.VERSION);-1!==y.indexOf("WebGL")?(N=parseFloat(/^WebGL (\d)/.exec(y)[1]),D=N>=1):-1!==y.indexOf("OpenGL ES")&&(N=parseFloat(/^OpenGL ES (\d)/.exec(y)[1]),D=N>=2);let F=null,O={};const B=e.getParameter(e.SCISSOR_BOX),G=e.getParameter(e.VIEWPORT),H=(new Y).fromArray(B),V=(new Y).fromArray(G);function W(t,n,i,r){const a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;on||r.height>n)&&(i=n/Math.max(r.width,r.height)),i<1){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame){const n=Math.floor(i*r.width),a=Math.floor(i*r.height);void 0===f&&(f=g(n,a));const o=t?g(n,a):f;o.width=n,o.height=a;return o.getContext("2d").drawImage(e,0,0,n,a),E("WebGLRenderer: Texture has been resized from ("+r.width+"x"+r.height+") to ("+n+"x"+a+")."),o}return"data"in e&&E("WebGLRenderer: Image in DataTexture is too big ("+r.width+"x"+r.height+")."),e}return e}function S(e){return e.generateMipmaps}function A(t){e.generateMipmap(t)}function R(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function b(t,i,r,a,o=!1){if(null!==t){if(void 0!==e[t])return e[t];E("WebGLRenderer: Attempt to use non-existing WebGL internal format '"+t+"'")}let s=i;if(i===e.RED&&(r===e.FLOAT&&(s=e.R32F),r===e.HALF_FLOAT&&(s=e.R16F),r===e.UNSIGNED_BYTE&&(s=e.R8)),i===e.RED_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.R8UI),r===e.UNSIGNED_SHORT&&(s=e.R16UI),r===e.UNSIGNED_INT&&(s=e.R32UI),r===e.BYTE&&(s=e.R8I),r===e.SHORT&&(s=e.R16I),r===e.INT&&(s=e.R32I)),i===e.RG&&(r===e.FLOAT&&(s=e.RG32F),r===e.HALF_FLOAT&&(s=e.RG16F),r===e.UNSIGNED_BYTE&&(s=e.RG8)),i===e.RG_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RG8UI),r===e.UNSIGNED_SHORT&&(s=e.RG16UI),r===e.UNSIGNED_INT&&(s=e.RG32UI),r===e.BYTE&&(s=e.RG8I),r===e.SHORT&&(s=e.RG16I),r===e.INT&&(s=e.RG32I)),i===e.RGB_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RGB8UI),r===e.UNSIGNED_SHORT&&(s=e.RGB16UI),r===e.UNSIGNED_INT&&(s=e.RGB32UI),r===e.BYTE&&(s=e.RGB8I),r===e.SHORT&&(s=e.RGB16I),r===e.INT&&(s=e.RGB32I)),i===e.RGBA_INTEGER&&(r===e.UNSIGNED_BYTE&&(s=e.RGBA8UI),r===e.UNSIGNED_SHORT&&(s=e.RGBA16UI),r===e.UNSIGNED_INT&&(s=e.RGBA32UI),r===e.BYTE&&(s=e.RGBA8I),r===e.SHORT&&(s=e.RGBA16I),r===e.INT&&(s=e.RGBA32I)),i===e.RGB&&(r===e.UNSIGNED_INT_5_9_9_9_REV&&(s=e.RGB9_E5),r===e.UNSIGNED_INT_10F_11F_11F_REV&&(s=e.R11F_G11F_B10F)),i===e.RGBA){const t=o?me:p.getTransfer(a);r===e.FLOAT&&(s=e.RGBA32F),r===e.HALF_FLOAT&&(s=e.RGBA16F),r===e.UNSIGNED_BYTE&&(s=t===m?e.SRGB8_ALPHA8:e.RGBA8),r===e.UNSIGNED_SHORT_4_4_4_4&&(s=e.RGBA4),r===e.UNSIGNED_SHORT_5_5_5_1&&(s=e.RGB5_A1)}return s!==e.R16F&&s!==e.R32F&&s!==e.RG16F&&s!==e.RG32F&&s!==e.RGBA16F&&s!==e.RGBA32F||n.get("EXT_color_buffer_float"),s}function C(t,n){let i;return t?null===n||n===De||n===Lt?i=e.DEPTH24_STENCIL8:n===T?i=e.DEPTH32F_STENCIL8:n===Ut&&(i=e.DEPTH24_STENCIL8,E("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||n===De||n===Lt?i=e.DEPTH_COMPONENT24:n===T?i=e.DEPTH_COMPONENT32F:n===Ut&&(i=e.DEPTH_COMPONENT16),i}function P(e,t){return!0===S(e)||e.isFramebufferTexture&&e.minFilter!==Le&&e.minFilter!==O?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function L(e){const t=e.target;t.removeEventListener("dispose",L),function(e){const t=r.get(e);if(void 0===t.__webglInit)return;const n=e.source,i=h.get(n);if(i){const r=i[t.__cacheKey];r.usedTimes--,0===r.usedTimes&&D(e),0===Object.keys(i).length&&h.delete(n)}r.remove(e)}(t),t.isVideoTexture&&u.delete(t)}function U(t){const n=t.target;n.removeEventListener("dispose",U),function(t){const n=r.get(t);t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture));if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let i=0;i0&&a.__version!==t.version){const e=t.image;if(null===e)E("WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void z(a,t,n);E("WebGLRenderer: Texture marked for update but image is incomplete")}}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);i.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+n)}const y={[_t]:e.REPEAT,[ht]:e.CLAMP_TO_EDGE,[mt]:e.MIRRORED_REPEAT},B={[Le]:e.NEAREST,[Et]:e.NEAREST_MIPMAP_NEAREST,[vt]:e.NEAREST_MIPMAP_LINEAR,[O]:e.LINEAR,[gt]:e.LINEAR_MIPMAP_NEAREST,[G]:e.LINEAR_MIPMAP_LINEAR},H={[Rt]:e.NEVER,[At]:e.ALWAYS,[xt]:e.LESS,[ae]:e.LEQUAL,[Tt]:e.EQUAL,[re]:e.GEQUAL,[Mt]:e.GREATER,[St]:e.NOTEQUAL};function V(t,i){if(i.type!==T||!1!==n.has("OES_texture_float_linear")||i.magFilter!==O&&i.magFilter!==gt&&i.magFilter!==vt&&i.magFilter!==G&&i.minFilter!==O&&i.minFilter!==gt&&i.minFilter!==vt&&i.minFilter!==G||E("WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(t,e.TEXTURE_WRAP_S,y[i.wrapS]),e.texParameteri(t,e.TEXTURE_WRAP_T,y[i.wrapT]),t!==e.TEXTURE_3D&&t!==e.TEXTURE_2D_ARRAY||e.texParameteri(t,e.TEXTURE_WRAP_R,y[i.wrapR]),e.texParameteri(t,e.TEXTURE_MAG_FILTER,B[i.magFilter]),e.texParameteri(t,e.TEXTURE_MIN_FILTER,B[i.minFilter]),i.compareFunction&&(e.texParameteri(t,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(t,e.TEXTURE_COMPARE_FUNC,H[i.compareFunction])),!0===n.has("EXT_texture_filter_anisotropic")){if(i.magFilter===Le)return;if(i.minFilter!==vt&&i.minFilter!==G)return;if(i.type===T&&!1===n.has("OES_texture_float_linear"))return;if(i.anisotropy>1||r.get(i).__currentAnisotropy){const o=n.get("EXT_texture_filter_anisotropic");e.texParameterf(t,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(i.anisotropy,a.getMaxAnisotropy())),r.get(i).__currentAnisotropy=i.anisotropy}}}function W(t,n){let i=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",L));const r=n.source;let a=h.get(r);void 0===a&&(a={},h.set(r,a));const o=function(e){const t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}(n);if(o!==t.__cacheKey){void 0===a[o]&&(a[o]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,i=!0),a[o].usedTimes++;const r=a[t.__cacheKey];void 0!==r&&(a[t.__cacheKey].usedTimes--,0===r.usedTimes&&D(n)),t.__cacheKey=o,t.__webglTexture=a[o].texture}return i}function k(e,t,n){return Math.floor(Math.floor(e/n)/t)}function z(t,n,s){let l=e.TEXTURE_2D;(n.isDataArrayTexture||n.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),n.isData3DTexture&&(l=e.TEXTURE_3D);const c=W(t,n),d=n.source;i.bindTexture(l,t.__webglTexture,e.TEXTURE0+s);const u=r.get(d);if(d.version!==u.__version||!0===c){i.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),r=n.colorSpace===bt?null:p.getPrimaries(n.colorSpace),f=n.colorSpace===bt||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,f);let m=v(n.image,!1,a.maxTextureSize);m=J(n,m);const h=o.convert(n.format,n.colorSpace),_=o.convert(n.type);let g,M=b(n.internalFormat,h,_,n.colorSpace,n.isVideoTexture);V(l,n);const T=n.mipmaps,R=!0!==n.isVideoTexture,L=void 0===u.__version||!0===c,U=d.dataReady,D=P(n,m);if(n.isDepthTexture)M=C(n.format===Ct,n.type),L&&(R?i.texStorage2D(e.TEXTURE_2D,1,M,m.width,m.height):i.texImage2D(e.TEXTURE_2D,0,M,m.width,m.height,0,h,_,null));else if(n.isDataTexture)if(T.length>0){R&&L&&i.texStorage2D(e.TEXTURE_2D,D,M,T[0].width,T[0].height);for(let t=0,n=T.length;te.start-t.start);let s=0;for(let e=1;e0){const r=Pt(g.width,g.height,n.format,n.type);for(const a of n.layerUpdates){const n=g.data.subarray(a*r/g.data.BYTES_PER_ELEMENT,(a+1)*r/g.data.BYTES_PER_ELEMENT);i.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,a,g.width,g.height,1,h,n)}n.clearLayerUpdates()}else i.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,g.data)}else i.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,M,g.width,g.height,m.depth,0,g.data,0,0);else E("WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else R?U&&i.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,_,g.data):i.texImage3D(e.TEXTURE_2D_ARRAY,t,M,g.width,g.height,m.depth,0,h,_,g.data)}else{R&&L&&i.texStorage2D(e.TEXTURE_2D,D,M,T[0].width,T[0].height);for(let t=0,r=T.length;t0){const t=Pt(m.width,m.height,n.format,n.type);for(const r of n.layerUpdates){const n=m.data.subarray(r*t/m.data.BYTES_PER_ELEMENT,(r+1)*t/m.data.BYTES_PER_ELEMENT);i.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,r,m.width,m.height,1,h,_,n)}n.clearLayerUpdates()}else i.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)}else i.texImage3D(e.TEXTURE_2D_ARRAY,0,M,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isData3DTexture)R?(L&&i.texStorage3D(e.TEXTURE_3D,D,M,m.width,m.height,m.depth),U&&i.texSubImage3D(e.TEXTURE_3D,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)):i.texImage3D(e.TEXTURE_3D,0,M,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isFramebufferTexture){if(L)if(R)i.texStorage2D(e.TEXTURE_2D,D,M,m.width,m.height);else{let t=m.width,n=m.height;for(let r=0;r>=1,n>>=1}}else if(T.length>0){if(R&&L){const t=ee(T[0]);i.texStorage2D(e.TEXTURE_2D,D,M,t.width,t.height)}for(let t=0,n=T.length;t>d),r=Math.max(1,n.height>>d);c===e.TEXTURE_3D||c===e.TEXTURE_2D_ARRAY?i.texImage3D(c,d,p,t,r,n.depth,0,u,f,null):i.texImage2D(c,d,p,t,r,0,u,f,null)}i.bindFramebuffer(e.FRAMEBUFFER,t),Q(n)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,s,c,h.__webglTexture,0,$(n)):(c===e.TEXTURE_2D||c>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,s,c,h.__webglTexture,d),i.bindFramebuffer(e.FRAMEBUFFER,null)}function Y(t,n,i){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){const r=n.depthTexture,a=r&&r.isDepthTexture?r.type:null,o=C(n.stencilBuffer,a),s=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;Q(n)?l.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,$(n),o,n.width,n.height):i?e.renderbufferStorageMultisample(e.RENDERBUFFER,$(n),o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,t)}else{const t=n.textures;for(let r=0;r{delete n.__boundDepthTexture,delete n.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),n.__depthDisposeCallback=t}n.__boundDepthTexture=e}if(t.depthTexture&&!n.__autoAllocateDepthBuffer)if(a)for(let e=0;e<6;e++)K(n.__webglFramebuffer[e],t,e);else{const e=t.texture.mipmaps;e&&e.length>0?K(n.__webglFramebuffer[0],t,0):K(n.__webglFramebuffer,t,0)}else if(a){n.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[r]),void 0===n.__webglDepthbuffer[r])n.__webglDepthbuffer[r]=e.createRenderbuffer(),Y(n.__webglDepthbuffer[r],t,!1);else{const i=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=n.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,i,e.RENDERBUFFER,a)}}else{const r=t.texture.mipmaps;if(r&&r.length>0?i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[0]):i.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer),void 0===n.__webglDepthbuffer)n.__webglDepthbuffer=e.createRenderbuffer(),Y(n.__webglDepthbuffer,t,!1);else{const i=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=n.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,i,e.RENDERBUFFER,r)}}i.bindFramebuffer(e.FRAMEBUFFER,null)}const j=[],Z=[];function $(e){return Math.min(a.maxSamples,e.samples)}function Q(e){const t=r.get(e);return e.samples>0&&!0===n.has("WEBGL_multisampled_render_to_texture")&&!1!==t.__useRenderToTexture}function J(e,t){const n=e.colorSpace,i=e.format,r=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==F&&n!==bt&&(p.getTransfer(n)===m?i===x&&r===M||E("WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):w("WebGLTextures: Unsupported texture color space:",n)),t}function ee(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement?(d.width=e.naturalWidth||e.width,d.height=e.naturalHeight||e.height):"undefined"!=typeof VideoFrame&&e instanceof VideoFrame?(d.width=e.displayWidth,d.height=e.displayHeight):(d.width=e.width,d.height=e.height),d}this.allocateTextureUnit=function(){const e=I;return e>=a.maxTextures&&E("WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+a.maxTextures),I+=1,e},this.resetTextureUnits=function(){I=0},this.setTexture2D=N,this.setTexture2DArray=function(t,n){const a=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&a.__version!==t.version?z(a,t,n):(t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null),i.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+n))},this.setTexture3D=function(t,n){const a=r.get(t);!1===t.isRenderTargetTexture&&t.version>0&&a.__version!==t.version?z(a,t,n):i.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+n)},this.setTextureCube=function(t,n){const s=r.get(t);!0!==t.isCubeDepthTexture&&t.version>0&&s.__version!==t.version?function(t,n,s){if(6!==n.image.length)return;const l=W(t,n),c=n.source;i.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+s);const d=r.get(c);if(c.version!==d.__version||!0===l){i.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),r=n.colorSpace===bt?null:p.getPrimaries(n.colorSpace),u=n.colorSpace===bt||t===r?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,u);const f=n.isCompressedTexture||n.image[0].isCompressedTexture,m=n.image[0]&&n.image[0].isDataTexture,h=[];for(let e=0;e<6;e++)h[e]=f||m?m?n.image[e].image:n.image[e]:v(n.image[e],!0,a.maxCubemapSize),h[e]=J(n,h[e]);const _=h[0],g=o.convert(n.format,n.colorSpace),M=o.convert(n.type),T=b(n.internalFormat,g,M,n.colorSpace),R=!0!==n.isVideoTexture,C=void 0===d.__version||!0===l,L=c.dataReady;let U,D=P(n,_);if(V(e.TEXTURE_CUBE_MAP,n),f){R&&C&&i.texStorage2D(e.TEXTURE_CUBE_MAP,D,T,_.width,_.height);for(let t=0;t<6;t++){U=h[t].mipmaps;for(let r=0;r0&&D++;const t=ee(h[0]);i.texStorage2D(e.TEXTURE_CUBE_MAP,D,T,t.width,t.height)}for(let t=0;t<6;t++)if(m){R?L&&i.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,h[t].width,h[t].height,g,M,h[t].data):i.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,T,h[t].width,h[t].height,0,g,M,h[t].data);for(let n=0;n1;if(u||(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=n.version,s.memory.textures++),d){a.__webglFramebuffer=[];for(let t=0;t<6;t++)if(n.mipmaps&&n.mipmaps.length>0){a.__webglFramebuffer[t]=[];for(let i=0;i0){a.__webglFramebuffer=[];for(let t=0;t0&&!1===Q(t)){a.__webglMultisampledFramebuffer=e.createFramebuffer(),a.__webglColorRenderbuffer=[],i.bindFramebuffer(e.FRAMEBUFFER,a.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let i=0;i0)if(!1===Q(t)){const n=t.textures,a=t.width,o=t.height;let s=e.COLOR_BUFFER_BIT;const l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,d=r.get(t),u=n.length>1;if(u)for(let t=0;t0?i.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer[0]):i.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer);for(let i=0;i= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new o(new h(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class Ta extends bn{constructor(e,n){super();const i=this;let a=null,o=1,s=null,l="local-floor",c=1,d=null,u=null,f=null,p=null,m=null,h=null;const _="undefined"!=typeof XRWebGLBinding,g=new Ma,v={},S=n.getContextAttributes();let T=null,A=null;const R=[],b=[],C=new t;let P=null;const U=new L;U.viewport=new Y;const D=new L;D.viewport=new Y;const w=[U,D],I=new Cn;let y=null,F=null;function O(e){const t=b.indexOf(e.inputSource);if(-1===t)return;const n=R[t];void 0!==n&&(n.update(e.inputSource,e.frame,d||s),n.dispatchEvent({type:e.type,data:e.inputSource}))}function B(){a.removeEventListener("select",O),a.removeEventListener("selectstart",O),a.removeEventListener("selectend",O),a.removeEventListener("squeeze",O),a.removeEventListener("squeezestart",O),a.removeEventListener("squeezeend",O),a.removeEventListener("end",B),a.removeEventListener("inputsourceschange",G);for(let e=0;e=0&&(b[i]=null,R[i].disconnect(n))}for(let t=0;t=b.length){b.push(n),i=e;break}if(null===b[e]){b[e]=n,i=e;break}}if(-1===i)break}const r=R[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getGripSpace()},this.getHand=function(e){let t=R[e];return void 0===t&&(t=new Pn,R[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){o=e,!0===i.isPresenting&&E("WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){l=e,!0===i.isPresenting&&E("WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return d||s},this.setReferenceSpace=function(e){d=e},this.getBaseLayer=function(){return null!==p?p:m},this.getBinding=function(){return null===f&&_&&(f=new XRWebGLBinding(a,n)),f},this.getFrame=function(){return h},this.getSession=function(){return a},this.setSession=async function(t){if(a=t,null!==a){T=e.getRenderTarget(),a.addEventListener("select",O),a.addEventListener("selectstart",O),a.addEventListener("selectend",O),a.addEventListener("squeeze",O),a.addEventListener("squeezestart",O),a.addEventListener("squeezeend",O),a.addEventListener("end",B),a.addEventListener("inputsourceschange",G),!0!==S.xrCompatible&&await n.makeXRCompatible(),P=e.getPixelRatio(),e.getSize(C);if(_&&"createProjectionLayer"in XRWebGLBinding.prototype){let t=null,i=null,r=null;S.depth&&(r=S.stencil?n.DEPTH24_STENCIL8:n.DEPTH_COMPONENT24,t=S.stencil?Ct:Pe,i=S.stencil?Lt:De);const s={colorFormat:n.RGBA8,depthFormat:r,scaleFactor:o};f=this.getBinding(),p=f.createProjectionLayer(s),a.updateRenderState({layers:[p]}),e.setPixelRatio(1),e.setSize(p.textureWidth,p.textureHeight,!1),A=new N(p.textureWidth,p.textureHeight,{format:x,type:M,depthTexture:new oe(p.textureWidth,p.textureHeight,i,void 0,void 0,void 0,void 0,void 0,void 0,t),stencilBuffer:S.stencil,colorSpace:e.outputColorSpace,samples:S.antialias?4:0,resolveDepthBuffer:!1===p.ignoreDepthValues,resolveStencilBuffer:!1===p.ignoreDepthValues})}else{const t={antialias:S.antialias,alpha:!0,depth:S.depth,stencil:S.stencil,framebufferScaleFactor:o};m=new XRWebGLLayer(a,n,t),a.updateRenderState({baseLayer:m}),e.setPixelRatio(1),e.setSize(m.framebufferWidth,m.framebufferHeight,!1),A=new N(m.framebufferWidth,m.framebufferHeight,{format:x,type:M,colorSpace:e.outputColorSpace,stencilBuffer:S.stencil,resolveDepthBuffer:!1===m.ignoreDepthValues,resolveStencilBuffer:!1===m.ignoreDepthValues})}A.isXRRenderTarget=!0,this.setFoveation(c),d=null,s=await a.requestReferenceSpace(l),z.setContext(a),z.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==a)return a.environmentBlendMode},this.getDepthTexture=function(){return g.getDepthTexture()};const H=new r,V=new r;function W(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===a)return;let t=e.near,n=e.far;null!==g.texture&&(g.depthNear>0&&(t=g.depthNear),g.depthFar>0&&(n=g.depthFar)),I.near=D.near=U.near=t,I.far=D.far=U.far=n,y===I.near&&F===I.far||(a.updateRenderState({depthNear:I.near,depthFar:I.far}),y=I.near,F=I.far),I.layers.mask=6|e.layers.mask,U.layers.mask=-5&I.layers.mask,D.layers.mask=-3&I.layers.mask;const i=e.parent,r=I.cameras;W(I,i);for(let e=0;e0&&(e.alphaTest.value=i.alphaTest);const r=t.get(i),a=r.envMap,o=r.envMapRotation;a&&(e.envMap.value=a,xa.copy(o),xa.x*=-1,xa.y*=-1,xa.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(xa.y*=-1,xa.z*=-1),e.envMapRotation.value.setFromMatrix4(Aa.makeRotationFromEuler(xa)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=i.reflectivity,e.ior.value=i.ior,e.refractionRatio.value=i.refractionRatio),i.lightMap&&(e.lightMap.value=i.lightMap,e.lightMapIntensity.value=i.lightMapIntensity,n(i.lightMap,e.lightMapTransform)),i.aoMap&&(e.aoMap.value=i.aoMap,e.aoMapIntensity.value=i.aoMapIntensity,n(i.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,g(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,r,a,o,s){r.isMeshBasicMaterial?i(e,r):r.isMeshLambertMaterial?(i(e,r),r.envMap&&(e.envMapIntensity.value=r.envMapIntensity)):r.isMeshToonMaterial?(i(e,r),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}(e,r)):r.isMeshPhongMaterial?(i(e,r),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}(e,r),r.envMap&&(e.envMapIntensity.value=r.envMapIntensity)):r.isMeshStandardMaterial?(i(e,r),function(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform));e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform));t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}(e,r),r.isMeshPhysicalMaterial&&function(e,t,i){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform)));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===c&&e.clearcoatNormalScale.value.negate()));t.dispersion>0&&(e.dispersion.value=t.dispersion);t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform)));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=i.texture,e.transmissionSamplerSize.value.set(i.width,i.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform)));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform));t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}(e,r,s)):r.isMeshMatcapMaterial?(i(e,r),function(e,t){t.matcap&&(e.matcap.value=t.matcap)}(e,r)):r.isMeshDepthMaterial?i(e,r):r.isMeshDistanceMaterial?(i(e,r),function(e,n){const i=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(i.matrixWorld),e.nearDistance.value=i.shadow.camera.near,e.farDistance.value=i.shadow.camera.far}(e,r)):r.isMeshNormalMaterial?i(e,r):r.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}(e,r),r.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,r)):r.isPointsMaterial?function(e,t,i,r){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*i,e.scale.value=.5*r,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r,a,o):r.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,r):r.isShadowMaterial?(e.color.value.copy(r.color),e.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function ba(e,t,n,i){let r={},a={},o=[];const s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e,t,n,i){const r=e.value,a=t+"_"+n;if(void 0===i[a])return i[a]="number"==typeof r||"boolean"==typeof r?r:r.clone(),!0;{const e=i[a];if("number"==typeof r||"boolean"==typeof r){if(e!==r)return i[a]=r,!0}else if(!1===e.equals(r))return e.copy(r),!0}return!1}function c(e){const t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?E("WebGLRenderer: Texture samplers can not be part of an uniforms group."):E("WebGLRenderer: Unsupported uniform value type.",e),t}function d(t){const n=t.target;n.removeEventListener("dispose",d);const i=o.indexOf(n.__bindingPointIndex);o.splice(i,1),e.deleteBuffer(r[n.id]),delete r[n.id],delete a[n.id]}return{bind:function(e,t){const n=t.program;i.uniformBlockBinding(e,n)},update:function(n,u){let f=r[n.id];void 0===f&&(!function(e){const t=e.uniforms;let n=0;const i=16;for(let e=0,r=t.length;e0&&(n+=i-r);e.__size=n,e.__cache={}}(n),f=function(t){const n=function(){for(let e=0;e0),f=!!n.morphAttributes.position,m=!!n.morphAttributes.normal,h=!!n.morphAttributes.color;let _=U;i.toneMapped&&(null!==W&&!0!==W.isXRRenderTarget||(_=F.toneMapping));const g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,v=void 0!==g?g.length:0,E=Se.get(i),M=L.state.lights;if(!0===se&&(!0===le||e!==X)){const t=e===X&&i.id===z;Ie.setState(i,e,t)}let T=!1;i.version===E.__version?E.needsLights&&E.lightsStateVersion!==M.state.version||E.outputColorSpace!==s||r.isBatchedMesh&&!1===E.batching?T=!0:r.isBatchedMesh||!0!==E.batching?r.isBatchedMesh&&!0===E.batchingColor&&null===r.colorTexture||r.isBatchedMesh&&!1===E.batchingColor&&null!==r.colorTexture||r.isInstancedMesh&&!1===E.instancing?T=!0:r.isInstancedMesh||!0!==E.instancing?r.isSkinnedMesh&&!1===E.skinning?T=!0:r.isSkinnedMesh||!0!==E.skinning?r.isInstancedMesh&&!0===E.instancingColor&&null===r.instanceColor||r.isInstancedMesh&&!1===E.instancingColor&&null!==r.instanceColor||r.isInstancedMesh&&!0===E.instancingMorph&&null===r.morphTexture||r.isInstancedMesh&&!1===E.instancingMorph&&null!==r.morphTexture||E.envMap!==c||!0===i.fog&&E.fog!==a?T=!0:void 0===E.numClippingPlanes||E.numClippingPlanes===Ie.numPlanes&&E.numIntersection===Ie.numIntersection?(E.vertexAlphas!==d||E.vertexTangents!==u||E.morphTargets!==f||E.morphNormals!==m||E.morphColors!==h||E.toneMapping!==_||E.morphTargetsCount!==v)&&(T=!0):T=!0:T=!0:T=!0:T=!0:(T=!0,E.__version=i.version);let x=E.currentProgram;!0===T&&(x=ot(i,t,r));let A=!1,R=!1,b=!1;const C=x.getUniforms(),P=E.uniforms;ve.useProgram(x.program)&&(A=!0,R=!0,b=!0);i.id!==z&&(z=i.id,R=!0);if(A||X!==e){ve.buffers.depth.getReversed()&&!0!==e.reversedDepth&&(e._reversedDepth=!0,e.updateProjectionMatrix()),C.setValue(We,"projectionMatrix",e.projectionMatrix),C.setValue(We,"viewMatrix",e.matrixWorldInverse);const t=C.map.cameraPosition;void 0!==t&&t.setValue(We,de.setFromMatrixPosition(e.matrixWorld)),ge.logarithmicDepthBuffer&&C.setValue(We,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&C.setValue(We,"isOrthographic",!0===e.isOrthographicCamera),X!==e&&(X=e,R=!0,b=!0)}E.needsLights&&(M.state.directionalShadowMap.length>0&&C.setValue(We,"directionalShadowMap",M.state.directionalShadowMap,Te),M.state.spotShadowMap.length>0&&C.setValue(We,"spotShadowMap",M.state.spotShadowMap,Te),M.state.pointShadowMap.length>0&&C.setValue(We,"pointShadowMap",M.state.pointShadowMap,Te));if(r.isSkinnedMesh){C.setOptional(We,r,"bindMatrix"),C.setOptional(We,r,"bindMatrixInverse");const e=r.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),C.setValue(We,"boneTexture",e.boneTexture,Te))}r.isBatchedMesh&&(C.setOptional(We,r,"batchingTexture"),C.setValue(We,"batchingTexture",r._matricesTexture,Te),C.setOptional(We,r,"batchingIdTexture"),C.setValue(We,"batchingIdTexture",r._indirectTexture,Te),C.setOptional(We,r,"batchingColorTexture"),null!==r._colorsTexture&&C.setValue(We,"batchingColorTexture",r._colorsTexture,Te));const D=n.morphAttributes;void 0===D.position&&void 0===D.normal&&void 0===D.color||Fe.update(r,n,x);(R||E.receiveShadow!==r.receiveShadow)&&(E.receiveShadow=r.receiveShadow,C.setValue(We,"receiveShadow",r.receiveShadow));(i.isMeshStandardMaterial||i.isMeshLambertMaterial||i.isMeshPhongMaterial)&&null===i.envMap&&null!==t.environment&&(P.envMapIntensity.value=t.environmentIntensity);void 0!==P.dfgLUT&&(P.dfgLUT.value=(null===Pa&&(Pa=new Un(Ca,16,16,Me,S),Pa.name="DFG_LUT",Pa.minFilter=O,Pa.magFilter=O,Pa.wrapS=ht,Pa.wrapT=ht,Pa.generateMipmaps=!1,Pa.needsUpdate=!0),Pa));R&&(C.setValue(We,"toneMappingExposure",F.toneMappingExposure),E.needsLights&&(I=b,(w=P).ambientLightColor.needsUpdate=I,w.lightProbe.needsUpdate=I,w.directionalLights.needsUpdate=I,w.directionalLightShadows.needsUpdate=I,w.pointLights.needsUpdate=I,w.pointLightShadows.needsUpdate=I,w.spotLights.needsUpdate=I,w.spotLightShadows.needsUpdate=I,w.rectAreaLights.needsUpdate=I,w.hemisphereLights.needsUpdate=I),a&&!0===i.fog&&Le.refreshFogUniforms(P,a),Le.refreshMaterialUniforms(P,i,ee,J,L.state.transmissionRenderTarget[e.id]),Rr.upload(We,st(E),P,Te));var w,I;i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(Rr.upload(We,st(E),P,Te),i.uniformsNeedUpdate=!1);i.isSpriteMaterial&&C.setValue(We,"center",r.center);if(C.setValue(We,"modelViewMatrix",r.modelViewMatrix),C.setValue(We,"normalMatrix",r.normalMatrix),C.setValue(We,"modelMatrix",r.matrixWorld),i.isShaderMaterial||i.isRawShaderMaterial){const e=i.uniformsGroups;for(let t=0,n=e.length;t{function n(){i.forEach(function(e){Se.get(e).currentProgram.isReady()&&i.delete(e)}),0!==i.size?setTimeout(n,10):t(e)}null!==he.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)})};let $e=null;function Qe(){et.stop()}function Je(){et.start()}const et=new On;function tt(e,t,n,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)L.pushLight(e),e.castShadow&&L.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||oe.intersectsSprite(e)){i&&ue.setFromMatrixPosition(e.matrixWorld).applyMatrix4(ce);const t=Ce.update(e),r=e.material;r.visible&&P.push(e,t,r,n,ue.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||oe.intersectsObject(e))){const t=Ce.update(e),r=e.material;if(i&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),ue.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),ue.copy(t.boundingSphere.center)),ue.applyMatrix4(e.matrixWorld).applyMatrix4(ce)),Array.isArray(r)){const i=t.groups;for(let a=0,o=i.length;a0&&rt(r,t,n),a.length>0&&rt(a,t,n),o.length>0&&rt(o,t,n),ve.buffers.depth.setTest(!0),ve.buffers.depth.setMask(!0),ve.buffers.color.setMask(!0),ve.setPolygonOffset(!1)}function it(e,t,n,i){if(null!==(!0===n.isScene?n.overrideMaterial:null))return;if(void 0===L.state.transmissionRenderTarget[i.id]){const e=he.has("EXT_color_buffer_half_float")||he.has("EXT_color_buffer_float");L.state.transmissionRenderTarget[i.id]=new N(1,1,{generateMipmaps:!0,type:e?S:M,minFilter:G,samples:Math.max(4,ge.samples),stencilBuffer:o,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:p.workingColorSpace})}const r=L.state.transmissionRenderTarget[i.id],a=i.viewport||K;r.setSize(a.z*F.transmissionResolutionScale,a.w*F.transmissionResolutionScale);const s=F.getRenderTarget(),l=F.getActiveCubeFace(),d=F.getActiveMipmapLevel();F.setRenderTarget(r),F.getClearColor(Z),$=F.getClearAlpha(),$<1&&F.setClearColor(16777215,.5),F.clear(),pe&&ye.render(n);const u=F.toneMapping;F.toneMapping=U;const f=i.viewport;if(void 0!==i.viewport&&(i.viewport=void 0),L.setupLightsView(i),!0===se&&Ie.setGlobalState(F.clippingPlanes,i),rt(e,n,i),Te.updateMultisampleRenderTarget(r),Te.updateRenderTargetMipmap(r),!1===he.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let r=0,a=t.length;r0)for(let t=0,a=r.length;t0&&it(n,i,e,t),pe&&ye.render(e),nt(P,e,t)}null!==W&&0===V&&(Te.updateMultisampleRenderTarget(W),Te.updateRenderTargetMipmap(W)),i&&y.end(F),!0===e.isScene&&e.onAfterRender(F,e,t),He.resetDefaultState(),z=-1,X=null,I.pop(),I.length>0?(L=I[I.length-1],!0===se&&Ie.setGlobalState(F.clippingPlanes,L.state.camera)):L=null,D.pop(),P=D.length>0?D[D.length-1]:null},this.getActiveCubeFace=function(){return H},this.getActiveMipmapLevel=function(){return V},this.getRenderTarget=function(){return W},this.setRenderTargetTextures=function(e,t,n){const i=Se.get(e);i.__autoAllocateDepthBuffer=!1===e.resolveDepthBuffer,!1===i.__autoAllocateDepthBuffer&&(i.__useRenderToTexture=!1),Se.get(e.texture).__webglTexture=t,Se.get(e.depthTexture).__webglTexture=i.__autoAllocateDepthBuffer?void 0:n,i.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){const n=Se.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t};const ct=We.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){W=e,H=t,V=n;let i=null,r=!1,a=!1;if(e){const o=Se.get(e);if(void 0!==o.__useDefaultFramebuffer)return ve.bindFramebuffer(We.FRAMEBUFFER,o.__webglFramebuffer),K.copy(e.viewport),q.copy(e.scissor),j=e.scissorTest,ve.viewport(K),ve.scissor(q),ve.setScissorTest(j),void(z=-1);if(void 0===o.__webglFramebuffer)Te.setupRenderTarget(e);else if(o.__hasExternalTextures)Te.rebindTextures(e,Se.get(e.texture).__webglTexture,Se.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){const t=e.depthTexture;if(o.__boundDepthTexture!==t){if(null!==t&&Se.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");Te.setupDepthRenderbuffer(e)}}const s=e.texture;(s.isData3DTexture||s.isDataArrayTexture||s.isCompressedArrayTexture)&&(a=!0);const l=Se.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(i=Array.isArray(l[t])?l[t][n]:l[t],r=!0):i=e.samples>0&&!1===Te.useMultisampledRTT(e)?Se.get(e).__webglMultisampledFramebuffer:Array.isArray(l)?l[n]:l,K.copy(e.viewport),q.copy(e.scissor),j=e.scissorTest}else K.copy(ie).multiplyScalar(ee).floor(),q.copy(re).multiplyScalar(ee).floor(),j=ae;0!==n&&(i=ct);if(ve.bindFramebuffer(We.FRAMEBUFFER,i)&&ve.drawBuffers(e,i),ve.viewport(K),ve.scissor(q),ve.setScissorTest(j),r){const i=Se.get(e.texture);We.framebufferTexture2D(We.FRAMEBUFFER,We.COLOR_ATTACHMENT0,We.TEXTURE_CUBE_MAP_POSITIVE_X+t,i.__webglTexture,n)}else if(a){const i=t;for(let t=0;t1&&We.readBuffer(We.COLOR_ATTACHMENT0+s),!ge.textureFormatReadable(l))return void w("WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!ge.textureTypeReadable(c))return void w("WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r&&We.readPixels(t,n,i,r,Ge.convert(l),Ge.convert(c),a)}finally{const e=null!==W?Se.get(W).__webglFramebuffer:null;ve.bindFramebuffer(We.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,i,r,a,o,s=0){if(!e||!e.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let l=Se.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(l=l[o]),l){if(t>=0&&t<=e.width-i&&n>=0&&n<=e.height-r){ve.bindFramebuffer(We.FRAMEBUFFER,l);const o=e.textures[s],c=o.format,d=o.type;if(e.textures.length>1&&We.readBuffer(We.COLOR_ATTACHMENT0+s),!ge.textureFormatReadable(c))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!ge.textureTypeReadable(d))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const u=We.createBuffer();We.bindBuffer(We.PIXEL_PACK_BUFFER,u),We.bufferData(We.PIXEL_PACK_BUFFER,a.byteLength,We.STREAM_READ),We.readPixels(t,n,i,r,Ge.convert(c),Ge.convert(d),0);const f=null!==W?Se.get(W).__webglFramebuffer:null;ve.bindFramebuffer(We.FRAMEBUFFER,f);const p=We.fenceSync(We.SYNC_GPU_COMMANDS_COMPLETE,0);return We.flush(),await Fn(We,p,4),We.bindBuffer(We.PIXEL_PACK_BUFFER,u),We.getBufferSubData(We.PIXEL_PACK_BUFFER,0,a),We.deleteBuffer(u),We.deleteSync(p),a}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),a=Math.floor(e.image.height*i),o=null!==t?t.x:0,s=null!==t?t.y:0;Te.setTexture2D(e,0),We.copyTexSubImage2D(We.TEXTURE_2D,n,0,0,o,s,r,a),ve.unbindTexture()};const dt=We.createFramebuffer(),ut=We.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,i=null,r=0,a=0){let o,s,l,c,d,u,f,p,m;const h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(null!==n)o=n.max.x-n.min.x,s=n.max.y-n.min.y,l=n.isBox3?n.max.z-n.min.z:1,c=n.min.x,d=n.min.y,u=n.isBox3?n.min.z:0;else{const t=Math.pow(2,-r);o=Math.floor(h.width*t),s=Math.floor(h.height*t),l=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,c=0,d=0,u=0}null!==i?(f=i.x,p=i.y,m=i.z):(f=0,p=0,m=0);const _=Ge.convert(t.format),g=Ge.convert(t.type);let v;t.isData3DTexture?(Te.setTexture3D(t,0),v=We.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(Te.setTexture2DArray(t,0),v=We.TEXTURE_2D_ARRAY):(Te.setTexture2D(t,0),v=We.TEXTURE_2D),We.pixelStorei(We.UNPACK_FLIP_Y_WEBGL,t.flipY),We.pixelStorei(We.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),We.pixelStorei(We.UNPACK_ALIGNMENT,t.unpackAlignment);const E=We.getParameter(We.UNPACK_ROW_LENGTH),S=We.getParameter(We.UNPACK_IMAGE_HEIGHT),M=We.getParameter(We.UNPACK_SKIP_PIXELS),T=We.getParameter(We.UNPACK_SKIP_ROWS),x=We.getParameter(We.UNPACK_SKIP_IMAGES);We.pixelStorei(We.UNPACK_ROW_LENGTH,h.width),We.pixelStorei(We.UNPACK_IMAGE_HEIGHT,h.height),We.pixelStorei(We.UNPACK_SKIP_PIXELS,c),We.pixelStorei(We.UNPACK_SKIP_ROWS,d),We.pixelStorei(We.UNPACK_SKIP_IMAGES,u);const A=e.isDataArrayTexture||e.isData3DTexture,R=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){const n=Se.get(e),i=Se.get(t),h=Se.get(n.__renderTarget),_=Se.get(i.__renderTarget);ve.bindFramebuffer(We.READ_FRAMEBUFFER,h.__webglFramebuffer),ve.bindFramebuffer(We.DRAW_FRAMEBUFFER,_.__webglFramebuffer);for(let n=0;n this.maxQueries ) { - warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` ); + warnOnce( `WebGLTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` ); return null; } @@ -72511,9 +72511,23 @@ class WebGPUTextureUtils { } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) { - for ( let i = 0; i < options.image.depth; i ++ ) { + if ( texture.layerUpdates.size > 0 ) { + + for ( const layerIndex of texture.layerUpdates ) { + + this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex ); + + } + + texture.clearLayerUpdates(); + + } else { - this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i ); + for ( let i = 0; i < options.image.depth; i ++ ) { + + this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i ); + + } } @@ -82623,4 +82637,4 @@ class ClippingGroup extends Group { } -export { ACESFilmicToneMapping, AONode, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightNode, AnalyticLightNode, ArrayCamera, ArrayElementNode, ArrayNode, AssignNode, AtomicFunctionNode, AttributeNode, BackSide, BarrierNode, BasicEnvironmentNode, BasicLightMapNode, BasicShadowMap, BatchNode, BitcastNode, BitcountNode, BlendMode, BoxGeometry, BufferAttribute, BufferAttributeNode, BufferGeometry, BufferNode, BuiltinNode, BumpMapNode, BundleGroup, BypassNode, ByteType, CanvasTarget, CineonToneMapping, ClampToEdgeWrapping, ClippingGroup, ClippingNode, CodeNode, Color, ColorManagement, ColorSpaceNode, Compatibility, ComputeBuiltinNode, ComputeNode, ConditionalNode, ConstNode, ContextNode, ConvertNode, CubeCamera, CubeDepthTexture, CubeMapNode, CubeReflectionMapping, CubeRefractionMapping, CubeRenderTarget, CubeTexture, CubeTextureNode, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CylinderGeometry, DataArrayTexture, DataTexture, DebugNode, DecrementStencilOp, DecrementWrapStencilOp, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightNode, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicDrawUsage, EnvironmentNode, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, EventNode, ExpressionNode, FileLoader, FlipNode, Float16BufferAttribute, Float32BufferAttribute, FloatType, FramebufferTexture, FrontFacingNode, FrontSide, Frustum, FrustumArray, FunctionCallNode, FunctionNode, FunctionOverloadingNode, GLSLNodeParser, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, Group, HalfFloatType, HemisphereLight, HemisphereLightNode, IESSpotLight, IESSpotLightNode, IncrementStencilOp, IncrementWrapStencilOp, IndexNode, IndirectStorageBufferAttribute, InputNode, InspectorBase, InspectorNode, InstanceNode, InstancedBufferAttribute, InstancedInterleavedBuffer, InstancedMeshNode, IntType, InterleavedBuffer, InterleavedBufferAttribute, InvertStencilOp, IrradianceNode, IsolateNode, JoinNode, KeepStencilOp, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, LightProbe, LightProbeNode, Lighting, LightingContextNode, LightingModel, LightingNode, LightsNode, Line2NodeMaterial, LineBasicMaterial, LineBasicNodeMaterial, LineDashedMaterial, LineDashedNodeMaterial, LinearFilter, LinearMipMapLinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoopNode, MRTNode, Material, MaterialBlending, MaterialLoader, MaterialNode, MaterialReferenceNode, MathNode, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, MaxMipLevelNode, MemberNode, Mesh, MeshBasicMaterial, MeshBasicNodeMaterial, MeshLambertMaterial, MeshLambertNodeMaterial, MeshMatcapMaterial, MeshMatcapNodeMaterial, MeshNormalMaterial, MeshNormalNodeMaterial, MeshPhongMaterial, MeshPhongNodeMaterial, MeshPhysicalMaterial, MeshPhysicalNodeMaterial, MeshSSSNodeMaterial, MeshStandardMaterial, MeshStandardNodeMaterial, MeshToonMaterial, MeshToonNodeMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, ModelNode, MorphNode, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, Node, NodeAccess, NodeAttribute, NodeBuilder, NodeCache, NodeCode, NodeError, NodeFrame, NodeFunctionInput, NodeLoader, NodeMaterial, NodeMaterialLoader, NodeMaterialObserver, NodeObjectLoader, NodeShaderStage, NodeType, NodeUniform, NodeUpdateType, NodeUtils, NodeVar, NodeVarying, NormalBlending, NormalGAPacking, NormalMapNode, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, Object3D, Object3DNode, ObjectLoader, ObjectSpaceNormalMap, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OperatorNode, OrthographicCamera, OutputStructNode, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PMREMNode, PackFloatNode, ParameterNode, PassNode, PerspectiveCamera, PhongLightingModel, PhysicalLightingModel, Plane, PlaneGeometry, PointLight, PointLightNode, PointShadowNode, PointUVNode, PointsMaterial, PointsNodeMaterial, PostProcessing, ProjectorLight, ProjectorLightNode, PropertyNode, QuadMesh, Quaternion, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGBIntegerFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RTTNode, RangeNode, RectAreaLight, RectAreaLightNode, RedFormat, RedIntegerFormat, ReferenceBaseNode, ReferenceNode, ReflectorNode, ReinhardToneMapping, RemapNode, RenderOutputNode, RenderPipeline, RenderTarget, RendererReferenceNode, RendererUtils, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RotateNode, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, SampleNode, Scene, ScreenNode, SetNode, ShadowBaseNode, ShadowMaterial, ShadowNode, ShadowNodeMaterial, ShortType, SkinningNode, Sphere, SphereGeometry, SplitNode, SpotLight, SpotLightNode, SpriteMaterial, SpriteNodeMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StackNode, StackTrace, StaticDrawUsage, Storage3DTexture, StorageArrayElementNode, StorageArrayTexture, StorageBufferAttribute, StorageBufferNode, StorageInstancedBufferAttribute, StorageTexture, StorageTextureNode, StructNode, StructTypeNode, SubBuildNode, SubgroupFunctionNode, SubtractEquation, SubtractiveBlending, TSL, TangentSpaceNormalMap, TempNode, Texture, Texture3DNode, TextureNode, TextureSizeNode, TimestampQuery, ToneMappingNode, ToonOutlinePassNode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UniformArrayNode, UniformGroupNode, UniformNode, UnpackFloatNode, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, UserDataNode, VSMShadowMap, VarNode, VaryingNode, Vector2, Vector3, Vector4, VelocityNode, VertexColorNode, ViewportDepthNode, ViewportDepthTextureNode, ViewportSharedTextureNode, ViewportTextureNode, VolumeNodeMaterial, WebGLCoordinateSystem, WebGPUCoordinateSystem, WebGPURenderer, WebXRController, WorkgroupInfoNode, ZeroFactor, ZeroStencilOp, createCanvasElement, defaultBuildStages, defaultShaderStages, error, log$1 as log, shaderStages, vectorComponents, warn, warnOnce }; +export { ACESFilmicToneMapping, AONode, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightNode, AnalyticLightNode, ArrayCamera, ArrayElementNode, ArrayNode, AssignNode, AtomicFunctionNode, AttributeNode, BackSide, BarrierNode, BasicEnvironmentNode, BasicLightMapNode, BasicShadowMap, BatchNode, BitcastNode, BitcountNode, BlendMode, BoxGeometry, BufferAttribute, BufferAttributeNode, BufferGeometry, BufferNode, BuiltinNode, BumpMapNode, BundleGroup, BypassNode, ByteType, CanvasTarget, CineonToneMapping, ClampToEdgeWrapping, ClippingGroup, ClippingNode, CodeNode, Color, ColorManagement, ColorSpaceNode, Compatibility, ComputeBuiltinNode, ComputeNode, ConditionalNode, ConstNode, ContextNode, ConvertNode, CubeCamera, CubeDepthTexture, CubeMapNode, CubeReflectionMapping, CubeRefractionMapping, CubeRenderTarget, CubeTexture, CubeTextureNode, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CylinderGeometry, DataArrayTexture, DataTexture, DebugNode, DecrementStencilOp, DecrementWrapStencilOp, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightNode, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicDrawUsage, EnvironmentNode, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, EventNode, ExpressionNode, FileLoader, FlipNode, Float16BufferAttribute, Float32BufferAttribute, FloatType, FramebufferTexture, FrontFacingNode, FrontSide, Frustum, FrustumArray, FunctionCallNode, FunctionNode, FunctionOverloadingNode, GLSLNodeParser, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, Group, HalfFloatType, HemisphereLight, HemisphereLightNode, IESSpotLight, IESSpotLightNode, IncrementStencilOp, IncrementWrapStencilOp, IndexNode, IndirectStorageBufferAttribute, InputNode, InspectorBase, InspectorNode, InstanceNode, InstancedBufferAttribute, InstancedInterleavedBuffer, InstancedMeshNode, IntType, InterleavedBuffer, InterleavedBufferAttribute, InvertStencilOp, IrradianceNode, IsolateNode, JoinNode, KeepStencilOp, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, LightProbe, LightProbeNode, Lighting, LightingContextNode, LightingModel, LightingNode, LightsNode, Line2NodeMaterial, LineBasicMaterial, LineBasicNodeMaterial, LineDashedMaterial, LineDashedNodeMaterial, LinearFilter, LinearMipMapLinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoopNode, MRTNode, Material, MaterialBlending, MaterialLoader, MaterialNode, MaterialReferenceNode, MathNode, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, MaxMipLevelNode, MemberNode, Mesh, MeshBasicMaterial, MeshBasicNodeMaterial, MeshLambertMaterial, MeshLambertNodeMaterial, MeshMatcapMaterial, MeshMatcapNodeMaterial, MeshNormalMaterial, MeshNormalNodeMaterial, MeshPhongMaterial, MeshPhongNodeMaterial, MeshPhysicalMaterial, MeshPhysicalNodeMaterial, MeshSSSNodeMaterial, MeshStandardMaterial, MeshStandardNodeMaterial, MeshToonMaterial, MeshToonNodeMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, ModelNode, MorphNode, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, Node, NodeAccess, NodeAttribute, NodeBuilder, NodeCache, NodeCode, NodeError, NodeFrame, NodeFunctionInput, NodeLoader, NodeMaterial, NodeMaterialLoader, NodeMaterialObserver, NodeObjectLoader, NodeShaderStage, NodeType, NodeUniform, NodeUpdateType, NodeUtils, NodeVar, NodeVarying, NormalBlending, NormalGAPacking, NormalMapNode, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, Object3D, Object3DNode, ObjectLoader, ObjectSpaceNormalMap, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OperatorNode, OrthographicCamera, OutputStructNode, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PMREMNode, PackFloatNode, ParameterNode, PassNode, PerspectiveCamera, PhongLightingModel, PhysicalLightingModel, Plane, PlaneGeometry, PointLight, PointLightNode, PointShadowNode, PointUVNode, PointsMaterial, PointsNodeMaterial, PostProcessing, ProjectorLight, ProjectorLightNode, PropertyNode, QuadMesh, Quaternion, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGBIntegerFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RTTNode, RangeNode, RectAreaLight, RectAreaLightNode, RedFormat, RedIntegerFormat, ReferenceBaseNode, ReferenceNode, ReflectorNode, ReinhardToneMapping, RemapNode, RenderOutputNode, RenderPipeline, RenderTarget, RendererReferenceNode, RendererUtils, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RotateNode, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, SampleNode, Scene, ScreenNode, SetNode, ShadowBaseNode, ShadowMaterial, ShadowNode, ShadowNodeMaterial, ShortType, SkinningNode, Sphere, SphereGeometry, SplitNode, SpotLight, SpotLightNode, SpriteMaterial, SpriteNodeMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StackNode, StackTrace, StaticDrawUsage, Storage3DTexture, StorageArrayElementNode, StorageArrayTexture, StorageBufferAttribute, StorageBufferNode, StorageInstancedBufferAttribute, StorageTexture, StorageTextureNode, StructNode, StructTypeNode, SubBuildNode, SubgroupFunctionNode, SubtractEquation, SubtractiveBlending, TSL, TangentSpaceNormalMap, TempNode, Texture, Texture3DNode, TextureNode, TextureSizeNode, TimestampQuery, ToneMappingNode, ToonOutlinePassNode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UniformArrayNode, UniformGroupNode, UniformNode, UnpackFloatNode, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, UserDataNode, VSMShadowMap, VarNode, VaryingNode, Vector2, Vector3, Vector4, VelocityNode, VertexColorNode, ViewportDepthNode, ViewportDepthTextureNode, ViewportSharedTextureNode, ViewportTextureNode, VolumeNodeMaterial, WebGLBackend, WebGLCoordinateSystem, WebGPUBackend, WebGPUCoordinateSystem, WebGPURenderer, WebXRController, WorkgroupInfoNode, ZeroFactor, ZeroStencilOp, createCanvasElement, defaultBuildStages, defaultShaderStages, error, log$1 as log, shaderStages, vectorComponents, warn, warnOnce }; diff --git a/build/three.webgpu.min.js b/build/three.webgpu.min.js index b872de7dfef21c..ebfc6ad7bc6df2 100644 --- a/build/three.webgpu.min.js +++ b/build/three.webgpu.min.js @@ -3,4 +3,4 @@ * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT */ -import{Color as e,Vector2 as t,Vector3 as r,Vector4 as s,Matrix2 as i,Matrix3 as n,Matrix4 as a,error as o,EventDispatcher as u,MathUtils as l,warn as d,WebGLCoordinateSystem as c,WebGPUCoordinateSystem as h,ColorManagement as p,SRGBTransfer as g,NoToneMapping as m,StaticDrawUsage as f,InterleavedBufferAttribute as y,InterleavedBuffer as b,DynamicDrawUsage as x,NoColorSpace as T,log as _,warnOnce as v,Texture as N,UnsignedIntType as S,IntType as R,Compatibility as E,LessCompare as A,LessEqualCompare as w,GreaterCompare as C,GreaterEqualCompare as M,NearestFilter as B,Sphere as F,BackSide as L,DoubleSide as P,Euler as D,CubeTexture as U,CubeReflectionMapping as I,CubeRefractionMapping as O,TangentSpaceNormalMap as V,NoNormalPacking as k,NormalRGPacking as G,NormalGAPacking as $,ObjectSpaceNormalMap as z,RGFormat as W,RED_GREEN_RGTC2_Format as H,RG11_EAC_Format as q,InstancedBufferAttribute as j,InstancedInterleavedBuffer as X,DataArrayTexture as K,FloatType as Q,FramebufferTexture as Y,LinearMipmapLinearFilter as Z,DepthTexture as J,Material as ee,LineBasicMaterial as te,LineDashedMaterial as re,NoBlending as se,MeshNormalMaterial as ie,SRGBColorSpace as ne,RenderTarget as ae,BoxGeometry as oe,Mesh as ue,Scene as le,LinearFilter as de,CubeCamera as ce,EquirectangularReflectionMapping as he,EquirectangularRefractionMapping as pe,AddOperation as ge,MixOperation as me,MultiplyOperation as fe,MeshBasicMaterial as ye,MeshLambertMaterial as be,MeshPhongMaterial as xe,DataTexture as Te,HalfFloatType as _e,ClampToEdgeWrapping as ve,BufferGeometry as Ne,OrthographicCamera as Se,PerspectiveCamera as Re,LinearSRGBColorSpace as Ee,RGBAFormat as Ae,CubeUVReflectionMapping as we,BufferAttribute as Ce,MeshStandardMaterial as Me,MeshPhysicalMaterial as Be,MeshToonMaterial as Fe,MeshMatcapMaterial as Le,SpriteMaterial as Pe,PointsMaterial as De,ShadowMaterial as Ue,Uint32BufferAttribute as Ie,Uint16BufferAttribute as Oe,DepthStencilFormat as Ve,DepthFormat as ke,UnsignedInt248Type as Ge,UnsignedByteType as $e,NormalBlending as ze,SrcAlphaFactor as We,OneMinusSrcAlphaFactor as He,AddEquation as qe,MaterialBlending as je,Plane as Xe,Object3D as Ke,LinearMipMapLinearFilter as Qe,Float32BufferAttribute as Ye,UVMapping as Ze,PCFShadowMap as Je,PCFSoftShadowMap as et,VSMShadowMap as tt,BasicShadowMap as rt,CubeDepthTexture as st,SphereGeometry as it,LinearMipmapNearestFilter as nt,NearestMipmapLinearFilter as at,Float16BufferAttribute as ot,yieldToMain as ut,REVISION as lt,ArrayCamera as dt,PlaneGeometry as ct,FrontSide as ht,CustomBlending as pt,ZeroFactor as gt,CylinderGeometry as mt,Quaternion as ft,WebXRController as yt,RAD2DEG as bt,FrustumArray as xt,Frustum as Tt,RedIntegerFormat as _t,RedFormat as vt,ShortType as Nt,ByteType as St,UnsignedShortType as Rt,RGIntegerFormat as Et,RGBIntegerFormat as At,RGBFormat as wt,RGBAIntegerFormat as Ct,TimestampQuery as Mt,createCanvasElement as Bt,ReverseSubtractEquation as Ft,SubtractEquation as Lt,OneMinusDstAlphaFactor as Pt,OneMinusDstColorFactor as Dt,OneMinusSrcColorFactor as Ut,DstAlphaFactor as It,DstColorFactor as Ot,SrcAlphaSaturateFactor as Vt,SrcColorFactor as kt,OneFactor as Gt,CullFaceNone as $t,CullFaceBack as zt,CullFaceFront as Wt,MultiplyBlending as Ht,SubtractiveBlending as qt,AdditiveBlending as jt,NotEqualDepth as Xt,GreaterDepth as Kt,GreaterEqualDepth as Qt,EqualDepth as Yt,LessEqualDepth as Zt,LessDepth as Jt,AlwaysDepth as er,NeverDepth as tr,ReversedDepthFuncs as rr,UnsignedShort4444Type as sr,UnsignedShort5551Type as ir,UnsignedInt5999Type as nr,UnsignedInt101111Type as ar,AlphaFormat as or,RGB_S3TC_DXT1_Format as ur,RGBA_S3TC_DXT1_Format as lr,RGBA_S3TC_DXT3_Format as dr,RGBA_S3TC_DXT5_Format as cr,RGB_PVRTC_4BPPV1_Format as hr,RGB_PVRTC_2BPPV1_Format as pr,RGBA_PVRTC_4BPPV1_Format as gr,RGBA_PVRTC_2BPPV1_Format as mr,RGB_ETC1_Format as fr,RGB_ETC2_Format as yr,RGBA_ETC2_EAC_Format as br,R11_EAC_Format as xr,SIGNED_R11_EAC_Format as Tr,SIGNED_RG11_EAC_Format as _r,RGBA_ASTC_4x4_Format as vr,RGBA_ASTC_5x4_Format as Nr,RGBA_ASTC_5x5_Format as Sr,RGBA_ASTC_6x5_Format as Rr,RGBA_ASTC_6x6_Format as Er,RGBA_ASTC_8x5_Format as Ar,RGBA_ASTC_8x6_Format as wr,RGBA_ASTC_8x8_Format as Cr,RGBA_ASTC_10x5_Format as Mr,RGBA_ASTC_10x6_Format as Br,RGBA_ASTC_10x8_Format as Fr,RGBA_ASTC_10x10_Format as Lr,RGBA_ASTC_12x10_Format as Pr,RGBA_ASTC_12x12_Format as Dr,RGBA_BPTC_Format as Ur,RED_RGTC1_Format as Ir,SIGNED_RED_RGTC1_Format as Or,SIGNED_RED_GREEN_RGTC2_Format as Vr,MirroredRepeatWrapping as kr,RepeatWrapping as Gr,NearestMipmapNearestFilter as $r,NotEqualCompare as zr,EqualCompare as Wr,AlwaysCompare as Hr,NeverCompare as qr,LinearTransfer as jr,getByteLength as Xr,isTypedArray as Kr,NotEqualStencilFunc as Qr,GreaterStencilFunc as Yr,GreaterEqualStencilFunc as Zr,EqualStencilFunc as Jr,LessEqualStencilFunc as es,LessStencilFunc as ts,AlwaysStencilFunc as rs,NeverStencilFunc as ss,DecrementWrapStencilOp as is,IncrementWrapStencilOp as ns,DecrementStencilOp as as,IncrementStencilOp as os,InvertStencilOp as us,ReplaceStencilOp as ls,ZeroStencilOp as ds,KeepStencilOp as cs,MaxEquation as hs,MinEquation as ps,SpotLight as gs,PointLight as ms,DirectionalLight as fs,RectAreaLight as ys,AmbientLight as bs,HemisphereLight as xs,LightProbe as Ts,LinearToneMapping as _s,ReinhardToneMapping as vs,CineonToneMapping as Ns,ACESFilmicToneMapping as Ss,AgXToneMapping as Rs,NeutralToneMapping as Es,Group as As,Loader as ws,FileLoader as Cs,MaterialLoader as Ms,ObjectLoader as Bs}from"./three.core.min.js";export{AdditiveAnimationBlendMode,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrowHelper,AttachedBindMode,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BasicDepthPacking,BatchedMesh,BezierInterpolant,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxHelper,BufferGeometryLoader,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CircleGeometry,Clock,ColorKeyframeTrack,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,ConstantAlphaFactor,ConstantColorFactor,Controls,CubeTextureLoader,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceFrontBack,Curve,CurvePath,CustomToneMapping,Cylindrical,Data3DTexture,DataTextureLoader,DataUtils,DefaultLoadingManager,DetachedBindMode,DirectionalLightHelper,DiscreteInterpolant,DodecahedronGeometry,DynamicCopyUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,ExternalTexture,ExtrudeGeometry,Fog,FogExp2,GLBufferAttribute,GLSL1,GLSL3,GridHelper,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,InstancedBufferGeometry,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,Interpolant,InterpolateBezier,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InterpolationSamplingMode,InterpolationSamplingType,KeyframeTrack,LOD,LatheGeometry,Layers,Light,Line,Line3,LineCurve,LineCurve3,LineLoop,LineSegments,LinearInterpolant,LinearMipMapNearestFilter,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,MOUSE,MeshDepthMaterial,MeshDistanceMaterial,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NormalAnimationBlendMode,NumberKeyframeTrack,OctahedronGeometry,OneMinusConstantAlphaFactor,OneMinusConstantColorFactor,Path,PlaneHelper,PointLightHelper,Points,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RGBADepthPacking,RGBDepthPacking,RGB_BPTC_SIGNED_Format,RGB_BPTC_UNSIGNED_Format,RGDepthPacking,RawShaderMaterial,Ray,Raycaster,RenderTarget3D,RingGeometry,ShaderMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,Skeleton,SkeletonHelper,SkinnedMesh,Source,Spherical,SphericalHarmonics3,SplineCurve,SpotLightHelper,Sprite,StaticCopyUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,TOUCH,TetrahedronGeometry,TextureLoader,TextureUtils,Timer,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,VectorKeyframeTrack,VideoFrameTexture,VideoTexture,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGLRenderTarget,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroSlopeEnding,getConsoleFunction,setConsoleFunction}from"./three.core.min.js";const Fs=["alphaMap","alphaTest","anisotropy","anisotropyMap","anisotropyRotation","aoMap","aoMapIntensity","attenuationColor","attenuationDistance","bumpMap","clearcoat","clearcoatMap","clearcoatNormalMap","clearcoatNormalScale","clearcoatRoughness","color","dispersion","displacementMap","emissive","emissiveIntensity","emissiveMap","envMap","envMapIntensity","gradientMap","ior","iridescence","iridescenceIOR","iridescenceMap","iridescenceThicknessMap","lightMap","lightMapIntensity","map","matcap","metalness","metalnessMap","normalMap","normalScale","opacity","roughness","roughnessMap","sheen","sheenColor","sheenColorMap","sheenRoughnessMap","shininess","specular","specularColor","specularColorMap","specularIntensity","specularIntensityMap","specularMap","thickness","transmission","transmissionMap"],Ls=new WeakMap;class Ps{constructor(e){this.renderObjects=new WeakMap,this.hasNode=this.containsNode(e),this.hasAnimation=!0===e.object.isSkinnedMesh,this.refreshUniforms=Fs,this.renderId=0}firstInitialization(e){return!1===this.renderObjects.has(e)&&(this.getRenderObjectData(e),!0)}needsVelocity(e){const t=e.getMRT();return null!==t&&t.has("velocity")}getRenderObjectData(e){let t=this.renderObjects.get(e);if(void 0===t){const{geometry:r,material:s,object:i}=e;if(t={material:this.getMaterialData(s),geometry:{id:r.id,attributes:this.getAttributesData(r.attributes),indexId:r.index?r.index.id:null,indexVersion:r.index?r.index.version:null,drawRange:{start:r.drawRange.start,count:r.drawRange.count}},worldMatrix:i.matrixWorld.clone()},i.center&&(t.center=i.center.clone()),i.morphTargetInfluences&&(t.morphTargetInfluences=i.morphTargetInfluences.slice()),null!==e.bundle&&(t.version=e.bundle.version),t.material.transmission>0){const{width:r,height:s}=e.context;t.bufferWidth=r,t.bufferHeight=s}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){const t={};for(const r in e){const s=e[r];t[r]={id:s.id,version:s.version}}return t}containsNode(e){const t=e.material;for(const e in t)if(t[e]&&t[e].isNode)return!0;return!!(e.context.modelViewMatrix||e.context.modelNormalViewMatrix||e.context.getAO||e.context.getShadow)}getMaterialData(e){const t={};for(const r of this.refreshUniforms){const s=e[r];null!=s&&("object"==typeof s&&void 0!==s.clone?!0===s.isTexture?t[r]={id:s.id,version:s.version}:t[r]=s.clone():t[r]=s)}return t}equals(e,t){const{object:r,material:s,geometry:i}=e,n=this.getRenderObjectData(e);if(!0!==n.worldMatrix.equals(r.matrixWorld))return n.worldMatrix.copy(r.matrixWorld),!1;const a=n.material;for(const e in a){const t=a[e],r=s[e];if(void 0!==t.equals){if(!1===t.equals(r))return t.copy(r),!1}else if(!0===r.isTexture){if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}else if(t!==r)return a[e]=r,!1}if(a.transmission>0){const{width:t,height:r}=e.context;if(n.bufferWidth!==t||n.bufferHeight!==r)return n.bufferWidth=t,n.bufferHeight=r,!1}const o=n.geometry,u=i.attributes,l=o.attributes,d=Object.keys(l),c=Object.keys(u);if(o.id!==i.id)return o.id=i.id,!1;if(d.length!==c.length)return n.geometry.attributes=this.getAttributesData(u),!1;for(const e of d){const t=l[e],r=u[e];if(void 0===r)return delete l[e],!1;if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}const h=i.index,p=o.indexId,g=o.indexVersion,m=h?h.id:null,f=h?h.version:null;if(p!==m||g!==f)return o.indexId=m,o.indexVersion=f,!1;if(o.drawRange.start!==i.drawRange.start||o.drawRange.count!==i.drawRange.count)return o.drawRange.start=i.drawRange.start,o.drawRange.count=i.drawRange.count,!1;if(n.morphTargetInfluences){let e=!1;for(let t=0;t{const r=e.match(t);if(!r)return null;const s=r[1]||r[2]||"",i=r[3].split("?")[0],n=parseInt(r[4],10),a=parseInt(r[5],10);return{fn:s,file:i.split("/").pop(),line:n,column:a}}).filter(e=>e&&!Ds.some(t=>t.test(e.file)))}(e||(new Error).stack)}getLocation(){if(0===this.stack.length)return"[Unknown location]";const e=this.stack[0],t=e.fn;return`${t?`"${t}()" at `:""}"${e.file}:${e.line}"`}getError(e){if(0===this.stack.length)return e;return`${e}\n${this.stack.map(e=>{const t=`${e.file}:${e.line}:${e.column}`;return e.fn?` at ${e.fn} (${t})`:` at ${t}`}).join("\n")}`}}function Is(e,t=0){let r=3735928559^t,s=1103547991^t;if(e instanceof Array)for(let t,i=0;i>>16,2246822507),r^=Math.imul(s^s>>>13,3266489909),s=Math.imul(s^s>>>16,2246822507),s^=Math.imul(r^r>>>13,3266489909),4294967296*(2097151&s)+(r>>>0)}const Os=e=>Is(e),Vs=e=>Is(e),ks=(...e)=>Is(e),Gs=new Map([[1,"float"],[2,"vec2"],[3,"vec3"],[4,"vec4"],[9,"mat3"],[16,"mat4"]]),$s=new WeakMap;function zs(e){return Gs.get(e)}function Ws(e){if(/[iu]?vec\d/.test(e))return e.startsWith("ivec")?Int32Array:e.startsWith("uvec")?Uint32Array:Float32Array;if(/mat\d/.test(e))return Float32Array;if(/float/.test(e))return Float32Array;if(/uint/.test(e))return Uint32Array;if(/int/.test(e))return Int32Array;throw new Error(`THREE.NodeUtils: Unsupported type: ${e}`)}function Hs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?9:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function qs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?12:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function js(e){return/float|int|uint/.test(e)?4:/vec2/.test(e)?8:/vec3/.test(e)||/vec4/.test(e)?16:/mat2/.test(e)?8:/mat3/.test(e)||/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function Xs(e){if(null==e)return null;const t=typeof e;return!0===e.isNode?"node":"number"===t?"float":"boolean"===t?"bool":"string"===t?"string":"function"===t?"shader":!0===e.isVector2?"vec2":!0===e.isVector3?"vec3":!0===e.isVector4?"vec4":!0===e.isMatrix2?"mat2":!0===e.isMatrix3?"mat3":!0===e.isMatrix4?"mat4":!0===e.isColor?"color":e instanceof ArrayBuffer?"ArrayBuffer":null}function Ks(o,...u){const l=o?o.slice(-4):void 0;return 1===u.length&&("vec2"===l?u=[u[0],u[0]]:"vec3"===l?u=[u[0],u[0],u[0]]:"vec4"===l&&(u=[u[0],u[0],u[0],u[0]])),"color"===o?new e(...u):"vec2"===l?new t(...u):"vec3"===l?new r(...u):"vec4"===l?new s(...u):"mat2"===l?new i(...u):"mat3"===l?new n(...u):"mat4"===l?new a(...u):"bool"===o?u[0]||!1:"float"===o||"int"===o||"uint"===o?u[0]||0:"string"===o?u[0]||"":"ArrayBuffer"===o?Zs(u[0]):null}function Qs(e){let t=$s.get(e);return void 0===t&&(t={},$s.set(e,t)),t}function Ys(e){let t="";const r=new Uint8Array(e);for(let e=0;ee.charCodeAt(0)).buffer}var Js=Object.freeze({__proto__:null,arrayBufferToBase64:Ys,base64ToArrayBuffer:Zs,getAlignmentFromType:js,getDataFromObject:Qs,getLengthFromType:Hs,getMemoryLengthFromType:qs,getTypeFromLength:zs,getTypedArrayFromType:Ws,getValueFromType:Ks,getValueType:Xs,hash:ks,hashArray:Vs,hashString:Os});const ei={VERTEX:"vertex",FRAGMENT:"fragment"},ti={NONE:"none",FRAME:"frame",RENDER:"render",OBJECT:"object"},ri={BOOLEAN:"bool",INTEGER:"int",FLOAT:"float",VECTOR2:"vec2",VECTOR3:"vec3",VECTOR4:"vec4",MATRIX2:"mat2",MATRIX3:"mat3",MATRIX4:"mat4"},si={READ_ONLY:"readOnly",WRITE_ONLY:"writeOnly",READ_WRITE:"readWrite"},ii=["fragment","vertex"],ni=["setup","analyze","generate"],ai=[...ii,"compute"],oi=["x","y","z","w"],ui={analyze:"setup",generate:"analyze"};let li=0;class di extends u{static get type(){return"Node"}constructor(e=null){super(),this.nodeType=e,this.updateType=ti.NONE,this.updateBeforeType=ti.NONE,this.updateAfterType=ti.NONE,this.uuid=l.generateUUID(),this.version=0,this.name="",this.global=!1,this.parents=!1,this.isNode=!0,this._beforeNodes=null,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:li++}),this.stackTrace=null,!0===di.captureStackTrace&&(this.stackTrace=new Us)}set needsUpdate(e){!0===e&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,ti.FRAME)}onRenderUpdate(e){return this.onUpdate(e,ti.RENDER)}onObjectUpdate(e){return this.onUpdate(e,ti.OBJECT)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(const{childNode:e}of this._getChildren())yield e}dispose(){this.dispatchEvent({type:"dispose"})}traverse(e){e(this);for(const t of this.getChildren())t.traverse(e)}_getChildren(e=new Set){const t=[];e.add(this);for(const r of Object.getOwnPropertyNames(this)){const s=this[r];if(!0!==r.startsWith("_")&&!e.has(s))if(!0===Array.isArray(s))for(let e=0;e0&&(e.inputNodes=r)}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const r in e.inputNodes)if(Array.isArray(e.inputNodes[r])){const s=[];for(const i of e.inputNodes[r])s.push(t[i]);this[r]=s}else if("object"==typeof e.inputNodes[r]){const s={};for(const i in e.inputNodes[r]){const n=e.inputNodes[r][i];s[i]=t[n]}this[r]=s}else{const s=e.inputNodes[r];this[r]=t[s]}}}toJSON(e){const{uuid:t,type:r}=this,s=void 0===e||"string"==typeof e;s&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];function n(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(void 0===i&&(i={uuid:t,type:r,meta:e,metadata:{version:4.7,type:"Node",generator:"Node.toJSON"}},!0!==s&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta),s){const t=n(e.textures),r=n(e.images),s=n(e.nodes);t.length>0&&(i.textures=t),r.length>0&&(i.images=r),s.length>0&&(i.nodes=s)}return i}}di.captureStackTrace=!1;class ci extends di{static get type(){return"ArrayElementNode"}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}generate(e){const t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:"uint")} ]`}}class hi extends di{static get type(){return"ConvertNode"}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){const t=this.node.getNodeType(e);let r=null;for(const s of this.convertTo.split("|"))null!==r&&e.getTypeLength(t)!==e.getTypeLength(s)||(r=s);return r}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){const r=this.node,s=this.getNodeType(e),i=r.build(e,s);return e.format(i,s,t)}}class pi extends di{static get type(){return"TempNode"}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if("generate"===e.getBuildStage()){const r=e.getVectorType(this.getNodeType(e,t)),s=e.getDataFromNode(this);if(void 0!==s.propertyName)return e.format(s.propertyName,r,t);if("void"!==r&&"void"!==t&&this.hasDependencies(e)){const i=super.build(e,r),n=e.getVarFromNode(this,null,r),a=e.getPropertyName(n);return e.addLineFlowCode(`${a} = ${i}`,this),s.snippet=i,s.propertyName=a,e.format(s.propertyName,r,t)}}return super.build(e,t)}}class gi extends pi{static get type(){return"JoinNode"}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return null!==this.nodeType?e.getVectorType(this.nodeType):e.getTypeFromLength(this.nodes.reduce((t,r)=>t+e.getTypeLength(r.getNodeType(e)),0))}generate(e,t){const r=this.getNodeType(e),s=e.getTypeLength(r),i=this.nodes,n=e.getComponentType(r),a=[];let u=0;for(const t of i){if(u>=s){o(`TSL: Length of parameters exceeds maximum length of function '${r}()' type.`,this.stackTrace);break}let i,l=t.getNodeType(e),d=e.getTypeLength(l);u+d>s&&(o(`TSL: Length of '${r}()' data exceeds maximum length of output type.`,this.stackTrace),d=s-u,l=e.getTypeFromLength(d)),u+=d,i=t.build(e,l);if(e.getComponentType(l)!==n){const t=e.getTypeFromLength(d,n);i=e.format(i,l,t)}a.push(i)}const l=`${e.getType(r)}( ${a.join(", ")} )`;return e.format(l,r,t)}}const mi=oi.join("");class fi extends di{static get type(){return"SplitNode"}constructor(e,t="x"){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(const t of this.components)e=Math.max(oi.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){const r=this.node,s=e.getTypeLength(r.getNodeType(e));let i=null;if(s>1){let n=null;this.getVectorLength()>=s&&(n=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));const a=r.build(e,n);i=this.components.length===s&&this.components===mi.slice(0,this.components.length)?e.format(a,n,t):e.format(`${a}.${this.components}`,this.getNodeType(e),t)}else i=r.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}}class yi extends pi{static get type(){return"SetNode"}constructor(e,t,r){super(),this.sourceNode=e,this.components=t,this.targetNode=r}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){const{sourceNode:t,components:r,targetNode:s}=this,i=this.getNodeType(e),n=e.getComponentType(s.getNodeType(e)),a=e.getTypeFromLength(r.length,n),o=s.build(e,a),u=t.build(e,i),l=e.getTypeLength(i),d=[];for(let e=0;e(e=>e.replace(/r|s/g,"x").replace(/g|t/g,"y").replace(/b|p/g,"z").replace(/a|q/g,"w"))(e).split("").sort().join("");di.prototype.assign=function(...e){if(!0!==this.isStackNode)return null!==Ni?Ni.assign(this,...e):o("TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().",new Us),this;{const t=Si.get("assign");return this.addToStack(t(...e))}},di.prototype.toVarIntent=function(){return this},di.prototype.get=function(e){return new vi(this,e)};const Ai={};function wi(e,t,r){Ai[e]=Ai[t]=Ai[r]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new fi(this,e),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};const s=e.toUpperCase(),i=t.toUpperCase(),n=r.toUpperCase();di.prototype["set"+s]=di.prototype["set"+i]=di.prototype["set"+n]=function(t){const r=Ei(e);return new yi(this,r,en(t))},di.prototype["flip"+s]=di.prototype["flip"+i]=di.prototype["flip"+n]=function(){const t=Ei(e);return new bi(this,t)}}const Ci=["x","y","z","w"],Mi=["r","g","b","a"],Bi=["s","t","p","q"];for(let e=0;e<4;e++){let t=Ci[e],r=Mi[e],s=Bi[e];wi(t,r,s);for(let i=0;i<4;i++){t=Ci[e]+Ci[i],r=Mi[e]+Mi[i],s=Bi[e]+Bi[i],wi(t,r,s);for(let n=0;n<4;n++){t=Ci[e]+Ci[i]+Ci[n],r=Mi[e]+Mi[i]+Mi[n],s=Bi[e]+Bi[i]+Bi[n],wi(t,r,s);for(let a=0;a<4;a++)t=Ci[e]+Ci[i]+Ci[n]+Ci[a],r=Mi[e]+Mi[i]+Mi[n]+Mi[a],s=Bi[e]+Bi[i]+Bi[n]+Bi[a],wi(t,r,s)}}}for(let e=0;e<32;e++)Ai[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new ci(this,new _i(e,"uint")),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};Object.defineProperties(di.prototype,Ai);const Fi=new WeakMap,Li=function(e,t=null){for(const r in e)e[r]=en(e[r],t);return e},Pi=function(e,t=null){const r=e.length;for(let s=0;su?(o(`TSL: "${r}" parameter length exceeds limit.`,new Us),t.slice(0,u)):t}return null===t?n=(...t)=>i(new e(...sn(d(t)))):null!==r?(r=en(r),n=(...s)=>i(new e(t,...sn(d(s)),r))):n=(...r)=>i(new e(t,...sn(d(r)))),n.setParameterLength=(...e)=>(1===e.length?a=u=e[0]:2===e.length&&([a,u]=e),n),n.setName=e=>(l=e,n),n},Ui=function(e,...t){return new e(...sn(t))};class Ii extends di{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getElementType(e){return this.getOutputNode(e).getElementType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){const{shaderNode:t,rawInputs:r}=this,s=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||"",n=i||"default";if(s[n])return s[n];const a=e.subBuildFn,o=e.fnCall;e.subBuildFn=i,e.fnCall=this;let u=null;if(t.layout){let s=Fi.get(e.constructor);void 0===s&&(s=new WeakMap,Fi.set(e.constructor,s));let i=s.get(t);void 0===i&&(i=en(e.buildFunctionNode(t)),s.set(t,i)),e.addInclude(i);const n=r?function(e){let t;rn(e);t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0];return t}(r):null;u=en(i.call(n))}else{const s=new Proxy(e,{get:(e,t,r)=>{let s;return s=Symbol.iterator===t?function*(){yield}:Reflect.get(e,t,r),s}}),i=r?function(e){let t=0;return rn(e),new Proxy(e,{get:(r,s,i)=>{let n;if("length"===s)return n=e.length,n;if(Symbol.iterator===s)n=function*(){for(const t of e)yield en(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){const r=e[0];n=void 0===r[s]?r[t++]:Reflect.get(r,s,i)}else e[0]instanceof di&&(n=void 0===e[s]?e[t++]:Reflect.get(e,s,i));else n=Reflect.get(r,s,i);n=en(n)}return n}})}(r):null,n=Array.isArray(r)?r.length>0:null!==r,a=t.jsFunc,o=n||a.length>1?a(i,s):a(s);u=en(o)}return e.subBuildFn=a,e.fnCall=o,t.once&&(s[n]=u),u}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){const t=e.getNodeProperties(this),r=e.getSubBuildOutput(this);return t[r]=t[r]||this.setupOutput(e),t[r].subBuild=e.getClosestSubBuild(this),t[r]}build(e,t=null){let r=null;const s=e.getBuildStage(),i=e.getNodeProperties(this),n=e.getSubBuildOutput(this),a=this.getOutputNode(e),o=e.fnCall;if(e.fnCall=this,"setup"===s){const t=e.getSubBuildProperty("initialized",this);if(!0!==i[t]&&(i[t]=!0,i[n]=this.getOutputNode(e),i[n].build(e),this.shaderNode.subBuilds))for(const t of e.chaining){const r=e.getDataFromNode(t,"any");r.subBuilds=r.subBuilds||new Set;for(const e of this.shaderNode.subBuilds)r.subBuilds.add(e)}r=i[n]}else"analyze"===s?a.build(e,t):"generate"===s&&(r=a.build(e,t)||"");return e.fnCall=o,r}}class Oi extends di{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}getLayout(){return this.layout}call(e=null){return new Ii(this,e)}setup(){return this.call()}}const Vi=[!1,!0],ki=[0,1,2,3],Gi=[-1,-2],$i=[.5,1.5,1/3,1e-6,1e6,Math.PI,2*Math.PI,1/Math.PI,2/Math.PI,1/(2*Math.PI),Math.PI/2],zi=new Map;for(const e of Vi)zi.set(e,new _i(e));const Wi=new Map;for(const e of ki)Wi.set(e,new _i(e,"uint"));const Hi=new Map([...Wi].map(e=>new _i(e.value,"int")));for(const e of Gi)Hi.set(e,new _i(e,"int"));const qi=new Map([...Hi].map(e=>new _i(e.value)));for(const e of $i)qi.set(e,new _i(e));for(const e of $i)qi.set(-e,new _i(-e));const ji={bool:zi,uint:Wi,ints:Hi,float:qi},Xi=new Map([...zi,...qi]),Ki=(e,t)=>Xi.has(e)?Xi.get(e):!0===e.isNode?e:new _i(e,t),Qi=function(e,t=null){return(...r)=>{for(const t of r)if(void 0===t)return o(`TSL: Invalid parameter for the type "${e}".`,new Us),new _i(0,e);if((0===r.length||!["bool","float","int","uint"].includes(e)&&r.every(e=>{const t=typeof e;return"object"!==t&&"function"!==t}))&&(r=[Ks(e,...r)]),1===r.length&&null!==t&&t.has(r[0]))return tn(t.get(r[0]));if(1===r.length){const t=Ki(r[0],e);return t.nodeType===e?tn(t):tn(new hi(t,e))}const s=r.map(e=>Ki(e));return tn(new gi(s,e))}},Yi=e=>"object"==typeof e&&null!==e?e.value:e,Zi=e=>null!=e?e.nodeType||e.convertTo||("string"==typeof e?e:null):null;function Ji(e,t){return new Oi(e,t)}const en=(e,t=null)=>function(e,t=null){const r=Xs(e);return"node"===r?e:null===t&&("float"===r||"boolean"===r)||r&&"shader"!==r&&"string"!==r?en(Ki(e,t)):"shader"===r?e.isFn?e:dn(e):e}(e,t),tn=(e,t=null)=>en(e,t).toVarIntent(),rn=(e,t=null)=>new Li(e,t),sn=(e,t=null)=>new Pi(e,t),nn=(e,t=null,r=null,s=null)=>new Di(e,t,r,s),an=(e,...t)=>new Ui(e,...t),on=(e,t=null,r=null,s={})=>new Di(e,t,r,{...s,intent:!0});let un=0;class ln extends di{constructor(e,t=null){super();let r=null;null!==t&&("object"==typeof t?r=t.return:("string"==typeof t?r=t:o("TSL: Invalid layout type.",new Us),t=null)),this.shaderNode=new Ji(e,r),null!==t&&this.setLayout(t),this.isFn=!0}setLayout(e){const t=this.shaderNode.nodeType;if("object"!=typeof e.inputs){const r={name:"fn"+un++,type:t,inputs:[]};for(const t in e)"return"!==t&&r.inputs.push({name:t,type:e[t]});e=r}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||"float"}call(...e){const t=this.shaderNode.call(e);return"void"===this.shaderNode.nodeType&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){const t=this.getNodeType(e);return o('TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".',this.stackTrace),e.generateConst(t)}}function dn(e,t=null){const r=new ln(e,t);return new Proxy(()=>{},{apply:(e,t,s)=>r.call(...s),get:(e,t,s)=>Reflect.get(r,t,s),set:(e,t,s,i)=>Reflect.set(r,t,s,i)})}const cn=e=>{Ni=e},hn=()=>Ni,pn=(...e)=>Ni.If(...e);function gn(e){return Ni&&Ni.addToStack(e),e}Ri("toStack",gn);const mn=new Qi("color"),fn=new Qi("float",ji.float),yn=new Qi("int",ji.ints),bn=new Qi("uint",ji.uint),xn=new Qi("bool",ji.bool),Tn=new Qi("vec2"),_n=new Qi("ivec2"),vn=new Qi("uvec2"),Nn=new Qi("bvec2"),Sn=new Qi("vec3"),Rn=new Qi("ivec3"),En=new Qi("uvec3"),An=new Qi("bvec3"),wn=new Qi("vec4"),Cn=new Qi("ivec4"),Mn=new Qi("uvec4"),Bn=new Qi("bvec4"),Fn=new Qi("mat2"),Ln=new Qi("mat3"),Pn=new Qi("mat4");Ri("toColor",mn),Ri("toFloat",fn),Ri("toInt",yn),Ri("toUint",bn),Ri("toBool",xn),Ri("toVec2",Tn),Ri("toIVec2",_n),Ri("toUVec2",vn),Ri("toBVec2",Nn),Ri("toVec3",Sn),Ri("toIVec3",Rn),Ri("toUVec3",En),Ri("toBVec3",An),Ri("toVec4",wn),Ri("toIVec4",Cn),Ri("toUVec4",Mn),Ri("toBVec4",Bn),Ri("toMat2",Fn),Ri("toMat3",Ln),Ri("toMat4",Pn);const Dn=nn(ci).setParameterLength(2),Un=(e,t)=>new hi(en(e),t);Ri("element",Dn),Ri("convert",Un);Ri("append",e=>(d("TSL: .append() has been renamed to .toStack().",new Us),gn(e)));class In extends di{static get type(){return"PropertyNode"}constructor(e,t=null,r=!1){super(e),this.name=t,this.varying=r,this.isPropertyNode=!0,this.global=!0}customCacheKey(){return Os(this.type+":"+(this.name||"")+":"+(this.varying?"1":"0"))}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return!0===this.varying?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}}const On=(e,t)=>new In(e,t),Vn=(e,t)=>new In(e,t,!0),kn=an(In,"vec4","DiffuseColor"),Gn=an(In,"vec3","DiffuseContribution"),$n=an(In,"vec3","EmissiveColor"),zn=an(In,"float","Roughness"),Wn=an(In,"float","Metalness"),Hn=an(In,"float","Clearcoat"),qn=an(In,"float","ClearcoatRoughness"),jn=an(In,"vec3","Sheen"),Xn=an(In,"float","SheenRoughness"),Kn=an(In,"float","Iridescence"),Qn=an(In,"float","IridescenceIOR"),Yn=an(In,"float","IridescenceThickness"),Zn=an(In,"float","AlphaT"),Jn=an(In,"float","Anisotropy"),ea=an(In,"vec3","AnisotropyT"),ta=an(In,"vec3","AnisotropyB"),ra=an(In,"color","SpecularColor"),sa=an(In,"color","SpecularColorBlended"),ia=an(In,"float","SpecularF90"),na=an(In,"float","Shininess"),aa=an(In,"vec4","Output"),oa=an(In,"float","dashSize"),ua=an(In,"float","gapSize"),la=an(In,"float","pointWidth"),da=an(In,"float","IOR"),ca=an(In,"float","Transmission"),ha=an(In,"float","Thickness"),pa=an(In,"float","AttenuationDistance"),ga=an(In,"color","AttenuationColor"),ma=an(In,"float","Dispersion");class fa extends di{static get type(){return"UniformGroupNode"}constructor(e,t=!1,r=1){super("string"),this.name=e,this.shared=t,this.order=r,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}}const ya=e=>new fa(e),ba=(e,t=0)=>new fa(e,!0,t),xa=ba("frame"),Ta=ba("render"),_a=ya("object");class va extends xi{static get type(){return"UniformNode"}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name="",this.groupNode=_a}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{const r=e(t,this);void 0!==r&&(this.value=r)},t)}getInputType(e){let t=super.getInputType(e);return"bool"===t&&(t="uint"),t}generate(e,t){const r=this.getNodeType(e),s=this.getUniformHash(e);let i=e.getNodeFromHash(s);void 0===i&&(e.setHashNode(this,s),i=this);const n=i.getInputType(e),a=e.getUniformFromNode(i,n,e.shaderStage,this.name||e.context.nodeName),o=e.getPropertyName(a);void 0!==e.context.nodeName&&delete e.context.nodeName;let u=o;if("bool"===r){const t=e.getDataFromNode(this);let s=t.propertyName;if(void 0===s){const i=e.getVarFromNode(this,null,"bool");s=e.getPropertyName(i),t.propertyName=s,u=e.format(o,n,r),e.addLineFlowCode(`${s} = ${u}`,this)}u=s}return e.format(u,r,t)}}const Na=(e,t)=>{const r=Zi(t||e);if(r===e&&(e=Ks(r)),e&&!0===e.isNode){let t=e.value;e.traverse(e=>{!0===e.isConstNode&&(t=e.value)}),e=t}return new va(e,r)};class Sa extends pi{static get type(){return"ArrayNode"}constructor(e,t,r=null){super(e),this.count=t,this.values=r,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return null===this.nodeType?this.values[0].getNodeType(e):this.nodeType}getElementType(e){return this.getNodeType(e)}getMemberType(e,t){return null===this.nodeType?this.values[0].getMemberType(e,t):super.getMemberType(e,t)}generate(e){const t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}}const Ra=(...e)=>{let t;if(1===e.length){const r=e[0];t=new Sa(null,r.length,r)}else{const r=e[0],s=e[1];t=new Sa(r,s)}return en(t)};Ri("toArray",(e,t)=>Ra(Array(t).fill(e)));class Ea extends pi{static get type(){return"AssignNode"}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return"void"!==t?this.targetNode.getNodeType(e):"void"}needsSplitAssign(e){const{targetNode:t}=this;if(!1===e.isAvailable("swizzleAssign")&&t.isSplitNode&&t.components.length>1){const r=e.getTypeLength(t.node.getNodeType(e));return oi.join("").slice(0,r)!==t.components}return!1}setup(e){const{targetNode:t,sourceNode:r}=this,s=t.getScope();e.getDataFromNode(s).assign=!0;const i=e.getNodeProperties(this);i.sourceNode=r,i.targetNode=t.context({assign:!0})}generate(e,t){const{targetNode:r,sourceNode:s}=e.getNodeProperties(this),i=this.needsSplitAssign(e),n=r.build(e),a=r.getNodeType(e),o=s.build(e,a),u=s.getNodeType(e),l=e.getDataFromNode(this);let d;if(!0===l.initialized)"void"!==t&&(d=n);else if(i){const s=e.getVarFromNode(this,null,a),i=e.getPropertyName(s);e.addLineFlowCode(`${i} = ${o}`,this);const u=r.node,l=u.node.context({assign:!0}).build(e);for(let t=0;t{const s=r.type;let i;return i="pointer"===s?"&"+t.build(e):t.build(e,s),i};if(Array.isArray(i)){if(i.length>s.length)o("TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'."),i.length=s.length;else if(i.length(t=t.length>1||t[0]&&!0===t[0].isNode?sn(t):rn(t[0]),new wa(en(e),t));Ri("call",Ca);const Ma={"==":"equal","!=":"notEqual","<":"lessThan",">":"greaterThan","<=":"lessThanEqual",">=":"greaterThanEqual","%":"mod"};class Ba extends pi{static get type(){return"OperatorNode"}constructor(e,t,r,...s){if(super(),s.length>0){let i=new Ba(e,t,r);for(let t=0;t>"===r||"<<"===r)return e.getIntegerType(n);if("!"===r||"&&"===r||"||"===r||"^^"===r)return"bool";if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r){const t=Math.max(e.getTypeLength(n),e.getTypeLength(a));return t>1?`bvec${t}`:"bool"}if(e.isMatrix(n)){if("float"===a)return n;if(e.isVector(a))return e.getVectorFromMatrix(n);if(e.isMatrix(a))return n}else if(e.isMatrix(a)){if("float"===n)return a;if(e.isVector(n))return e.getVectorFromMatrix(a)}return e.getTypeLength(a)>e.getTypeLength(n)?a:n}generate(e,t){const r=this.op,{aNode:s,bNode:i}=this,n=this.getNodeType(e,t);let a=null,o=null;"void"!==n?(a=s.getNodeType(e),o=i?i.getNodeType(e):null,"<"===r||">"===r||"<="===r||">="===r||"=="===r||"!="===r?e.isVector(a)?o=a:e.isVector(o)?a=o:a!==o&&(a=o="float"):">>"===r||"<<"===r?(a=n,o=e.changeComponentType(o,"uint")):"%"===r?(a=n,o=e.isInteger(a)&&e.isInteger(o)?o:a):e.isMatrix(a)?"float"===o?o="float":e.isVector(o)?o=e.getVectorFromMatrix(a):e.isMatrix(o)||(a=o=n):a=e.isMatrix(o)?"float"===a?"float":e.isVector(a)?e.getVectorFromMatrix(o):o=n:o=n):a=o=n;const u=s.build(e,a),l=i?i.build(e,o):null,d=e.getFunctionOperator(r);if("void"!==t){const s=e.renderer.coordinateSystem===c;if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r)return s&&e.isVector(a)?e.format(`${this.getOperatorMethod(e,t)}( ${u}, ${l} )`,n,t):e.format(`( ${u} ${r} ${l} )`,n,t);if("%"===r)return e.isInteger(o)?e.format(`( ${u} % ${l} )`,n,t):e.format(`${this.getOperatorMethod(e,n)}( ${u}, ${l} )`,n,t);if("!"===r||"~"===r)return e.format(`(${r}${u})`,a,t);if(d)return e.format(`${d}( ${u}, ${l} )`,n,t);if(e.isMatrix(a)&&"float"===o)return e.format(`( ${l} ${r} ${u} )`,n,t);if("float"===a&&e.isMatrix(o))return e.format(`${u} ${r} ${l}`,n,t);{let i=`( ${u} ${r} ${l} )`;return!s&&"bool"===n&&e.isVector(a)&&e.isVector(o)&&(i=`all${i}`),e.format(i,n,t)}}if("void"!==a)return d?e.format(`${d}( ${u}, ${l} )`,n,t):e.isMatrix(a)&&"float"===o?e.format(`${l} ${r} ${u}`,n,t):e.format(`${u} ${r} ${l}`,n,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}}const Fa=on(Ba,"+").setParameterLength(2,1/0).setName("add"),La=on(Ba,"-").setParameterLength(2,1/0).setName("sub"),Pa=on(Ba,"*").setParameterLength(2,1/0).setName("mul"),Da=on(Ba,"/").setParameterLength(2,1/0).setName("div"),Ua=on(Ba,"%").setParameterLength(2).setName("mod"),Ia=on(Ba,"==").setParameterLength(2).setName("equal"),Oa=on(Ba,"!=").setParameterLength(2).setName("notEqual"),Va=on(Ba,"<").setParameterLength(2).setName("lessThan"),ka=on(Ba,">").setParameterLength(2).setName("greaterThan"),Ga=on(Ba,"<=").setParameterLength(2).setName("lessThanEqual"),$a=on(Ba,">=").setParameterLength(2).setName("greaterThanEqual"),za=on(Ba,"&&").setParameterLength(2,1/0).setName("and"),Wa=on(Ba,"||").setParameterLength(2,1/0).setName("or"),Ha=on(Ba,"!").setParameterLength(1).setName("not"),qa=on(Ba,"^^").setParameterLength(2).setName("xor"),ja=on(Ba,"&").setParameterLength(2).setName("bitAnd"),Xa=on(Ba,"~").setParameterLength(1).setName("bitNot"),Ka=on(Ba,"|").setParameterLength(2).setName("bitOr"),Qa=on(Ba,"^").setParameterLength(2).setName("bitXor"),Ya=on(Ba,"<<").setParameterLength(2).setName("shiftLeft"),Za=on(Ba,">>").setParameterLength(2).setName("shiftRight"),Ja=dn(([e])=>(e.addAssign(1),e)),eo=dn(([e])=>(e.subAssign(1),e)),to=dn(([e])=>{const t=yn(e).toConst();return e.addAssign(1),t}),ro=dn(([e])=>{const t=yn(e).toConst();return e.subAssign(1),t});Ri("add",Fa),Ri("sub",La),Ri("mul",Pa),Ri("div",Da),Ri("mod",Ua),Ri("equal",Ia),Ri("notEqual",Oa),Ri("lessThan",Va),Ri("greaterThan",ka),Ri("lessThanEqual",Ga),Ri("greaterThanEqual",$a),Ri("and",za),Ri("or",Wa),Ri("not",Ha),Ri("xor",qa),Ri("bitAnd",ja),Ri("bitNot",Xa),Ri("bitOr",Ka),Ri("bitXor",Qa),Ri("shiftLeft",Ya),Ri("shiftRight",Za),Ri("incrementBefore",Ja),Ri("decrementBefore",eo),Ri("increment",to),Ri("decrement",ro);const so=(e,t)=>(d('TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.',new Us),Ua(yn(e),yn(t)));Ri("modInt",so);class io extends pi{static get type(){return"MathNode"}constructor(e,t,r=null,s=null){if(super(),(e===io.MAX||e===io.MIN)&&arguments.length>3){let i=new io(e,t,r);for(let t=2;tn&&i>a?t:n>a?r:a>i?s:t}getNodeType(e){const t=this.method;return t===io.LENGTH||t===io.DISTANCE||t===io.DOT?"float":t===io.CROSS?"vec3":t===io.ALL||t===io.ANY?"bool":t===io.EQUALS?e.changeComponentType(this.aNode.getNodeType(e),"bool"):this.getInputType(e)}setup(e){const{aNode:t,bNode:r,method:s}=this;let i=null;if(s===io.ONE_MINUS)i=La(1,t);else if(s===io.RECIPROCAL)i=Da(1,t);else if(s===io.DIFFERENCE)i=Fo(La(t,r));else if(s===io.TRANSFORM_DIRECTION){let s=t,n=r;e.isMatrix(s.getNodeType(e))?n=wn(Sn(n),0):s=wn(Sn(s),0);const a=Pa(s,n).xyz;i=So(a)}return null!==i?i:super.setup(e)}generate(e,t){if(e.getNodeProperties(this).outputNode)return super.generate(e,t);let r=this.method;const s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=this.cNode,u=e.renderer.coordinateSystem;if(r===io.NEGATE)return e.format("( - "+n.build(e,i)+" )",s,t);{const l=[];return r===io.CROSS?l.push(n.build(e,s),a.build(e,s)):u===c&&r===io.STEP?l.push(n.build(e,1===e.getTypeLength(n.getNodeType(e))?"float":i),a.build(e,i)):u!==c||r!==io.MIN&&r!==io.MAX?r===io.REFRACT?l.push(n.build(e,i),a.build(e,i),o.build(e,"float")):r===io.MIX?l.push(n.build(e,i),a.build(e,i),o.build(e,1===e.getTypeLength(o.getNodeType(e))?"float":i)):(u===h&&r===io.ATAN&&null!==a&&(r="atan2"),"fragment"===e.shaderStage||r!==io.DFDX&&r!==io.DFDY||(d(`TSL: '${r}' is not supported in the ${e.shaderStage} stage.`,this.stackTrace),r="/*"+r+"*/"),l.push(n.build(e,i)),null!==a&&l.push(a.build(e,i)),null!==o&&l.push(o.build(e,i))):l.push(n.build(e,i),a.build(e,1===e.getTypeLength(a.getNodeType(e))?"float":i)),e.format(`${e.getMethod(r,s)}( ${l.join(", ")} )`,s,t)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}io.ALL="all",io.ANY="any",io.RADIANS="radians",io.DEGREES="degrees",io.EXP="exp",io.EXP2="exp2",io.LOG="log",io.LOG2="log2",io.SQRT="sqrt",io.INVERSE_SQRT="inversesqrt",io.FLOOR="floor",io.CEIL="ceil",io.NORMALIZE="normalize",io.FRACT="fract",io.SIN="sin",io.COS="cos",io.TAN="tan",io.ASIN="asin",io.ACOS="acos",io.ATAN="atan",io.ABS="abs",io.SIGN="sign",io.LENGTH="length",io.NEGATE="negate",io.ONE_MINUS="oneMinus",io.DFDX="dFdx",io.DFDY="dFdy",io.ROUND="round",io.RECIPROCAL="reciprocal",io.TRUNC="trunc",io.FWIDTH="fwidth",io.TRANSPOSE="transpose",io.DETERMINANT="determinant",io.INVERSE="inverse",io.EQUALS="equals",io.MIN="min",io.MAX="max",io.STEP="step",io.REFLECT="reflect",io.DISTANCE="distance",io.DIFFERENCE="difference",io.DOT="dot",io.CROSS="cross",io.POW="pow",io.TRANSFORM_DIRECTION="transformDirection",io.MIX="mix",io.CLAMP="clamp",io.REFRACT="refract",io.SMOOTHSTEP="smoothstep",io.FACEFORWARD="faceforward";const no=fn(1e-6),ao=fn(1e6),oo=fn(Math.PI),uo=fn(2*Math.PI),lo=fn(2*Math.PI),co=fn(.5*Math.PI),ho=on(io,io.ALL).setParameterLength(1),po=on(io,io.ANY).setParameterLength(1),go=on(io,io.RADIANS).setParameterLength(1),mo=on(io,io.DEGREES).setParameterLength(1),fo=on(io,io.EXP).setParameterLength(1),yo=on(io,io.EXP2).setParameterLength(1),bo=on(io,io.LOG).setParameterLength(1),xo=on(io,io.LOG2).setParameterLength(1),To=on(io,io.SQRT).setParameterLength(1),_o=on(io,io.INVERSE_SQRT).setParameterLength(1),vo=on(io,io.FLOOR).setParameterLength(1),No=on(io,io.CEIL).setParameterLength(1),So=on(io,io.NORMALIZE).setParameterLength(1),Ro=on(io,io.FRACT).setParameterLength(1),Eo=on(io,io.SIN).setParameterLength(1),Ao=on(io,io.COS).setParameterLength(1),wo=on(io,io.TAN).setParameterLength(1),Co=on(io,io.ASIN).setParameterLength(1),Mo=on(io,io.ACOS).setParameterLength(1),Bo=on(io,io.ATAN).setParameterLength(1,2),Fo=on(io,io.ABS).setParameterLength(1),Lo=on(io,io.SIGN).setParameterLength(1),Po=on(io,io.LENGTH).setParameterLength(1),Do=on(io,io.NEGATE).setParameterLength(1),Uo=on(io,io.ONE_MINUS).setParameterLength(1),Io=on(io,io.DFDX).setParameterLength(1),Oo=on(io,io.DFDY).setParameterLength(1),Vo=on(io,io.ROUND).setParameterLength(1),ko=on(io,io.RECIPROCAL).setParameterLength(1),Go=on(io,io.TRUNC).setParameterLength(1),$o=on(io,io.FWIDTH).setParameterLength(1),zo=on(io,io.TRANSPOSE).setParameterLength(1),Wo=on(io,io.DETERMINANT).setParameterLength(1),Ho=on(io,io.INVERSE).setParameterLength(1),qo=on(io,io.MIN).setParameterLength(2,1/0),jo=on(io,io.MAX).setParameterLength(2,1/0),Xo=on(io,io.STEP).setParameterLength(2),Ko=on(io,io.REFLECT).setParameterLength(2),Qo=on(io,io.DISTANCE).setParameterLength(2),Yo=on(io,io.DIFFERENCE).setParameterLength(2),Zo=on(io,io.DOT).setParameterLength(2),Jo=on(io,io.CROSS).setParameterLength(2),eu=on(io,io.POW).setParameterLength(2),tu=e=>Pa(e,e),ru=e=>Pa(e,e,e),su=e=>Pa(e,e,e,e),iu=on(io,io.TRANSFORM_DIRECTION).setParameterLength(2),nu=e=>Pa(Lo(e),eu(Fo(e),1/3)),au=e=>Zo(e,e),ou=on(io,io.MIX).setParameterLength(3),uu=(e,t=0,r=1)=>new io(io.CLAMP,en(e),en(t),en(r)),lu=e=>uu(e),du=on(io,io.REFRACT).setParameterLength(3),cu=on(io,io.SMOOTHSTEP).setParameterLength(3),hu=on(io,io.FACEFORWARD).setParameterLength(3),pu=dn(([e])=>{const t=Zo(e.xy,Tn(12.9898,78.233)),r=Ua(t,oo);return Ro(Eo(r).mul(43758.5453))}),gu=(e,t,r)=>ou(t,r,e),mu=(e,t,r)=>cu(t,r,e),fu=(e,t)=>Xo(t,e),yu=hu,bu=_o;Ri("all",ho),Ri("any",po),Ri("radians",go),Ri("degrees",mo),Ri("exp",fo),Ri("exp2",yo),Ri("log",bo),Ri("log2",xo),Ri("sqrt",To),Ri("inverseSqrt",_o),Ri("floor",vo),Ri("ceil",No),Ri("normalize",So),Ri("fract",Ro),Ri("sin",Eo),Ri("cos",Ao),Ri("tan",wo),Ri("asin",Co),Ri("acos",Mo),Ri("atan",Bo),Ri("abs",Fo),Ri("sign",Lo),Ri("length",Po),Ri("lengthSq",au),Ri("negate",Do),Ri("oneMinus",Uo),Ri("dFdx",Io),Ri("dFdy",Oo),Ri("round",Vo),Ri("reciprocal",ko),Ri("trunc",Go),Ri("fwidth",$o),Ri("min",qo),Ri("max",jo),Ri("step",fu),Ri("reflect",Ko),Ri("distance",Qo),Ri("dot",Zo),Ri("cross",Jo),Ri("pow",eu),Ri("pow2",tu),Ri("pow3",ru),Ri("pow4",su),Ri("transformDirection",iu),Ri("mix",gu),Ri("clamp",uu),Ri("refract",du),Ri("smoothstep",mu),Ri("faceForward",hu),Ri("difference",Yo),Ri("saturate",lu),Ri("cbrt",nu),Ri("transpose",zo),Ri("determinant",Wo),Ri("inverse",Ho),Ri("rand",pu);class xu extends di{static get type(){return"ConditionalNode"}constructor(e,t,r=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=r}getNodeType(e){const{ifNode:t,elseNode:r}=e.getNodeProperties(this);if(void 0===t)return e.flowBuildStage(this,"setup"),this.getNodeType(e);const s=t.getNodeType(e);if(null!==r){const t=r.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(s))return t}return s}setup(e){const t=this.condNode,r=this.ifNode.isolate(),s=this.elseNode?this.elseNode.isolate():null,i=e.context.nodeBlock;e.getDataFromNode(r).parentNodeBlock=i,null!==s&&(e.getDataFromNode(s).parentNodeBlock=i);const n=e.context.uniformFlow,a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n?r:r.context({nodeBlock:r}),a.elseNode=s?n?s:s.context({nodeBlock:s}):null}generate(e,t){const r=this.getNodeType(e),s=e.getDataFromNode(this);if(void 0!==s.nodeProperty)return s.nodeProperty;const{condNode:i,ifNode:n,elseNode:a}=e.getNodeProperties(this),o=e.currentFunctionNode,u="void"!==t,l=u?On(r).build(e):"";s.nodeProperty=l;const c=i.build(e,"bool");if(e.context.uniformFlow&&null!==a){const s=n.build(e,r),i=a.build(e,r),o=e.getTernary(c,s,i);return e.format(o,r,t)}e.addFlowCode(`\n${e.tab}if ( ${c} ) {\n\n`).addFlowTab();let h=n.build(e,r);if(h&&(u?h=l+" = "+h+";":(h="return "+h+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),h="// "+h))),e.removeFlowTab().addFlowCode(e.tab+"\t"+h+"\n\n"+e.tab+"}"),null!==a){e.addFlowCode(" else {\n\n").addFlowTab();let t=a.build(e,r);t&&(u?t=l+" = "+t+";":(t="return "+t+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),t="// "+t))),e.removeFlowTab().addFlowCode(e.tab+"\t"+t+"\n\n"+e.tab+"}\n\n")}else e.addFlowCode("\n\n");return e.format(l,r,t)}}const Tu=nn(xu).setParameterLength(2,3);Ri("select",Tu);class _u extends di{static get type(){return"ContextNode"}constructor(e=null,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getFlowContextData(){const e=[];return this.traverse(t=>{!0===t.isContextNode&&e.push(t.value)}),Object.assign({},...e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}setup(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}generate(e,t){const r=e.addContext(this.value),s=this.node.build(e,t);return e.setContext(r),s}}const vu=(e=null,t={})=>{let r=e;return null!==r&&!0===r.isNode||(t=r||t,r=null),new _u(r,t)},Nu=e=>vu(e,{uniformFlow:!0}),Su=(e,t)=>vu(e,{nodeName:t});function Ru(e,t,r=null){return vu(r,{getShadow:({light:r,shadowColorNode:s})=>t===r?s.mul(e):s})}function Eu(e,t=null){return vu(t,{getAO:(t,{material:r})=>!0===r.transparent?t:null!==t?t.mul(e):e})}function Au(e,t){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),Su(e,t)}Ri("context",vu),Ri("label",Au),Ri("uniformFlow",Nu),Ri("setName",Su),Ri("builtinShadowContext",(e,t,r)=>Ru(t,r,e)),Ri("builtinAOContext",(e,t)=>Eu(t,e));class wu extends di{static get type(){return"VarNode"}constructor(e,t=null,r=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=r,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}isIntent(e){return!0!==e.getDataFromNode(this).forceDeclaration&&this.intent}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}isAssign(e){return e.getDataFromNode(this).assign}build(...e){const t=e[0];if(!1===this._hasStack(t)&&"setup"===t.buildStage&&(t.context.nodeLoop||t.context.nodeBlock)){let e=!1;if(this.node.isShaderCallNodeInternal&&null===this.node.shaderNode.getLayout()&&t.fnCall&&t.fnCall.shaderNode){if(t.getDataFromNode(this.node.shaderNode).hasLoop){t.getDataFromNode(this).forceDeclaration=!0,e=!0}}const r=t.getBaseStack();e?r.addToStackBefore(this):r.addToStack(this)}return this.isIntent(t)&&!0!==this.isAssign(t)?this.node.build(...e):super.build(...e)}generate(e){const{node:t,name:r,readOnly:s}=this,{renderer:i}=e,n=!0===i.backend.isWebGPUBackend;let a=!1,u=!1;s&&(a=e.isDeterministic(t),u=n?s:a);const l=this.getNodeType(e);if("void"==l){!0!==this.isIntent(e)&&o('TSL: ".toVar()" can not be used with void type.',this.stackTrace);return t.build(e)}const d=e.getVectorType(l),c=t.build(e,d),h=e.getVarFromNode(this,r,d,void 0,u),p=e.getPropertyName(h);let g=p;if(u)if(n)g=a?`const ${p}`:`let ${p}`;else{const r=t.getArrayCount(e);g=`const ${e.getVar(h.type,p,r)}`}return e.addLineFlowCode(`${g} = ${c}`,this),p}_hasStack(e){return void 0!==e.getDataFromNode(this).stack}}const Cu=nn(wu),Mu=(e,t=null)=>Cu(e,t).toStack(),Bu=(e,t=null)=>Cu(e,t,!0).toStack(),Fu=e=>Cu(e).setIntent(!0).toStack();Ri("toVar",Mu),Ri("toConst",Bu),Ri("toVarIntent",Fu);class Lu extends di{static get type(){return"SubBuild"}constructor(e,t,r=null){super(r),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(null!==this.nodeType)return this.nodeType;e.addSubBuild(this.name);const t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);const r=this.node.build(e,...t);return e.removeSubBuild(),r}}const Pu=(e,t,r=null)=>new Lu(en(e),t,r);class Du extends di{static get type(){return"VaryingNode"}constructor(e,t=null){super(),this.node=Pu(e,"VERTEX"),this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){const t=e.getNodeProperties(this);let r=t.varying;if(void 0===r){const s=this.name,i=this.getNodeType(e),n=this.interpolationType,a=this.interpolationSampling;t.varying=r=e.getVaryingFromNode(this,s,i,n,a),t.node=Pu(this.node,"VERTEX")}return r.needsInterpolation||(r.needsInterpolation="fragment"===e.shaderStage),r}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}generate(e){const t=e.getSubBuildProperty("property",e.currentStack),r=e.getNodeProperties(this),s=this.setupVarying(e);if(void 0===r[t]){const i=this.getNodeType(e),n=e.getPropertyName(s,ei.VERTEX);e.flowNodeFromShaderStage(ei.VERTEX,r.node,i,n),r[t]=n}return e.getPropertyName(s)}}const Uu=nn(Du).setParameterLength(1,2),Iu=e=>Uu(e);Ri("toVarying",Uu),Ri("toVertexStage",Iu);const Ou=dn(([e])=>{const t=e.mul(.9478672986).add(.0521327014).pow(2.4),r=e.mul(.0773993808),s=e.lessThanEqual(.04045);return ou(t,r,s)}).setLayout({name:"sRGBTransferEOTF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),Vu=dn(([e])=>{const t=e.pow(.41666).mul(1.055).sub(.055),r=e.mul(12.92),s=e.lessThanEqual(.0031308);return ou(t,r,s)}).setLayout({name:"sRGBTransferOETF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),ku="WorkingColorSpace";class Gu extends pi{static get type(){return"ColorSpaceNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this.source=t,this.target=r}resolveColorSpace(e,t){return t===ku?p.workingColorSpace:"OutputColorSpace"===t?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){const{colorNode:t}=this,r=this.resolveColorSpace(e,this.source),s=this.resolveColorSpace(e,this.target);let i=t;return!1!==p.enabled&&r!==s&&r&&s?(p.getTransfer(r)===g&&(i=wn(Ou(i.rgb),i.a)),p.getPrimaries(r)!==p.getPrimaries(s)&&(i=wn(Ln(p._getMatrix(new n,r,s)).mul(i.rgb),i.a)),p.getTransfer(s)===g&&(i=wn(Vu(i.rgb),i.a)),i):i}}const $u=(e,t)=>new Gu(en(e),ku,t),zu=(e,t)=>new Gu(en(e),t,ku);Ri("workingToColorSpace",$u),Ri("colorSpaceToWorking",zu);let Wu=class extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}};class Hu extends di{static get type(){return"ReferenceBaseNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.updateType=ti.OBJECT}setGroup(e){return this.group=e,this}element(e){return new Wu(this,en(e))}setNodeType(e){const t=Na(null,e);null!==this.group&&t.setGroup(this.group),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew qu(e,t,r);class Xu extends pi{static get type(){return"ToneMappingNode"}constructor(e,t=Qu,r=null){super("vec3"),this._toneMapping=e,this.exposureNode=t,this.colorNode=r}customCacheKey(){return ks(this._toneMapping)}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup(e){const t=this.colorNode||e.context.color,r=this._toneMapping;if(r===m)return t;let s=null;const i=e.renderer.library.getToneMappingFunction(r);return null!==i?s=wn(i(t.rgb,this.exposureNode),t.a):(o("ToneMappingNode: Unsupported Tone Mapping configuration.",r),s=t),s}}const Ku=(e,t,r)=>new Xu(e,en(t),en(r)),Qu=ju("toneMappingExposure","float");Ri("toneMapping",(e,t,r)=>Ku(t,r,e));const Yu=new WeakMap;function Zu(e,t){let r=Yu.get(e);return void 0===r&&(r=new b(e,t),Yu.set(e,r)),r}class Ju extends xi{static get type(){return"BufferAttributeNode"}constructor(e,t=null,r=0,s=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=r,this.bufferOffset=s,this.usage=f,this.instanced=!1,this.attribute=null,this.global=!0,e&&!0===e.isBufferAttribute&&e.itemSize<=4&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(0===this.bufferStride&&0===this.bufferOffset){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return null===this.bufferType&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(null!==this.attribute)return;const t=this.getNodeType(e),r=e.getTypeLength(t),s=this.value,i=this.bufferStride||r,n=this.bufferOffset;let a;a=!0===s.isInterleavedBuffer?s:!0===s.isBufferAttribute?Zu(s.array,i):Zu(s,i);const o=new y(a,r,n);a.setUsage(this.usage),this.attribute=o,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){const t=this.getNodeType(e),r=e.getBufferAttributeFromNode(this,t),s=e.getPropertyName(r);let i=null;if("vertex"===e.shaderStage||"compute"===e.shaderStage)this.name=s,i=s;else{i=Uu(this).build(e,t)}return i}getInputType(){return"bufferAttribute"}setUsage(e){return this.usage=e,this.attribute&&!0===this.attribute.isBufferAttribute&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}}function el(e,t=null,r=0,s=0,i=f,n=!1){return"mat3"===t||null===t&&9===e.itemSize?Ln(new Ju(e,"vec3",9,0).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,3).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,6).setUsage(i).setInstanced(n)):"mat4"===t||null===t&&16===e.itemSize?Pn(new Ju(e,"vec4",16,0).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,4).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,8).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,12).setUsage(i).setInstanced(n)):new Ju(e,t,r,s).setUsage(i)}const tl=(e,t=null,r=0,s=0)=>el(e,t,r,s),rl=(e,t=null,r=0,s=0)=>el(e,t,r,s,f,!0),sl=(e,t=null,r=0,s=0)=>el(e,t,r,s,x,!0);Ri("toAttribute",e=>tl(e.value));class il extends di{static get type(){return"ComputeNode"}constructor(e,t){super("void"),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name="",this.updateBeforeType=ti.OBJECT,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:"dispose"})}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){const t=this.computeNode.build(e);if(t){e.getNodeProperties(this).outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){const{shaderStage:r}=e;if("compute"===r){const t=this.computeNode.build(e,"void");""!==t&&e.addLineFlowCode(t,this)}else{const r=e.getNodeProperties(this).outputComputeNode;if(r)return r.build(e,t)}}}const nl=(e,t=[64])=>{(0===t.length||t.length>3)&&o("TSL: compute() workgroupSize must have 1, 2, or 3 elements",new Us);for(let e=0;enl(e,r).setCount(t);Ri("compute",al),Ri("computeKernel",nl);class ol extends di{static get type(){return"IsolateNode"}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isIsolateNode=!0}getNodeType(e){const t=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);const s=this.node.getNodeType(e);return e.setCache(t),s}build(e,...t){const r=e.getCache(),s=e.getCacheFromNode(this,this.parent);e.setCache(s);const i=this.node.build(e,...t);return e.setCache(r),i}setParent(e){return this.parent=e,this}getParent(){return this.parent}}const ul=e=>new ol(en(e));function ll(e,t=!0){return d('TSL: "cache()" has been deprecated. Use "isolate()" instead.'),ul(e).setParent(t)}Ri("cache",ll),Ri("isolate",ul);class dl extends di{static get type(){return"BypassNode"}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){const t=this.callNode.build(e,"void");return""!==t&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}const cl=nn(dl).setParameterLength(2);Ri("bypass",cl);class hl extends di{static get type(){return"RemapNode"}constructor(e,t,r,s=fn(0),i=fn(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=r,this.outLowNode=s,this.outHighNode=i,this.doClamp=!0}setup(){const{node:e,inLowNode:t,inHighNode:r,outLowNode:s,outHighNode:i,doClamp:n}=this;let a=e.sub(t).div(r.sub(t));return!0===n&&(a=a.clamp()),a.mul(i.sub(s)).add(s)}}const pl=nn(hl,null,null,{doClamp:!1}).setParameterLength(3,5),gl=nn(hl).setParameterLength(3,5);Ri("remap",pl),Ri("remapClamp",gl);class ml extends di{static get type(){return"ExpressionNode"}constructor(e="",t="void"){super(t),this.snippet=e}generate(e,t){const r=this.getNodeType(e),s=this.snippet;if("void"!==r)return e.format(s,r,t);e.addLineFlowCode(s,this)}}const fl=nn(ml).setParameterLength(1,2),yl=e=>(e?Tu(e,fl("discard")):fl("discard")).toStack();Ri("discard",yl);class bl extends pi{static get type(){return"RenderOutputNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this._toneMapping=t,this.outputColorSpace=r,this.isRenderOutputNode=!0}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup({context:e}){let t=this.colorNode||e.color;const r=(null!==this._toneMapping?this._toneMapping:e.toneMapping)||m,s=(null!==this.outputColorSpace?this.outputColorSpace:e.outputColorSpace)||T;return r!==m&&(t=t.toneMapping(r)),s!==T&&s!==p.workingColorSpace&&(t=t.workingToColorSpace(s)),t}}const xl=(e,t=null,r=null)=>new bl(en(e),t,r);Ri("renderOutput",xl);class Tl extends pi{static get type(){return"DebugNode"}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){const t=this.callback,r=this.node.build(e);if(null!==t)t(e,r);else{const t="--- TSL debug - "+e.shaderStage+" shader ---",s="-".repeat(t.length);let i="";i+="// #"+t+"#\n",i+=e.flow.code.replace(/^\t/gm,"")+"\n",i+="/* ... */ "+r+" /* ... */\n",i+="// #"+s+"#\n",_(i)}return r}}const _l=(e,t=null)=>new Tl(en(e),t).toStack();Ri("debug",_l);class vl{constructor(){this._renderer=null,this.currentFrame=null}get nodeFrame(){return this._renderer._nodes.nodeFrame}setRenderer(e){return this._renderer=e,this}getRenderer(){return this._renderer}init(){}begin(){}finish(){}inspect(){}computeAsync(){}beginCompute(){}finishCompute(){}beginRender(){}finishRender(){}copyTextureToTexture(){}copyFramebufferToTexture(){}}class Nl extends di{static get type(){return"InspectorNode"}constructor(e,t="",r=null){super(),this.node=e,this.name=t,this.callback=r,this.updateType=ti.FRAME,this.isInspectorNode=!0}getName(){return this.name||this.node.name}update(e){e.renderer.inspector.inspect(this)}getNodeType(e){return this.node.getNodeType(e)}setup(e){let t=this.node;return!0===e.context.inspector&&null!==this.callback&&(t=this.callback(t)),!0!==e.renderer.backend.isWebGPUBackend&&e.renderer.inspector.constructor!==vl&&v('TSL: ".toInspector()" is only available with WebGPU.'),t}}function Sl(e,t="",r=null){return(e=en(e)).before(new Nl(e,t,r))}Ri("toInspector",Sl);class Rl extends di{static get type(){return"AttributeNode"}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(null===t){const r=this.getAttributeName(e);if(e.hasGeometryAttribute(r)){const s=e.geometry.getAttribute(r);t=e.getTypeFromAttribute(s)}else t="float"}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){const t=this.getAttributeName(e),r=this.getNodeType(e);if(!0===e.hasGeometryAttribute(t)){const s=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(s),n=e.getAttribute(t,i);if("vertex"===e.shaderStage)return e.format(n.name,i,r);return Uu(this).build(e,r)}return d(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(r)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}}const El=(e,t=null)=>new Rl(e,t),Al=(e=0)=>El("uv"+(e>0?e:""),"vec2");class wl extends di{static get type(){return"TextureSizeNode"}constructor(e,t=null){super("uvec2"),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){const r=this.textureNode.build(e,"property"),s=null===this.levelNode?"0":this.levelNode.build(e,"int");return e.format(`${e.getMethod("textureDimensions")}( ${r}, ${s} )`,this.getNodeType(e),t)}}const Cl=nn(wl).setParameterLength(1,2);class Ml extends va{static get type(){return"MaxMipLevelNode"}constructor(e){super(0),this._textureNode=e,this.updateType=ti.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){const e=this.texture,t=e.images,r=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(r&&void 0!==r.width){const{width:e,height:t}=r;this.value=Math.log2(Math.max(e,t))}}}const Bl=nn(Ml).setParameterLength(1);class Fl extends Error{constructor(e,t=null){super(e),this.name="NodeError",this.stackTrace=t}}const Ll=new N;class Pl extends va{static get type(){return"TextureNode"}constructor(e=Ll,t=null,r=null,s=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=r,this.biasNode=s,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=ti.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this._flipYUniform=null,this.setUpdateMatrix(null===t)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return!0===this.value.isDepthTexture?"float":this.value.type===S?"uvec4":this.value.type===R?"ivec4":"vec4"}getInputType(){return"texture"}getDefaultUV(){return Al(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return null===this._matrixUniform&&(this._matrixUniform=Na(this.value.matrix)),this._matrixUniform.mul(Sn(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this}setupUV(e,t){return e.isFlipY()&&(null===this._flipYUniform&&(this._flipYUniform=Na(!1)),t=t.toVar(),t=this.sampler?this._flipYUniform.select(t.flipY(),t):this._flipYUniform.select(t.setY(yn(Cl(this,this.levelNode).y).sub(t.y).sub(1)),t)),t}setup(e){const t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;const r=this.value;if(!r||!0!==r.isTexture)throw new Fl("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().",this.stackTrace);const s=dn(()=>{let t=this.uvNode;return null!==t&&!0!==e.context.forceUVContext||!e.context.getUV||(t=e.context.getUV(this,e)),t||(t=this.getDefaultUV()),!0===this.updateMatrix&&(t=this.getTransformedUV(t)),t=this.setupUV(e,t),this.updateType=null!==this._matrixUniform||null!==this._flipYUniform?ti.OBJECT:ti.NONE,t})();let i=this.levelNode;null===i&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this));let n=null,a=null;if(null!==this.compareNode)if(e.renderer.hasCompatibility(E.TEXTURE_COMPARE))n=this.compareNode;else{const e=r.compareFunction;null===e||e===A||e===w||e===C||e===M?a=this.compareNode:(n=this.compareNode,v('TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.'))}t.uvNode=s,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=n,t.compareStepNode=a,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,!0===this.sampler?"vec2":"ivec2")}generateOffset(e,t){return t.build(e,"ivec2")}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;let d;return d=i?e.generateTextureBias(l,t,r,i,n,u):o?e.generateTextureGrad(l,t,r,o,n,u):a?e.generateTextureCompare(l,t,r,a,n,u):!1===this.sampler?e.generateTextureLoad(l,t,r,s,n,u):s?e.generateTextureLevel(l,t,r,s,n,u):e.generateTexture(l,t,r,n,u),d}generate(e,t){const r=this.value,s=e.getNodeProperties(this),i=super.generate(e,"property");if(/^sampler/.test(t))return i+"_sampler";if(e.isReference(t))return i;{const n=e.getDataFromNode(this),a=this.getNodeType(e);let o=n.propertyName;if(void 0===o){const{uvNode:t,levelNode:u,biasNode:l,compareNode:d,compareStepNode:c,depthNode:h,gradNode:p,offsetNode:g}=s,m=this.generateUV(e,t),f=u?u.build(e,"float"):null,y=l?l.build(e,"float"):null,b=h?h.build(e,"int"):null,x=d?d.build(e,"float"):null,T=c?c.build(e,"float"):null,_=p?[p[0].build(e,"vec2"),p[1].build(e,"vec2")]:null,v=g?this.generateOffset(e,g):null,N=e.getVarFromNode(this);o=e.getPropertyName(N);let S=this.generateSnippet(e,i,m,f,y,b,x,_,v);if(null!==T){const t=r.compareFunction;S=t===C||t===M?Xo(fl(S,a),fl(T,"float")).build(e,a):Xo(fl(T,"float"),fl(S,a)).build(e,a)}e.addLineFlowCode(`${o} = ${S}`,this),n.snippet=S,n.propertyName=o}let u=o;return e.needsToWorkingColorSpace(r)&&(u=zu(fl(u,a),r.colorSpace).setup(e).build(e,a)),e.format(u,a,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}sample(e){const t=this.clone();return t.uvNode=en(e),t.referenceNode=this.getBase(),en(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){const t=this.clone();t.biasNode=en(e).mul(Bl(t)),t.referenceNode=this.getBase();const r=t.value;return!1===t.generateMipmaps&&(r&&!1===r.generateMipmaps||r.minFilter===B||r.magFilter===B)&&(d("TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture."),t.biasNode=null),en(t)}level(e){const t=this.clone();return t.levelNode=en(e),t.referenceNode=this.getBase(),en(t)}size(e){return Cl(this,e)}bias(e){const t=this.clone();return t.biasNode=en(e),t.referenceNode=this.getBase(),en(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){const t=this.clone();return t.compareNode=en(e),t.referenceNode=this.getBase(),en(t)}grad(e,t){const r=this.clone();return r.gradNode=[en(e),en(t)],r.referenceNode=this.getBase(),en(r)}depth(e){const t=this.clone();return t.depthNode=en(e),t.referenceNode=this.getBase(),en(t)}offset(e){const t=this.clone();return t.offsetNode=en(e),t.referenceNode=this.getBase(),en(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){const e=this.value,t=this._matrixUniform;null!==t&&(t.value=e.matrix),!0===e.matrixAutoUpdate&&e.updateMatrix();const r=this._flipYUniform;null!==r&&(r.value=e.image instanceof ImageBitmap&&!0===e.flipY||!0===e.isRenderTargetTexture||!0===e.isFramebufferTexture||!0===e.isDepthTexture)}clone(){const e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}const Dl=nn(Pl).setParameterLength(1,4).setName("texture"),Ul=(e=Ll,t=null,r=null,s=null)=>{let i;return e&&!0===e.isTextureNode?(i=en(e.clone()),i.referenceNode=e.getBase(),null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Dl(e,t,r,s),i},Il=(...e)=>Ul(...e).setSampler(!1);class Ol extends va{static get type(){return"BufferNode"}constructor(e,t,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=r,this.updateRanges=[]}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}getElementType(e){return this.getNodeType(e)}getInputType(){return"buffer"}}const Vl=(e,t,r)=>new Ol(e,t,r);class kl extends ci{static get type(){return"UniformArrayElementNode"}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){const t=super.generate(e),r=this.getNodeType(),s=this.node.getPaddedType();return e.format(t,s,r)}}class Gl extends Ol{static get type(){return"UniformArrayNode"}constructor(e,t=null){super(null),this.array=e,this.elementType=null===t?Xs(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=ti.RENDER,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){const e=this.elementType;let t="vec4";return"mat2"===e?t="mat2":!0===/mat/.test(e)?t="mat4":"i"===e.charAt(0)?t="ivec4":"u"===e.charAt(0)&&(t="uvec4"),t}update(){const{array:e,value:t}=this,r=this.elementType;if("float"===r||"int"===r||"uint"===r)for(let r=0;rnew Gl(e,t);class zl extends di{constructor(e){super("float"),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}const Wl=nn(zl).setParameterLength(1);let Hl,ql;class jl extends di{static get type(){return"ScreenNode"}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===jl.DPR?"float":this.scope===jl.VIEWPORT?"vec4":"vec2"}getUpdateType(){let e=ti.NONE;return this.scope!==jl.SIZE&&this.scope!==jl.VIEWPORT&&this.scope!==jl.DPR||(e=ti.RENDER),this.updateType=e,e}update({renderer:e}){const t=e.getRenderTarget();this.scope===jl.VIEWPORT?null!==t?ql.copy(t.viewport):(e.getViewport(ql),ql.multiplyScalar(e.getPixelRatio())):this.scope===jl.DPR?this._output.value=e.getPixelRatio():null!==t?(Hl.width=t.width,Hl.height=t.height):e.getDrawingBufferSize(Hl)}setup(){const e=this.scope;let r=null;return r=e===jl.SIZE?Na(Hl||(Hl=new t)):e===jl.VIEWPORT?Na(ql||(ql=new s)):e===jl.DPR?Na(1):Tn(Yl.div(Ql)),this._output=r,r}generate(e){if(this.scope===jl.COORDINATE){let t=e.getFragCoord();if(e.isFlipY()){const r=e.getNodeProperties(Ql).outputNode.build(e);t=`${e.getType("vec2")}( ${t}.x, ${r}.y - ${t}.y )`}return t}return super.generate(e)}}jl.COORDINATE="coordinate",jl.VIEWPORT="viewport",jl.SIZE="size",jl.UV="uv",jl.DPR="dpr";const Xl=an(jl,jl.DPR),Kl=an(jl,jl.UV),Ql=an(jl,jl.SIZE),Yl=an(jl,jl.COORDINATE),Zl=an(jl,jl.VIEWPORT),Jl=Zl.zw,ed=Yl.sub(Zl.xy),td=ed.div(Jl),rd=dn(()=>(d('TSL: "viewportResolution" is deprecated. Use "screenSize" instead.',new Us),Ql),"vec2").once()();let sd=null,id=null,nd=null,ad=null,od=null,ud=null,ld=null,dd=null,cd=null,hd=null,pd=null,gd=null,md=null,fd=null;const yd=Na(0,"uint").setName("u_cameraIndex").setGroup(ba("cameraIndex")).toVarying("v_cameraIndex"),bd=Na("float").setName("cameraNear").setGroup(Ta).onRenderUpdate(({camera:e})=>e.near),xd=Na("float").setName("cameraFar").setGroup(Ta).onRenderUpdate(({camera:e})=>e.far),Td=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrix);null===id?id=$l(r).setGroup(Ta).setName("cameraProjectionMatrices"):id.array=r,t=id.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrix")}else null===sd&&(sd=Na(e.projectionMatrix).setName("cameraProjectionMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrix)),t=sd;return t}).once()(),_d=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrixInverse);null===ad?ad=$l(r).setGroup(Ta).setName("cameraProjectionMatricesInverse"):ad.array=r,t=ad.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrixInverse")}else null===nd&&(nd=Na(e.projectionMatrixInverse).setName("cameraProjectionMatrixInverse").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse)),t=nd;return t}).once()(),vd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorldInverse);null===ud?ud=$l(r).setGroup(Ta).setName("cameraViewMatrices"):ud.array=r,t=ud.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraViewMatrix")}else null===od&&(od=Na(e.matrixWorldInverse).setName("cameraViewMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorldInverse)),t=od;return t}).once()(),Nd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorld);null===dd?dd=$l(r).setGroup(Ta).setName("cameraWorldMatrices"):dd.array=r,t=dd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraWorldMatrix")}else null===ld&&(ld=Na(e.matrixWorld).setName("cameraWorldMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorld)),t=ld;return t}).once()(),Sd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.normalMatrix);null===hd?hd=$l(r).setGroup(Ta).setName("cameraNormalMatrices"):hd.array=r,t=hd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraNormalMatrix")}else null===cd&&(cd=Na(e.normalMatrix).setName("cameraNormalMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.normalMatrix)),t=cd;return t}).once()(),Rd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const s=[];for(let t=0,i=e.cameras.length;t{const r=e.cameras,s=t.array;for(let e=0,t=r.length;et.value.setFromMatrixPosition(e.matrixWorld))),t=pd;return t}).once()(),Ed=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.viewport);null===fd?fd=$l(r,"vec4").setGroup(Ta).setName("cameraViewports"):fd.array=r,t=fd.element(yd).toConst("cameraViewport")}else null===md&&(md=wn(0,0,Ql.x,Ql.y).toConst("cameraViewport")),t=md;return t}).once()(),Ad=new F;class wd extends di{static get type(){return"Object3DNode"}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=ti.OBJECT,this.uniformNode=new va(null)}getNodeType(){const e=this.scope;return e===wd.WORLD_MATRIX?"mat4":e===wd.POSITION||e===wd.VIEW_POSITION||e===wd.DIRECTION||e===wd.SCALE?"vec3":e===wd.RADIUS?"float":void 0}update(e){const t=this.object3d,s=this.uniformNode,i=this.scope;if(i===wd.WORLD_MATRIX)s.value=t.matrixWorld;else if(i===wd.POSITION)s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld);else if(i===wd.SCALE)s.value=s.value||new r,s.value.setFromMatrixScale(t.matrixWorld);else if(i===wd.DIRECTION)s.value=s.value||new r,t.getWorldDirection(s.value);else if(i===wd.VIEW_POSITION){const i=e.camera;s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld),s.value.applyMatrix4(i.matrixWorldInverse)}else if(i===wd.RADIUS){const r=e.object.geometry;null===r.boundingSphere&&r.computeBoundingSphere(),Ad.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),s.value=Ad.radius}}generate(e){const t=this.scope;return t===wd.WORLD_MATRIX?this.uniformNode.nodeType="mat4":t===wd.POSITION||t===wd.VIEW_POSITION||t===wd.DIRECTION||t===wd.SCALE?this.uniformNode.nodeType="vec3":t===wd.RADIUS&&(this.uniformNode.nodeType="float"),this.uniformNode.build(e)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}}wd.WORLD_MATRIX="worldMatrix",wd.POSITION="position",wd.SCALE="scale",wd.VIEW_POSITION="viewPosition",wd.DIRECTION="direction",wd.RADIUS="radius";const Cd=nn(wd,wd.DIRECTION).setParameterLength(1),Md=nn(wd,wd.WORLD_MATRIX).setParameterLength(1),Bd=nn(wd,wd.POSITION).setParameterLength(1),Fd=nn(wd,wd.SCALE).setParameterLength(1),Ld=nn(wd,wd.VIEW_POSITION).setParameterLength(1),Pd=nn(wd,wd.RADIUS).setParameterLength(1);class Dd extends wd{static get type(){return"ModelNode"}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}}const Ud=an(Dd,Dd.DIRECTION),Id=an(Dd,Dd.WORLD_MATRIX),Od=an(Dd,Dd.POSITION),Vd=an(Dd,Dd.SCALE),kd=an(Dd,Dd.VIEW_POSITION),Gd=an(Dd,Dd.RADIUS),$d=Na(new n).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),zd=Na(new a).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),Wd=dn(e=>e.context.modelViewMatrix||Hd).once()().toVar("modelViewMatrix"),Hd=vd.mul(Id),qd=dn(e=>(e.context.isHighPrecisionModelViewMatrix=!0,Na("mat4").onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar("highpModelViewMatrix"),jd=dn(e=>{const t=e.context.isHighPrecisionModelViewMatrix;return Na("mat3").onObjectUpdate(({object:e,camera:r})=>(!0!==t&&e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar("highpModelNormalViewMatrix"),Xd=dn(e=>"fragment"!==e.shaderStage?(v("TSL: `clipSpace` is only available in fragment stage."),wn()):e.context.clipSpace.toVarying("v_clipSpace")).once()(),Kd=El("position","vec3"),Qd=Kd.toVarying("positionLocal"),Yd=Kd.toVarying("positionPrevious"),Zd=dn(e=>Id.mul(Qd).xyz.toVarying(e.getSubBuildProperty("v_positionWorld")),"vec3").once(["POSITION"])(),Jd=dn(()=>Qd.transformDirection(Id).toVarying("v_positionWorldDirection").normalize().toVar("positionWorldDirection"),"vec3").once(["POSITION"])(),ec=dn(e=>{if("fragment"===e.shaderStage&&e.material.vertexNode){const e=_d.mul(Xd);return e.xyz.div(e.w).toVar("positionView")}return e.context.setupPositionView().toVarying("v_positionView")},"vec3").once(["POSITION","VERTEX"])(),tc=dn(e=>{let t;return t=e.camera.isOrthographicCamera?Sn(0,0,1):ec.negate().toVarying("v_positionViewDirection").normalize(),t.toVar("positionViewDirection")},"vec3").once(["POSITION"])();class rc extends di{static get type(){return"FrontFacingNode"}constructor(){super("bool"),this.isFrontFacingNode=!0}generate(e){if("fragment"!==e.shaderStage)return"true";const{material:t}=e;return t.side===L?"false":e.getFrontFacing()}}const sc=an(rc),ic=fn(sc).mul(2).sub(1),nc=dn(([e],{material:t})=>{const r=t.side;return r===L?e=e.mul(-1):r===P&&(e=e.mul(ic)),e}),ac=El("normal","vec3"),oc=dn(e=>!1===e.geometry.hasAttribute("normal")?(d('TSL: Vertex attribute "normal" not found on geometry.'),Sn(0,1,0)):ac,"vec3").once()().toVar("normalLocal"),uc=ec.dFdx().cross(ec.dFdy()).normalize().toVar("normalFlat"),lc=dn(e=>{let t;return t=e.isFlatShading()?uc:mc(oc).toVarying("v_normalViewGeometry").normalize(),t},"vec3").once()().toVar("normalViewGeometry"),dc=dn(e=>{let t=lc.transformDirection(vd);return!0!==e.isFlatShading()&&(t=t.toVarying("v_normalWorldGeometry")),t.normalize().toVar("normalWorldGeometry")},"vec3").once()(),cc=dn(e=>{let t;return"NORMAL"===e.subBuildFn||"VERTEX"===e.subBuildFn?(t=lc,!0!==e.isFlatShading()&&(t=nc(t))):t=e.context.setupNormal().context({getUV:null,getTextureLevel:null}),t},"vec3").once(["NORMAL","VERTEX"])().toVar("normalView"),hc=cc.transformDirection(vd).toVar("normalWorld"),pc=dn(({subBuildFn:e,context:t})=>{let r;return r="NORMAL"===e||"VERTEX"===e?cc:t.setupClearcoatNormal().context({getUV:null,getTextureLevel:null}),r},"vec3").once(["NORMAL","VERTEX"])().toVar("clearcoatNormalView"),gc=dn(([e,t=Id])=>{const r=Ln(t),s=e.div(Sn(r[0].dot(r[0]),r[1].dot(r[1]),r[2].dot(r[2])));return r.mul(s).xyz}),mc=dn(([e],t)=>{const r=t.context.modelNormalViewMatrix;if(r)return r.transformDirection(e);const s=$d.mul(e);return vd.transformDirection(s)}),fc=dn(()=>(d('TSL: "transformedNormalView" is deprecated. Use "normalView" instead.'),cc)).once(["NORMAL","VERTEX"])(),yc=dn(()=>(d('TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.'),hc)).once(["NORMAL","VERTEX"])(),bc=dn(()=>(d('TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.'),pc)).once(["NORMAL","VERTEX"])(),xc=new D,Tc=new a,_c=Na(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),vc=Na(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),Nc=Na(new a).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){const r=null!==t.environment&&null===e.envMap?t.environmentRotation:e.envMapRotation;return r?(xc.copy(r),Tc.makeRotationFromEuler(xc)):Tc.identity(),Tc}),Sc=tc.negate().reflect(cc),Rc=tc.negate().refract(cc,_c),Ec=Sc.transformDirection(vd).toVar("reflectVector"),Ac=Rc.transformDirection(vd).toVar("reflectVector"),wc=new U;class Cc extends Pl{static get type(){return"CubeTextureNode"}constructor(e,t=null,r=null,s=null){super(e,t,r,s),this.isCubeTextureNode=!0}getInputType(){return!0===this.value.isDepthTexture?"cubeDepthTexture":"cubeTexture"}getDefaultUV(){const e=this.value;return e.mapping===I?Ec:e.mapping===O?Ac:(o('CubeTextureNode: Mapping "%s" not supported.',e.mapping),Sn(0,0,0))}setUpdateMatrix(){}setupUV(e,t){const r=this.value;return!0===r.isDepthTexture?e.renderer.coordinateSystem===h?Sn(t.x,t.y.negate(),t.z):t:(e.renderer.coordinateSystem!==h&&r.isRenderTargetTexture||(t=Sn(t.x.negate(),t.yz)),Nc.mul(t))}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}}const Mc=nn(Cc).setParameterLength(1,4).setName("cubeTexture"),Bc=(e=wc,t=null,r=null,s=null)=>{let i;return e&&!0===e.isCubeTextureNode?(i=en(e.clone()),i.referenceNode=e,null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Mc(e,t,r,s),i};class Fc extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}}class Lc extends di{static get type(){return"ReferenceNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.name=null,this.updateType=ti.OBJECT}element(e){return new Fc(this,en(e))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setNodeType(e){let t=null;t=null!==this.count?Vl(null,e,this.count):Array.isArray(this.getValueFromReference())?$l(null,e):"texture"===e?Ul(null):"cubeTexture"===e?Bc(null):Na(null,e),null!==this.group&&t.setGroup(this.group),null!==this.name&&t.setName(this.name),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew Lc(e,t,r),Dc=(e,t,r,s)=>new Lc(e,t,s,r);class Uc extends Lc{static get type(){return"MaterialReferenceNode"}constructor(e,t,r=null){super(e,t,r),this.material=r,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=null!==this.material?this.material:e.material,this.reference}}const Ic=(e,t,r=null)=>new Uc(e,t,r),Oc=Al(),Vc=ec.dFdx(),kc=ec.dFdy(),Gc=Oc.dFdx(),$c=Oc.dFdy(),zc=cc,Wc=kc.cross(zc),Hc=zc.cross(Vc),qc=Wc.mul(Gc.x).add(Hc.mul($c.x)),jc=Wc.mul(Gc.y).add(Hc.mul($c.y)),Xc=qc.dot(qc).max(jc.dot(jc)),Kc=Xc.equal(0).select(0,Xc.inverseSqrt()),Qc=qc.mul(Kc).toVar("tangentViewFrame"),Yc=jc.mul(Kc).toVar("bitangentViewFrame"),Zc=El("tangent","vec4"),Jc=Zc.xyz.toVar("tangentLocal"),eh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?Wd.mul(wn(Jc,0)).xyz.toVarying("v_tangentView").normalize():Qc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("tangentView"),th=eh.transformDirection(vd).toVarying("v_tangentWorld").normalize().toVar("tangentWorld"),rh=dn(([e,t],r)=>{let s=e.mul(Zc.w).xyz;return"NORMAL"===r.subBuildFn&&!0!==r.isFlatShading()&&(s=s.toVarying(t)),s}).once(["NORMAL"]),sh=rh(ac.cross(Zc),"v_bitangentGeometry").normalize().toVar("bitangentGeometry"),ih=rh(oc.cross(Jc),"v_bitangentLocal").normalize().toVar("bitangentLocal"),nh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?rh(cc.cross(eh),"v_bitangentView").normalize():Yc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("bitangentView"),ah=rh(hc.cross(th),"v_bitangentWorld").normalize().toVar("bitangentWorld"),oh=Ln(eh,nh,cc).toVar("TBNViewMatrix"),uh=tc.mul(oh),lh=dn(()=>{let e=ta.cross(tc);return e=e.cross(ta).normalize(),e=ou(e,cc,Jn.mul(zn.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()(),dh=e=>en(e).mul(.5).add(.5),ch=e=>Sn(e,To(lu(fn(1).sub(Zo(e,e)))));class hh extends pi{static get type(){return"NormalMapNode"}constructor(e,t=null){super("vec3"),this.node=e,this.scaleNode=t,this.normalMapType=V,this.unpackNormalMode=k}setup(e){const{normalMapType:t,scaleNode:r,unpackNormalMode:s}=this;let i=this.node.mul(2).sub(1);if(t===V?s===G?i=ch(i.xy):s===$?i=ch(i.yw):s!==k&&console.error(`THREE.NodeMaterial: Unexpected unpack normal mode: ${s}`):s!==k&&console.error(`THREE.NodeMaterial: Normal map type '${t}' is not compatible with unpack normal mode '${s}'`),null!==r){let t=r;!0===e.isFlatShading()&&(t=nc(t)),i=Sn(i.xy.mul(t),i.z)}let n=null;return t===z?n=mc(i):t===V?n=oh.mul(i).normalize():(o(`NodeMaterial: Unsupported normal map type: ${t}`),n=cc),n}}const ph=nn(hh).setParameterLength(1,2),gh=dn(({textureNode:e,bumpScale:t})=>{const r=t=>e.isolate().context({getUV:e=>t(e.uvNode||Al()),forceUVContext:!0}),s=fn(r(e=>e));return Tn(fn(r(e=>e.add(e.dFdx()))).sub(s),fn(r(e=>e.add(e.dFdy()))).sub(s)).mul(t)}),mh=dn(e=>{const{surf_pos:t,surf_norm:r,dHdxy:s}=e,i=t.dFdx().normalize(),n=r,a=t.dFdy().normalize().cross(n),o=n.cross(i),u=i.dot(a).mul(ic),l=u.sign().mul(s.x.mul(a).add(s.y.mul(o)));return u.abs().mul(r).sub(l).normalize()});class fh extends pi{static get type(){return"BumpMapNode"}constructor(e,t=null){super("vec3"),this.textureNode=e,this.scaleNode=t}setup(){const e=null!==this.scaleNode?this.scaleNode:1,t=gh({textureNode:this.textureNode,bumpScale:e});return mh({surf_pos:ec,surf_norm:cc,dHdxy:t})}}const yh=nn(fh).setParameterLength(1,2),bh=new Map;class xh extends di{static get type(){return"MaterialNode"}constructor(e){super(),this.scope=e}getCache(e,t){let r=bh.get(e);return void 0===r&&(r=Ic(e,t),bh.set(e,r)),r}getFloat(e){return this.getCache(e,"float")}getColor(e){return this.getCache(e,"color")}getTexture(e){return this.getCache("map"===e?"map":e+"Map","texture")}setup(e){const t=e.context.material,r=this.scope;let s=null;if(r===xh.COLOR){const e=void 0!==t.color?this.getColor(r):Sn();s=t.map&&!0===t.map.isTexture?e.mul(this.getTexture("map")):e}else if(r===xh.OPACITY){const e=this.getFloat(r);s=t.alphaMap&&!0===t.alphaMap.isTexture?e.mul(this.getTexture("alpha")):e}else if(r===xh.SPECULAR_STRENGTH)s=t.specularMap&&!0===t.specularMap.isTexture?this.getTexture("specular").r:fn(1);else if(r===xh.SPECULAR_INTENSITY){const e=this.getFloat(r);s=t.specularIntensityMap&&!0===t.specularIntensityMap.isTexture?e.mul(this.getTexture(r).a):e}else if(r===xh.SPECULAR_COLOR){const e=this.getColor(r);s=t.specularColorMap&&!0===t.specularColorMap.isTexture?e.mul(this.getTexture(r).rgb):e}else if(r===xh.ROUGHNESS){const e=this.getFloat(r);s=t.roughnessMap&&!0===t.roughnessMap.isTexture?e.mul(this.getTexture(r).g):e}else if(r===xh.METALNESS){const e=this.getFloat(r);s=t.metalnessMap&&!0===t.metalnessMap.isTexture?e.mul(this.getTexture(r).b):e}else if(r===xh.EMISSIVE){const e=this.getFloat("emissiveIntensity"),i=this.getColor(r).mul(e);s=t.emissiveMap&&!0===t.emissiveMap.isTexture?i.mul(this.getTexture(r)):i}else if(r===xh.NORMAL)t.normalMap?(s=ph(this.getTexture("normal"),this.getCache("normalScale","vec2")),s.normalMapType=t.normalMapType,t.normalMap.format!=W&&t.normalMap.format!=H&&t.normalMap.format!=q||(s.unpackNormalMode=G)):s=t.bumpMap?yh(this.getTexture("bump").r,this.getFloat("bumpScale")):cc;else if(r===xh.CLEARCOAT){const e=this.getFloat(r);s=t.clearcoatMap&&!0===t.clearcoatMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_ROUGHNESS){const e=this.getFloat(r);s=t.clearcoatRoughnessMap&&!0===t.clearcoatRoughnessMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_NORMAL)s=t.clearcoatNormalMap?ph(this.getTexture(r),this.getCache(r+"Scale","vec2")):cc;else if(r===xh.SHEEN){const e=this.getColor("sheenColor").mul(this.getFloat("sheen"));s=t.sheenColorMap&&!0===t.sheenColorMap.isTexture?e.mul(this.getTexture("sheenColor").rgb):e}else if(r===xh.SHEEN_ROUGHNESS){const e=this.getFloat(r);s=t.sheenRoughnessMap&&!0===t.sheenRoughnessMap.isTexture?e.mul(this.getTexture(r).a):e,s=s.clamp(1e-4,1)}else if(r===xh.ANISOTROPY)if(t.anisotropyMap&&!0===t.anisotropyMap.isTexture){const e=this.getTexture(r);s=Fn(sp.x,sp.y,sp.y.negate(),sp.x).mul(e.rg.mul(2).sub(Tn(1)).normalize().mul(e.b))}else s=sp;else if(r===xh.IRIDESCENCE_THICKNESS){const e=Pc("1","float",t.iridescenceThicknessRange);if(t.iridescenceThicknessMap){const i=Pc("0","float",t.iridescenceThicknessRange);s=e.sub(i).mul(this.getTexture(r).g).add(i)}else s=e}else if(r===xh.TRANSMISSION){const e=this.getFloat(r);s=t.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===xh.THICKNESS){const e=this.getFloat(r);s=t.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===xh.IOR)s=this.getFloat(r);else if(r===xh.LIGHT_MAP)s=this.getTexture(r).rgb.mul(this.getFloat("lightMapIntensity"));else if(r===xh.AO)s=this.getTexture(r).r.sub(1).mul(this.getFloat("aoMapIntensity")).add(1);else if(r===xh.LINE_DASH_OFFSET)s=t.dashOffset?this.getFloat(r):fn(0);else{const t=this.getNodeType(e);s=this.getCache(r,t)}return s}}xh.ALPHA_TEST="alphaTest",xh.COLOR="color",xh.OPACITY="opacity",xh.SHININESS="shininess",xh.SPECULAR="specular",xh.SPECULAR_STRENGTH="specularStrength",xh.SPECULAR_INTENSITY="specularIntensity",xh.SPECULAR_COLOR="specularColor",xh.REFLECTIVITY="reflectivity",xh.ROUGHNESS="roughness",xh.METALNESS="metalness",xh.NORMAL="normal",xh.CLEARCOAT="clearcoat",xh.CLEARCOAT_ROUGHNESS="clearcoatRoughness",xh.CLEARCOAT_NORMAL="clearcoatNormal",xh.EMISSIVE="emissive",xh.ROTATION="rotation",xh.SHEEN="sheen",xh.SHEEN_ROUGHNESS="sheenRoughness",xh.ANISOTROPY="anisotropy",xh.IRIDESCENCE="iridescence",xh.IRIDESCENCE_IOR="iridescenceIOR",xh.IRIDESCENCE_THICKNESS="iridescenceThickness",xh.IOR="ior",xh.TRANSMISSION="transmission",xh.THICKNESS="thickness",xh.ATTENUATION_DISTANCE="attenuationDistance",xh.ATTENUATION_COLOR="attenuationColor",xh.LINE_SCALE="scale",xh.LINE_DASH_SIZE="dashSize",xh.LINE_GAP_SIZE="gapSize",xh.LINE_WIDTH="linewidth",xh.LINE_DASH_OFFSET="dashOffset",xh.POINT_SIZE="size",xh.DISPERSION="dispersion",xh.LIGHT_MAP="light",xh.AO="ao";const Th=an(xh,xh.ALPHA_TEST),_h=an(xh,xh.COLOR),vh=an(xh,xh.SHININESS),Nh=an(xh,xh.EMISSIVE),Sh=an(xh,xh.OPACITY),Rh=an(xh,xh.SPECULAR),Eh=an(xh,xh.SPECULAR_INTENSITY),Ah=an(xh,xh.SPECULAR_COLOR),wh=an(xh,xh.SPECULAR_STRENGTH),Ch=an(xh,xh.REFLECTIVITY),Mh=an(xh,xh.ROUGHNESS),Bh=an(xh,xh.METALNESS),Fh=an(xh,xh.NORMAL),Lh=an(xh,xh.CLEARCOAT),Ph=an(xh,xh.CLEARCOAT_ROUGHNESS),Dh=an(xh,xh.CLEARCOAT_NORMAL),Uh=an(xh,xh.ROTATION),Ih=an(xh,xh.SHEEN),Oh=an(xh,xh.SHEEN_ROUGHNESS),Vh=an(xh,xh.ANISOTROPY),kh=an(xh,xh.IRIDESCENCE),Gh=an(xh,xh.IRIDESCENCE_IOR),$h=an(xh,xh.IRIDESCENCE_THICKNESS),zh=an(xh,xh.TRANSMISSION),Wh=an(xh,xh.THICKNESS),Hh=an(xh,xh.IOR),qh=an(xh,xh.ATTENUATION_DISTANCE),jh=an(xh,xh.ATTENUATION_COLOR),Xh=an(xh,xh.LINE_SCALE),Kh=an(xh,xh.LINE_DASH_SIZE),Qh=an(xh,xh.LINE_GAP_SIZE),Yh=an(xh,xh.LINE_WIDTH),Zh=an(xh,xh.LINE_DASH_OFFSET),Jh=an(xh,xh.POINT_SIZE),ep=an(xh,xh.DISPERSION),tp=an(xh,xh.LIGHT_MAP),rp=an(xh,xh.AO),sp=Na(new t).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),ip=dn(e=>e.context.setupModelViewProjection(),"vec4").once()().toVarying("v_modelViewProjection");class np extends ci{static get type(){return"StorageArrayElementNode"}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}getMemberType(e,t){const r=this.storageBufferNode.structTypeNode;return r?r.getMemberType(e,t):"void"}setup(e){return!1===e.isAvailable("storageBuffer")&&!0===this.node.isPBO&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let r;const s=e.context.assign;if(r=!1===e.isAvailable("storageBuffer")?!0!==this.node.isPBO||!0===s||!this.node.value.isInstancedBufferAttribute&&"compute"===e.shaderStage?this.node.build(e):e.generatePBO(this):super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}const ap=nn(np).setParameterLength(2);class op extends Ol{static get type(){return"StorageBufferNode"}constructor(e,t=null,r=0){let s,i=null;t&&t.isStruct?(s="struct",i=t.layout,(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)&&(r=e.count)):null===t&&(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)?(s=zs(e.itemSize),r=e.count):s=t,super(e,s,r),this.isStorageBufferNode=!0,this.structTypeNode=i,this.access=si.READ_WRITE,this.isAtomic=!1,this.isPBO=!1,this._attribute=null,this._varying=null,this.global=!0,!0!==e.isStorageBufferAttribute&&!0!==e.isStorageInstancedBufferAttribute&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(0===this.bufferCount){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return this.value.isIndirectStorageBufferAttribute?"indirectStorageBuffer":"storageBuffer"}element(e){return ap(this,e)}setPBO(e){return this.isPBO=e,this}getPBO(){return this.isPBO}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess(si.READ_ONLY)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}getAttributeData(){return null===this._attribute&&(this._attribute=tl(this.value),this._varying=Uu(this._attribute)),{attribute:this._attribute,varying:this._varying}}getNodeType(e){if(null!==this.structTypeNode)return this.structTypeNode.getNodeType(e);if(e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.getNodeType(e);const{attribute:t}=this.getAttributeData();return t.getNodeType(e)}getMemberType(e,t){return null!==this.structTypeNode?this.structTypeNode.getMemberType(e,t):"void"}generate(e){if(null!==this.structTypeNode&&this.structTypeNode.build(e),e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.generate(e);const{attribute:t,varying:r}=this.getAttributeData(),s=r.build(e);return e.registerTransform(s,t),s}}const up=(e,t=null,r=0)=>new op(e,t,r);class lp extends di{static get type(){return"IndexNode"}constructor(e){super("uint"),this.scope=e,this.isIndexNode=!0}generate(e){const t=this.getNodeType(e),r=this.scope;let s,i;if(r===lp.VERTEX)s=e.getVertexIndex();else if(r===lp.INSTANCE)s=e.getInstanceIndex();else if(r===lp.DRAW)s=e.getDrawIndex();else if(r===lp.INVOCATION_LOCAL)s=e.getInvocationLocalIndex();else if(r===lp.INVOCATION_SUBGROUP)s=e.getInvocationSubgroupIndex();else{if(r!==lp.SUBGROUP)throw new Error("THREE.IndexNode: Unknown scope: "+r);s=e.getSubgroupIndex()}if("vertex"===e.shaderStage||"compute"===e.shaderStage)i=s;else{i=Uu(this).build(e,t)}return i}}lp.VERTEX="vertex",lp.INSTANCE="instance",lp.SUBGROUP="subgroup",lp.INVOCATION_LOCAL="invocationLocal",lp.INVOCATION_SUBGROUP="invocationSubgroup",lp.DRAW="draw";const dp=an(lp,lp.VERTEX),cp=an(lp,lp.INSTANCE),hp=an(lp,lp.SUBGROUP),pp=an(lp,lp.INVOCATION_SUBGROUP),gp=an(lp,lp.INVOCATION_LOCAL),mp=an(lp,lp.DRAW);class fp extends di{static get type(){return"InstanceNode"}constructor(e,t,r=null){super("void"),this.count=e,this.instanceMatrix=t,this.instanceColor=r,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=ti.FRAME,this.buffer=null,this.bufferColor=null,this.previousInstanceMatrixNode=null}get isStorageMatrix(){const{instanceMatrix:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}get isStorageColor(){const{instanceColor:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}setup(e){let{instanceMatrixNode:t,instanceColorNode:r}=this;null===t&&(t=this._createInstanceMatrixNode(!0,e),this.instanceMatrixNode=t);const{instanceColor:s,isStorageColor:i}=this;if(s&&null===r){if(i)r=up(s,"vec3",Math.max(s.count,1)).element(cp);else{const e=new j(s.array,3),t=s.usage===x?sl:rl;this.bufferColor=e,r=Sn(t(e,"vec3",3,0))}this.instanceColorNode=r}const n=t.mul(Qd).xyz;if(Qd.assign(n),e.needsPreviousData()&&Yd.assign(this.getPreviousInstancedPosition(e)),e.hasGeometryAttribute("normal")){const e=gc(oc,t);oc.assign(e)}null!==this.instanceColorNode&&Vn("vec3","vInstanceColor").assign(this.instanceColorNode)}update(e){null!==this.buffer&&!0!==this.isStorageMatrix&&(this.buffer.clearUpdateRanges(),this.buffer.updateRanges.push(...this.instanceMatrix.updateRanges),this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version)),this.instanceColor&&null!==this.bufferColor&&!0!==this.isStorageColor&&(this.bufferColor.clearUpdateRanges(),this.bufferColor.updateRanges.push(...this.instanceColor.updateRanges),this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)),null!==this.previousInstanceMatrixNode&&e.object.previousInstanceMatrix.array.set(this.instanceMatrix.array)}getPreviousInstancedPosition(e){const t=e.object;return null===this.previousInstanceMatrixNode&&(t.previousInstanceMatrix=this.instanceMatrix.clone(),this.previousInstanceMatrixNode=this._createInstanceMatrixNode(!1,e)),this.previousInstanceMatrixNode.mul(Yd).xyz}_createInstanceMatrixNode(e,t){let r;const{instanceMatrix:s}=this,{count:i}=s;if(this.isStorageMatrix)r=up(s,"mat4",Math.max(i,1)).element(cp);else{if(16*i*4<=t.getUniformBufferLimit())r=Vl(s.array,"mat4",Math.max(i,1)).element(cp);else{const t=new X(s.array,16,1);!0===e&&(this.buffer=t);const i=s.usage===x?sl:rl,n=[i(t,"vec4",16,0),i(t,"vec4",16,4),i(t,"vec4",16,8),i(t,"vec4",16,12)];r=Pn(...n)}}return r}}const yp=nn(fp).setParameterLength(2,3);class bp extends fp{static get type(){return"InstancedMeshNode"}constructor(e){const{count:t,instanceMatrix:r,instanceColor:s}=e;super(t,r,s),this.instancedMesh=e}}const xp=nn(bp).setParameterLength(1);class Tp extends di{static get type(){return"BatchNode"}constructor(e){super("void"),this.batchMesh=e,this.batchingIdNode=null}setup(e){null===this.batchingIdNode&&(null===e.getDrawIndex()?this.batchingIdNode=cp:this.batchingIdNode=mp);const t=dn(([e])=>{const t=yn(Cl(Il(this.batchMesh._indirectTexture),0).x).toConst(),r=yn(e).mod(t).toConst(),s=yn(e).div(t).toConst();return Il(this.batchMesh._indirectTexture,_n(r,s)).x}).setLayout({name:"getIndirectIndex",type:"uint",inputs:[{name:"id",type:"int"}]}),r=t(yn(this.batchingIdNode)),s=this.batchMesh._matricesTexture,i=yn(Cl(Il(s),0).x).toConst(),n=fn(r).mul(4).toInt().toConst(),a=n.mod(i).toConst(),o=n.div(i).toConst(),u=Pn(Il(s,_n(a,o)),Il(s,_n(a.add(1),o)),Il(s,_n(a.add(2),o)),Il(s,_n(a.add(3),o))),l=this.batchMesh._colorsTexture;if(null!==l){const e=dn(([e])=>{const t=yn(Cl(Il(l),0).x).toConst(),r=e,s=r.mod(t).toConst(),i=r.div(t).toConst();return Il(l,_n(s,i)).rgb}).setLayout({name:"getBatchingColor",type:"vec3",inputs:[{name:"id",type:"int"}]}),t=e(r);Vn("vec3","vBatchColor").assign(t)}const d=Ln(u);Qd.assign(u.mul(Qd));const c=oc.div(Sn(d[0].dot(d[0]),d[1].dot(d[1]),d[2].dot(d[2]))),h=d.mul(c).xyz;oc.assign(h),e.hasGeometryAttribute("tangent")&&Jc.mulAssign(d)}}const _p=nn(Tp).setParameterLength(1),vp=new WeakMap;class Np extends di{static get type(){return"SkinningNode"}constructor(e){super("void"),this.skinnedMesh=e,this.updateType=ti.OBJECT,this.skinIndexNode=El("skinIndex","uvec4"),this.skinWeightNode=El("skinWeight","vec4"),this.bindMatrixNode=Pc("bindMatrix","mat4"),this.bindMatrixInverseNode=Pc("bindMatrixInverse","mat4"),this.boneMatricesNode=Dc("skeleton.boneMatrices","mat4",e.skeleton.bones.length),this.positionNode=Qd,this.toPositionNode=Qd,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){const{skinIndexNode:r,skinWeightNode:s,bindMatrixNode:i,bindMatrixInverseNode:n}=this,a=e.element(r.x),o=e.element(r.y),u=e.element(r.z),l=e.element(r.w),d=i.mul(t),c=Fa(a.mul(s.x).mul(d),o.mul(s.y).mul(d),u.mul(s.z).mul(d),l.mul(s.w).mul(d));return n.mul(c).xyz}getSkinnedNormalAndTangent(e=this.boneMatricesNode,t=oc,r=Jc){const{skinIndexNode:s,skinWeightNode:i,bindMatrixNode:n,bindMatrixInverseNode:a}=this,o=e.element(s.x),u=e.element(s.y),l=e.element(s.z),d=e.element(s.w);let c=Fa(i.x.mul(o),i.y.mul(u),i.z.mul(l),i.w.mul(d));c=a.mul(c).mul(n);return{skinNormal:c.transformDirection(t).xyz,skinTangent:c.transformDirection(r).xyz}}getPreviousSkinnedPosition(e){const t=e.object;return null===this.previousBoneMatricesNode&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=Dc("skeleton.previousBoneMatrices","mat4",t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Yd)}setup(e){e.needsPreviousData()&&Yd.assign(this.getPreviousSkinnedPosition(e));const t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute("normal")){const{skinNormal:t,skinTangent:r}=this.getSkinnedNormalAndTangent();oc.assign(t),e.hasGeometryAttribute("tangent")&&Jc.assign(r)}return t}generate(e,t){if("void"!==t)return super.generate(e,t)}update(e){const t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;vp.get(t)!==e.frameId&&(vp.set(t,e.frameId),null!==this.previousBoneMatricesNode&&(null===t.previousBoneMatrices&&(t.previousBoneMatrices=new Float32Array(t.boneMatrices)),t.previousBoneMatrices.set(t.boneMatrices)),t.update())}}const Sp=e=>new Np(e);class Rp extends di{static get type(){return"LoopNode"}constructor(e=[]){super("void"),this.params=e}getVarName(e){return String.fromCharCode("i".charCodeAt(0)+e)}getProperties(e){const t=e.getNodeProperties(this);if(void 0!==t.stackNode)return t;const r={};for(let e=0,t=this.params.length-1;eNumber(l)?">=":"<")),a)n=`while ( ${l} )`;else{const r={start:u,end:l},s=r.start,i=r.end;let a;const g=()=>h.includes("<")?"+=":"-=";if(null!=p)switch(typeof p){case"function":a=e.flowStagesNode(t.updateNode,"void").code.replace(/\t|;/g,"");break;case"number":a=d+" "+g()+" "+e.generateConst(c,p);break;case"string":a=d+" "+p;break;default:p.isNode?a=d+" "+g()+" "+p.build(e):(o("TSL: 'Loop( { update: ... } )' is not a function, string or number.",this.stackTrace),a="break /* invalid update */")}else p="int"===c||"uint"===c?h.includes("<")?"++":"--":g()+" 1.",a=d+" "+p;n=`for ( ${e.getVar(c,d)+" = "+s}; ${d+" "+h+" "+i}; ${a} )`}e.addFlowCode((0===s?"\n":"")+e.tab+n+" {\n\n").addFlowTab()}const i=s.build(e,"void");t.returnsNode.build(e,"void"),e.removeFlowTab().addFlowCode("\n"+e.tab+i);for(let t=0,r=this.params.length-1;tnew Rp(sn(e,"int")).toStack(),Ap=()=>fl("break").toStack(),wp=new WeakMap,Cp=new s,Mp=dn(({bufferMap:e,influence:t,stride:r,width:s,depth:i,offset:n})=>{const a=yn(dp).mul(r).add(n),o=a.div(s),u=a.sub(o.mul(s));return Il(e,_n(u,o)).depth(i).xyz.mul(t)});class Bp extends di{static get type(){return"MorphNode"}constructor(e){super("void"),this.mesh=e,this.morphBaseInfluence=Na(1),this.updateType=ti.OBJECT}setup(e){const{geometry:r}=e,s=void 0!==r.morphAttributes.position,i=r.hasAttribute("normal")&&void 0!==r.morphAttributes.normal,n=r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color,a=void 0!==n?n.length:0,{texture:o,stride:u,size:l}=function(e){const r=void 0!==e.morphAttributes.position,s=void 0!==e.morphAttributes.normal,i=void 0!==e.morphAttributes.color,n=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=void 0!==n?n.length:0;let o=wp.get(e);if(void 0===o||o.count!==a){void 0!==o&&o.texture.dispose();const u=e.morphAttributes.position||[],l=e.morphAttributes.normal||[],d=e.morphAttributes.color||[];let c=0;!0===r&&(c=1),!0===s&&(c=2),!0===i&&(c=3);let h=e.attributes.position.count*c,p=1;const g=4096;h>g&&(p=Math.ceil(h/g),h=g);const m=new Float32Array(h*p*4*a),f=new K(m,h,p,a);f.type=Q,f.needsUpdate=!0;const y=4*c;for(let x=0;x{const t=fn(0).toVar();this.mesh.count>1&&null!==this.mesh.morphTexture&&void 0!==this.mesh.morphTexture?t.assign(Il(this.mesh.morphTexture,_n(yn(e).add(1),yn(cp))).r):t.assign(Pc("morphTargetInfluences","float").element(e).toVar()),pn(t.notEqual(0),()=>{!0===s&&Qd.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(0)})),!0===i&&oc.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(1)}))})})}update(){const e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}const Fp=nn(Bp).setParameterLength(1);class Lp extends di{static get type(){return"LightingNode"}constructor(){super("vec3"),this.isLightingNode=!0}}class Pp extends Lp{static get type(){return"AONode"}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}}class Dp extends _u{static get type(){return"LightingContextNode"}constructor(e,t=null,r=null,s=null){super(e),this.lightingModel=t,this.backdropNode=r,this.backdropAlphaNode=s,this._value=null}getContext(){const{backdropNode:e,backdropAlphaNode:t}=this,r={directDiffuse:Sn().toVar("directDiffuse"),directSpecular:Sn().toVar("directSpecular"),indirectDiffuse:Sn().toVar("indirectDiffuse"),indirectSpecular:Sn().toVar("indirectSpecular")};return{radiance:Sn().toVar("radiance"),irradiance:Sn().toVar("irradiance"),iblIrradiance:Sn().toVar("iblIrradiance"),ambientOcclusion:fn(1).toVar("ambientOcclusion"),reflectedLight:r,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}const Up=nn(Dp);class Ip extends Lp{static get type(){return"IrradianceNode"}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}}const Op=new t;class Vp extends Pl{static get type(){return"ViewportTextureNode"}constructor(e=Kl,t=null,r=null){let s=null;null===r?(s=new Y,s.minFilter=Z,r=s):s=r,super(r,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=s,this.isOutputTextureNode=!0,this.updateBeforeType=ti.RENDER,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,r;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,r=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,r=this._cacheTextures),null===e)return t;if(!1===r.has(e)){const s=t.clone();r.set(e,s)}return r.get(e)}updateReference(e){const t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){const t=e.renderer,r=t.getRenderTarget();null===r?t.getDrawingBufferSize(Op):Op.set(r.width,r.height);const s=this.getTextureForReference(r);s.image.width===Op.width&&s.image.height===Op.height||(s.image.width=Op.width,s.image.height=Op.height,s.needsUpdate=!0);const i=s.generateMipmaps;s.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(s),s.generateMipmaps=i}clone(){const e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}}const kp=nn(Vp).setParameterLength(0,3),Gp=nn(Vp,null,null,{generateMipmaps:!0}).setParameterLength(0,3),$p=Gp(),zp=(e=Kl,t=null)=>$p.sample(e,t);let Wp=null;class Hp extends Vp{static get type(){return"ViewportDepthTextureNode"}constructor(e=Kl,t=null){null===Wp&&(Wp=new J),super(e,t,Wp)}getTextureForReference(){return Wp}}const qp=nn(Hp).setParameterLength(0,2);class jp extends di{static get type(){return"ViewportDepthNode"}constructor(e,t=null){super("float"),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(e){const{scope:t}=this;return t===jp.DEPTH_BASE?e.getFragDepth():super.generate(e)}setup({camera:e}){const{scope:t}=this,r=this.valueNode;let s=null;if(t===jp.DEPTH_BASE)null!==r&&(s=eg().assign(r));else if(t===jp.DEPTH)s=e.isPerspectiveCamera?Qp(ec.z,bd,xd):Xp(ec.z,bd,xd);else if(t===jp.LINEAR_DEPTH)if(null!==r)if(e.isPerspectiveCamera){const e=Zp(r,bd,xd);s=Xp(e,bd,xd)}else s=r;else s=Xp(ec.z,bd,xd);return s}}jp.DEPTH_BASE="depthBase",jp.DEPTH="depth",jp.LINEAR_DEPTH="linearDepth";const Xp=(e,t,r)=>e.add(t).div(t.sub(r)),Kp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?r.sub(t).mul(e).sub(r):t.sub(r).mul(e).sub(t)),Qp=(e,t,r)=>t.add(e).mul(r).div(r.sub(t).mul(e)),Yp=(e,t,r)=>t.mul(e.add(r)).div(e.mul(t.sub(r))),Zp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?t.mul(r).div(t.sub(r).mul(e).sub(t)):t.mul(r).div(r.sub(t).mul(e).sub(r))),Jp=(e,t,r)=>{t=t.max(1e-6).toVar();const s=xo(e.negate().div(t)),i=xo(r.div(t));return s.div(i)},eg=nn(jp,jp.DEPTH_BASE),tg=an(jp,jp.DEPTH),rg=nn(jp,jp.LINEAR_DEPTH).setParameterLength(0,1),sg=rg(qp());tg.assign=e=>eg(e);class ig extends di{static get type(){return"ClippingNode"}constructor(e=ig.DEFAULT){super(),this.scope=e}setup(e){super.setup(e);const t=e.clippingContext,{intersectionPlanes:r,unionPlanes:s}=t;return this.hardwareClipping=e.material.hardwareClipping,this.scope===ig.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(r,s):this.scope===ig.HARDWARE?this.setupHardwareClipping(s,e):this.setupDefault(r,s)}setupAlphaToCoverage(e,t){return dn(()=>{const r=fn().toVar("distanceToPlane"),s=fn().toVar("distanceToGradient"),i=fn(1).toVar("clipOpacity"),n=t.length;if(!1===this.hardwareClipping&&n>0){const e=$l(t).setGroup(Ta);Ep(n,({i:t})=>{const n=e.element(t);r.assign(ec.dot(n.xyz).negate().add(n.w)),s.assign(r.fwidth().div(2)),i.mulAssign(cu(s.negate(),s,r))})}const a=e.length;if(a>0){const t=$l(e).setGroup(Ta),n=fn(1).toVar("intersectionClipOpacity");Ep(a,({i:e})=>{const i=t.element(e);r.assign(ec.dot(i.xyz).negate().add(i.w)),s.assign(r.fwidth().div(2)),n.mulAssign(cu(s.negate(),s,r).oneMinus())}),i.mulAssign(n.oneMinus())}kn.a.mulAssign(i),kn.a.equal(0).discard()})()}setupDefault(e,t){return dn(()=>{const r=t.length;if(!1===this.hardwareClipping&&r>0){const e=$l(t).setGroup(Ta);Ep(r,({i:t})=>{const r=e.element(t);ec.dot(r.xyz).greaterThan(r.w).discard()})}const s=e.length;if(s>0){const t=$l(e).setGroup(Ta),r=xn(!0).toVar("clipped");Ep(s,({i:e})=>{const s=t.element(e);r.assign(ec.dot(s.xyz).greaterThan(s.w).and(r))}),r.discard()}})()}setupHardwareClipping(e,t){const r=e.length;return t.enableHardwareClipping(r),dn(()=>{const s=$l(e).setGroup(Ta),i=Wl(t.getClipDistance());Ep(r,({i:e})=>{const t=s.element(e),r=ec.dot(t.xyz).sub(t.w).negate();i.element(e).assign(r)})})()}}ig.ALPHA_TO_COVERAGE="alphaToCoverage",ig.DEFAULT="default",ig.HARDWARE="hardware";const ng=dn(([e])=>Ro(Pa(1e4,Eo(Pa(17,e.x).add(Pa(.1,e.y)))).mul(Fa(.1,Fo(Eo(Pa(13,e.y).add(e.x))))))),ag=dn(([e])=>ng(Tn(ng(e.xy),e.z))),og=dn(([e])=>{const t=jo(Po(Io(e.xyz)),Po(Oo(e.xyz))),r=fn(1).div(fn(.05).mul(t)).toVar("pixScale"),s=Tn(yo(vo(xo(r))),yo(No(xo(r)))),i=Tn(ag(vo(s.x.mul(e.xyz))),ag(vo(s.y.mul(e.xyz)))),n=Ro(xo(r)),a=Fa(Pa(n.oneMinus(),i.x),Pa(n,i.y)),o=qo(n,n.oneMinus()),u=Sn(a.mul(a).div(Pa(2,o).mul(La(1,o))),a.sub(Pa(.5,o)).div(La(1,o)),La(1,La(1,a).mul(La(1,a)).div(Pa(2,o).mul(La(1,o))))),l=a.lessThan(o.oneMinus()).select(a.lessThan(o).select(u.x,u.y),u.z);return uu(l,1e-6,1)}).setLayout({name:"getAlphaHashThreshold",type:"float",inputs:[{name:"position",type:"vec3"}]});class ug extends Rl{static get type(){return"VertexColorNode"}constructor(e){super(null,"vec4"),this.isVertexColorNode=!0,this.index=e}getAttributeName(){const e=this.index;return"color"+(e>0?e:"")}generate(e){const t=this.getAttributeName(e);let r;return r=!0===e.hasGeometryAttribute(t)?super.generate(e):e.generateConst(this.nodeType,new s(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}}const lg=(e=0)=>new ug(e),dg=dn(([e,t])=>qo(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:"blendBurn",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),cg=dn(([e,t])=>qo(e.div(t.oneMinus()),1)).setLayout({name:"blendDodge",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),hg=dn(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:"blendScreen",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),pg=dn(([e,t])=>ou(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),Xo(.5,e))).setLayout({name:"blendOverlay",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),gg=dn(([e,t])=>{const r=t.a.add(e.a.mul(t.a.oneMinus()));return wn(t.rgb.mul(t.a).add(e.rgb.mul(e.a).mul(t.a.oneMinus())).div(r),r)}).setLayout({name:"blendColor",type:"vec4",inputs:[{name:"base",type:"vec4"},{name:"blend",type:"vec4"}]}),mg=dn(([e])=>wn(e.rgb.mul(e.a),e.a),{color:"vec4",return:"vec4"}),fg=dn(([e])=>(pn(e.a.equal(0),()=>wn(0)),wn(e.rgb.div(e.a),e.a)),{color:"vec4",return:"vec4"});class yg extends ee{static get type(){return"NodeMaterial"}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.maskShadowNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,this.contextNode=null}_getNodeChildren(){const e=[];for(const t of Object.getOwnPropertyNames(this)){if(!0===t.startsWith("_"))continue;const r=this[t];r&&!0===r.isNode&&e.push({property:t,childNode:r})}return e}customProgramCacheKey(){const e=[];for(const{property:t,childNode:r}of this._getNodeChildren())e.push(Os(t.slice(0,-4)),r.getCacheKey());return this.type+Vs(e)}build(e){this.setup(e)}setupObserver(e){return new Ps(e)}setup(e){e.context.setupNormal=()=>Pu(this.setupNormal(e),"NORMAL","vec3"),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);const t=e.renderer,r=t.getRenderTarget();!0===t.contextNode.isContextNode?e.context={...e.context,...t.contextNode.getFlowContextData()}:o('NodeMaterial: "renderer.contextNode" must be an instance of `context()`.'),null!==this.contextNode&&(!0===this.contextNode.isContextNode?e.context={...e.context,...this.contextNode.getFlowContextData()}:o('NodeMaterial: "material.contextNode" must be an instance of `context()`.')),e.addStack();const s=this.setupVertex(e),i=Pu(this.vertexNode||s,"VERTEX");let n;e.context.clipSpace=i,e.stack.outputNode=i,this.setupHardwareClipping(e),null!==this.geometryNode&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow("vertex",e.removeStack()),e.addStack();const a=this.setupClipping(e);if(!0!==this.depthWrite&&!0!==this.depthTest||(null!==r?!0===r.depthBuffer&&this.setupDepth(e):!0===t.depth&&this.setupDepth(e)),null===this.fragmentNode){this.setupDiffuseColor(e),this.setupVariants(e);const s=this.setupLighting(e);null!==a&&e.stack.addToStack(a);const i=wn(s,kn.a).max(0);n=this.setupOutput(e,i),aa.assign(n);const o=null!==this.outputNode;if(o&&(n=this.outputNode),e.context.getOutput&&(n=e.context.getOutput(n,e)),null!==r){const e=t.getMRT(),r=this.mrtNode;null!==e?(o&&aa.assign(n),n=e,null!==r&&(n=e.merge(r))):null!==r&&(n=r)}}else{let t=this.fragmentNode;!0!==t.isOutputStructNode&&(t=wn(t)),n=this.setupOutput(e,t)}e.stack.outputNode=n,e.addFlow("fragment",e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(null===e.clippingContext)return null;const{unionPlanes:t,intersectionPlanes:r}=e.clippingContext;let s=null;if(t.length>0||r.length>0){const t=e.renderer.currentSamples;this.alphaToCoverage&&t>1?s=new ig(ig.ALPHA_TO_COVERAGE):e.stack.addToStack(new ig)}return s}setupHardwareClipping(e){if(this.hardwareClipping=!1,null===e.clippingContext)return;const t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable("clipDistance")&&(e.stack.addToStack(new ig(ig.HARDWARE)),this.hardwareClipping=!0)}setupDepth(e){const{renderer:t,camera:r}=e;let s=this.depthNode;if(null===s){const e=t.getMRT();e&&e.has("depth")?s=e.get("depth"):!0===t.logarithmicDepthBuffer&&(s=r.isPerspectiveCamera?Jp(ec.z,bd,xd):Xp(ec.z,bd,xd))}null!==s&&tg.assign(s).toStack()}setupPositionView(){return Wd.mul(Qd).xyz}setupModelViewProjection(){return Td.mul(ec)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.position=e.removeStack(),ip}setupPosition(e){const{object:t,geometry:r}=e;if((r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color)&&Fp(t).toStack(),!0===t.isSkinnedMesh&&Sp(t).toStack(),this.displacementMap){const e=Ic("displacementMap","texture"),t=Ic("displacementScale","float"),r=Ic("displacementBias","float");Qd.addAssign(oc.normalize().mul(e.x.mul(t).add(r)))}return t.isBatchedMesh&&_p(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&!0===t.instanceMatrix.isInstancedBufferAttribute&&xp(t).toStack(),null!==this.positionNode&&Qd.assign(Pu(this.positionNode,"POSITION","vec3")),Qd}setupDiffuseColor(e){const{object:t,geometry:r}=e;null!==this.maskNode&&xn(this.maskNode).not().discard();let s=this.colorNode?wn(this.colorNode):_h;if(!0===this.vertexColors&&r.hasAttribute("color")&&(s=s.mul(lg())),t.instanceColor){s=Vn("vec3","vInstanceColor").mul(s)}if(t.isBatchedMesh&&t._colorsTexture){s=Vn("vec3","vBatchColor").mul(s)}kn.assign(s);const i=this.opacityNode?fn(this.opacityNode):Sh;kn.a.assign(kn.a.mul(i));let n=null;(null!==this.alphaTestNode||this.alphaTest>0)&&(n=null!==this.alphaTestNode?fn(this.alphaTestNode):Th,!0===this.alphaToCoverage?(kn.a=cu(n,n.add($o(kn.a)),kn.a),kn.a.lessThanEqual(0).discard()):kn.a.lessThanEqual(n).discard()),!0===this.alphaHash&&kn.a.lessThan(og(Qd)).discard(),e.isOpaque()&&kn.a.assign(1)}setupVariants(){}setupOutgoingLight(){return!0===this.lights?Sn(0):kn.rgb}setupNormal(){return this.normalNode?Sn(this.normalNode):Fh}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?Ic("envMap","cubeTexture"):Ic("envMap","texture")),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Ip(tp)),t}setupLights(e){const t=[],r=this.setupEnvironment(e);r&&r.isLightingNode&&t.push(r);const s=this.setupLightMap(e);s&&s.isLightingNode&&t.push(s);let i=this.aoNode;null===i&&e.material.aoMap&&(i=rp),e.context.getAO&&(i=e.context.getAO(i,e)),i&&t.push(new Pp(i));let n=this.lightsNode||e.lightsNode;return t.length>0&&(n=e.renderer.lighting.createNode([...n.getLights(),...t])),n}setupLightingModel(){}setupLighting(e){const{material:t}=e,{backdropNode:r,backdropAlphaNode:s,emissiveNode:i}=this,n=!0===this.lights||null!==this.lightsNode?this.setupLights(e):null;let a=this.setupOutgoingLight(e);if(n&&n.getScope().hasLights){const t=this.setupLightingModel(e)||null;a=Up(n,t,r,s)}else null!==r&&(a=Sn(null!==s?ou(a,r,s):r));return(i&&!0===i.isNode||t.emissive&&!0===t.emissive.isColor)&&($n.assign(Sn(i||Nh)),a=a.add($n)),a}setupFog(e,t){const r=e.fogNode;return r&&(aa.assign(t),t=wn(r.toVar())),t}setupPremultipliedAlpha(e,t){return mg(t)}setupOutput(e,t){return!0===this.fog&&(t=this.setupFog(e,t)),!0===this.premultipliedAlpha&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(const t in e){const r=e[t];void 0===this[t]&&(this[t]=r,r&&r.clone&&(this[t]=r.clone()))}const t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(const e in t)void 0===Object.getOwnPropertyDescriptor(this.constructor.prototype,e)&&void 0!==t[e].get&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{},nodes:{}});const r=ee.prototype.toJSON.call(this,e);r.inputNodes={};for(const{property:t,childNode:s}of this._getNodeChildren())r.inputNodes[t]=s.toJSON(e).uuid;function s(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(t){const t=s(e.textures),i=s(e.images),n=s(e.nodes);t.length>0&&(r.textures=t),i.length>0&&(r.images=i),n.length>0&&(r.nodes=n)}return r}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.aoNode=e.aoNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.maskShadowNode=e.maskShadowNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,this.contextNode=e.contextNode,super.copy(e)}}const bg=new te;class xg extends yg{static get type(){return"LineBasicNodeMaterial"}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.setDefaultValues(bg),this.setValues(e)}}const Tg=new re;class _g extends yg{static get type(){return"LineDashedNodeMaterial"}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.setDefaultValues(Tg),this.dashOffset=0,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){const e=this.offsetNode?fn(this.offsetNode):Zh,t=this.dashScaleNode?fn(this.dashScaleNode):Xh,r=this.dashSizeNode?fn(this.dashSizeNode):Kh,s=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(r),ua.assign(s);const i=Uu(El("lineDistance").mul(t));(e?i.add(e):i).mod(oa.add(ua)).greaterThan(oa).discard()}}const vg=new re;class Ng extends yg{static get type(){return"Line2NodeMaterial"}constructor(e={}){super(),this.isLine2NodeMaterial=!0,this.setDefaultValues(vg),this.vertexColors=e.vertexColors,this.dashOffset=0,this.lineColorNode=null,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.blending=se,this._useDash=e.dashed,this._useAlphaToCoverage=!0,this._useWorldUnits=!1,this.setValues(e)}setup(e){const{renderer:t}=e,r=this._useAlphaToCoverage,s=this.vertexColors,i=this._useDash,n=this._useWorldUnits,a=dn(({start:e,end:t})=>{const r=Td.element(2).element(2),s=Td.element(3).element(2).mul(-.5).div(r).sub(e.z).div(t.z.sub(e.z));return wn(ou(e.xyz,t.xyz,s),t.w)}).setLayout({name:"trimSegment",type:"vec4",inputs:[{name:"start",type:"vec4"},{name:"end",type:"vec4"}]});this.vertexNode=dn(()=>{const e=El("instanceStart"),t=El("instanceEnd"),r=wn(Wd.mul(wn(e,1))).toVar("start"),s=wn(Wd.mul(wn(t,1))).toVar("end");if(i){const e=this.dashScaleNode?fn(this.dashScaleNode):Xh,t=this.offsetNode?fn(this.offsetNode):Zh,r=El("instanceDistanceStart"),s=El("instanceDistanceEnd");let i=Kd.y.lessThan(.5).select(e.mul(r),e.mul(s));i=i.add(t),Vn("float","lineDistance").assign(i)}n&&(Vn("vec3","worldStart").assign(r.xyz),Vn("vec3","worldEnd").assign(s.xyz));const o=Zl.z.div(Zl.w),u=Td.element(2).element(3).equal(-1);pn(u,()=>{pn(r.z.lessThan(0).and(s.z.greaterThan(0)),()=>{s.assign(a({start:r,end:s}))}).ElseIf(s.z.lessThan(0).and(r.z.greaterThanEqual(0)),()=>{r.assign(a({start:s,end:r}))})});const l=Td.mul(r),d=Td.mul(s),c=l.xyz.div(l.w),h=d.xyz.div(d.w),p=h.xy.sub(c.xy).toVar();p.x.assign(p.x.mul(o)),p.assign(p.normalize());const g=wn().toVar();if(n){const e=s.xyz.sub(r.xyz).normalize(),t=ou(r.xyz,s.xyz,.5).normalize(),n=e.cross(t).normalize(),a=e.cross(n),o=Vn("vec4","worldPos");o.assign(Kd.y.lessThan(.5).select(r,s));const u=Yh.mul(.5);o.addAssign(wn(Kd.x.lessThan(0).select(n.mul(u),n.mul(u).negate()),0)),i||(o.addAssign(wn(Kd.y.lessThan(.5).select(e.mul(u).negate(),e.mul(u)),0)),o.addAssign(wn(a.mul(u),0)),pn(Kd.y.greaterThan(1).or(Kd.y.lessThan(0)),()=>{o.subAssign(wn(a.mul(2).mul(u),0))})),g.assign(Td.mul(o));const l=Sn().toVar();l.assign(Kd.y.lessThan(.5).select(c,h)),g.z.assign(l.z.mul(g.w))}else{const e=Tn(p.y,p.x.negate()).toVar("offset");p.x.assign(p.x.div(o)),e.x.assign(e.x.div(o)),e.assign(Kd.x.lessThan(0).select(e.negate(),e)),pn(Kd.y.lessThan(0),()=>{e.assign(e.sub(p))}).ElseIf(Kd.y.greaterThan(1),()=>{e.assign(e.add(p))}),e.assign(e.mul(Yh)),e.assign(e.div(Zl.w.div(Xl))),g.assign(Kd.y.lessThan(.5).select(l,d)),e.assign(e.mul(g.w)),g.assign(g.add(wn(e,0,0)))}return g})();const o=dn(({p1:e,p2:t,p3:r,p4:s})=>{const i=e.sub(r),n=s.sub(r),a=t.sub(e),o=i.dot(n),u=n.dot(a),l=i.dot(a),d=n.dot(n),c=a.dot(a).mul(d).sub(u.mul(u)),h=o.mul(u).sub(l.mul(d)).div(c).clamp(),p=o.add(u.mul(h)).div(d).clamp();return Tn(h,p)});if(this.colorNode=dn(()=>{const e=Al();if(i){const t=this.dashSizeNode?fn(this.dashSizeNode):Kh,r=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(t),ua.assign(r);const s=Vn("float","lineDistance");e.y.lessThan(-1).or(e.y.greaterThan(1)).discard(),s.mod(oa.add(ua)).greaterThan(oa).discard()}const a=fn(1).toVar("alpha");if(n){const e=Vn("vec3","worldStart"),s=Vn("vec3","worldEnd"),n=Vn("vec4","worldPos").xyz.normalize().mul(1e5),u=s.sub(e),l=o({p1:e,p2:s,p3:Sn(0,0,0),p4:n}),d=e.add(u.mul(l.x)),c=n.mul(l.y),h=d.sub(c).length().div(Yh);if(!i)if(r&&t.currentSamples>0){const e=h.fwidth();a.assign(cu(e.negate().add(.5),e.add(.5),h).oneMinus())}else h.greaterThan(.5).discard()}else if(r&&t.currentSamples>0){const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1)),s=t.mul(t).add(r.mul(r)),i=fn(s.fwidth()).toVar("dlen");pn(e.y.abs().greaterThan(1),()=>{a.assign(cu(i.oneMinus(),i.add(1),s).oneMinus())})}else pn(e.y.abs().greaterThan(1),()=>{const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1));t.mul(t).add(r.mul(r)).greaterThan(1).discard()});let u;if(this.lineColorNode)u=this.lineColorNode;else if(s){const e=El("instanceColorStart"),t=El("instanceColorEnd");u=Kd.y.lessThan(.5).select(e,t).mul(_h)}else u=_h;return wn(u,a)})(),this.transparent){const e=this.opacityNode?fn(this.opacityNode):Sh;this.outputNode=wn(this.colorNode.rgb.mul(e).add(zp().rgb.mul(e.oneMinus())),this.colorNode.a)}super.setup(e)}get worldUnits(){return this._useWorldUnits}set worldUnits(e){this._useWorldUnits!==e&&(this._useWorldUnits=e,this.needsUpdate=!0)}get dashed(){return this._useDash}set dashed(e){this._useDash!==e&&(this._useDash=e,this.needsUpdate=!0)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const Sg=new ie;class Rg extends yg{static get type(){return"MeshNormalNodeMaterial"}constructor(e){super(),this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(Sg),this.setValues(e)}setupDiffuseColor(){const e=this.opacityNode?fn(this.opacityNode):Sh;kn.assign(zu(wn(dh(cc),e),ne))}}const Eg=dn(([e=Jd])=>{const t=e.z.atan(e.x).mul(1/(2*Math.PI)).add(.5),r=e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5);return Tn(t,r)});class Ag extends ae{constructor(e=1,t={}){super(e,e,t),this.isCubeRenderTarget=!0;const r={width:e,height:e,depth:1},s=[r,r,r,r,r,r];this.texture=new U(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){const r=t.minFilter,s=t.generateMipmaps;t.generateMipmaps=!0,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=new oe(5,5,5),n=Eg(Jd),a=new yg;a.colorNode=Ul(t,n,0),a.side=L,a.blending=se;const o=new ue(i,a),u=new le;u.add(o),t.minFilter===Z&&(t.minFilter=de);const l=new ce(1,10,this),d=e.getMRT();return e.setMRT(null),l.update(e,u),e.setMRT(d),t.minFilter=r,t.currentGenerateMipmaps=s,o.geometry.dispose(),o.material.dispose(),this}clear(e,t=!0,r=!0,s=!0){const i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,r,s);e.setRenderTarget(i)}}const wg=new WeakMap;class Cg extends pi{static get type(){return"CubeMapNode"}constructor(e){super("vec3"),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=Bc(null);const t=new U;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=ti.RENDER}updateBefore(e){const{renderer:t,material:r}=e,s=this.envNode;if(s.isTextureNode||s.isMaterialReferenceNode){const e=s.isTextureNode?s.value:r[s.property];if(e&&e.isTexture){const r=e.mapping;if(r===he||r===pe){if(wg.has(e)){const t=wg.get(e);Bg(t,e.mapping),this._cubeTexture=t}else{const r=e.image;if(function(e){return null!=e&&e.height>0}(r)){const s=new Ag(r.height);s.fromEquirectangularTexture(t,e),Bg(s.texture,e.mapping),this._cubeTexture=s.texture,wg.set(e,s.texture),e.addEventListener("dispose",Mg)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}}function Mg(e){const t=e.target;t.removeEventListener("dispose",Mg);const r=wg.get(t);void 0!==r&&(wg.delete(t),r.dispose())}function Bg(e,t){t===he?e.mapping=I:t===pe&&(e.mapping=O)}const Fg=nn(Cg).setParameterLength(1);class Lg extends Lp{static get type(){return"BasicEnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=Fg(this.envNode)}}class Pg extends Lp{static get type(){return"BasicLightMapNode"}constructor(e=null){super(),this.lightMapNode=e}setup(e){const t=fn(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}}class Dg{start(e){e.lightsNode.setupLights(e,e.lightsNode.getLightNodes(e)),this.indirect(e)}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}}class Ug extends Dg{constructor(){super()}indirect({context:e}){const t=e.ambientOcclusion,r=e.reflectedLight,s=e.irradianceLightMap;r.indirectDiffuse.assign(wn(0)),s?r.indirectDiffuse.addAssign(s):r.indirectDiffuse.addAssign(wn(1,1,1,0)),r.indirectDiffuse.mulAssign(t),r.indirectDiffuse.mulAssign(kn.rgb)}finish(e){const{material:t,context:r}=e,s=r.outgoingLight,i=e.context.environment;if(i)switch(t.combine){case fe:s.rgb.assign(ou(s.rgb,s.rgb.mul(i.rgb),wh.mul(Ch)));break;case me:s.rgb.assign(ou(s.rgb,i.rgb,wh.mul(Ch)));break;case ge:s.rgb.addAssign(i.rgb.mul(wh.mul(Ch)));break;default:d("BasicLightingModel: Unsupported .combine value:",t.combine)}}}const Ig=new ye;class Og extends yg{static get type(){return"MeshBasicNodeMaterial"}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Ig),this.setValues(e)}setupNormal(){return nc(lc)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Pg(tp)),t}setupOutgoingLight(){return kn.rgb}setupLightingModel(){return new Ug}}const Vg=dn(({f0:e,f90:t,dotVH:r})=>{const s=r.mul(-5.55473).sub(6.98316).mul(r).exp2();return e.mul(s.oneMinus()).add(t.mul(s))}),kg=dn(e=>e.diffuseColor.mul(1/Math.PI)),Gg=dn(({dotNH:e})=>na.mul(fn(.5)).add(1).mul(fn(1/Math.PI)).mul(e.pow(na))),$g=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(t).clamp(),s=tc.dot(t).clamp(),i=Vg({f0:ra,f90:1,dotVH:s}),n=fn(.25),a=Gg({dotNH:r});return i.mul(n).mul(a)});class zg extends Ug{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t);r.directDiffuse.addAssign(s.mul(kg({diffuseColor:kn.rgb}))),!0===this.specular&&r.directSpecular.addAssign(s.mul($g({lightDirection:e})).mul(wh))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Wg=new be;class Hg extends yg{static get type(){return"MeshLambertNodeMaterial"}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Wg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg(!1)}}const qg=new xe;class jg extends yg{static get type(){return"MeshPhongNodeMaterial"}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(qg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg}setupVariants(){const e=(this.shininessNode?fn(this.shininessNode):vh).max(1e-4);na.assign(e);const t=this.specularNode||Rh;ra.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}}const Xg=dn(e=>{if(!1===e.geometry.hasAttribute("normal"))return fn(0);const t=lc.dFdx().abs().max(lc.dFdy().abs());return t.x.max(t.y).max(t.z)}),Kg=dn(e=>{const{roughness:t}=e,r=Xg();let s=t.max(.0525);return s=s.add(r),s=s.min(1),s}),Qg=dn(({alpha:e,dotNL:t,dotNV:r})=>{const s=e.pow2(),i=t.mul(s.add(s.oneMinus().mul(r.pow2())).sqrt()),n=r.mul(s.add(s.oneMinus().mul(t.pow2())).sqrt());return Da(.5,i.add(n).max(no))}).setLayout({name:"V_GGX_SmithCorrelated",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNL",type:"float"},{name:"dotNV",type:"float"}]}),Yg=dn(({alphaT:e,alphaB:t,dotTV:r,dotBV:s,dotTL:i,dotBL:n,dotNV:a,dotNL:o})=>{const u=o.mul(Sn(e.mul(r),t.mul(s),a).length()),l=a.mul(Sn(e.mul(i),t.mul(n),o).length());return Da(.5,u.add(l))}).setLayout({name:"V_GGX_SmithCorrelated_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotTV",type:"float",qualifier:"in"},{name:"dotBV",type:"float",qualifier:"in"},{name:"dotTL",type:"float",qualifier:"in"},{name:"dotBL",type:"float",qualifier:"in"},{name:"dotNV",type:"float",qualifier:"in"},{name:"dotNL",type:"float",qualifier:"in"}]}),Zg=dn(({alpha:e,dotNH:t})=>{const r=e.pow2(),s=t.pow2().mul(r.oneMinus()).oneMinus();return r.div(s.pow2()).mul(1/Math.PI)}).setLayout({name:"D_GGX",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNH",type:"float"}]}),Jg=fn(1/Math.PI),em=dn(({alphaT:e,alphaB:t,dotNH:r,dotTH:s,dotBH:i})=>{const n=e.mul(t),a=Sn(t.mul(s),e.mul(i),n.mul(r)),o=a.dot(a),u=n.div(o);return Jg.mul(n.mul(u.pow2()))}).setLayout({name:"D_GGX_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotNH",type:"float",qualifier:"in"},{name:"dotTH",type:"float",qualifier:"in"},{name:"dotBH",type:"float",qualifier:"in"}]}),tm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,normalView:n=cc,USE_IRIDESCENCE:a,USE_ANISOTROPY:o})=>{const u=s.pow2(),l=e.add(tc).normalize(),d=n.dot(e).clamp(),c=n.dot(tc).clamp(),h=n.dot(l).clamp(),p=tc.dot(l).clamp();let g,m,f=Vg({f0:t,f90:r,dotVH:p});if(Yi(a)&&(f=Kn.mix(f,i)),Yi(o)){const t=ea.dot(e),r=ea.dot(tc),s=ea.dot(l),i=ta.dot(e),n=ta.dot(tc),a=ta.dot(l);g=Yg({alphaT:Zn,alphaB:u,dotTV:r,dotBV:n,dotTL:t,dotBL:i,dotNV:c,dotNL:d}),m=em({alphaT:Zn,alphaB:u,dotNH:h,dotTH:s,dotBH:a})}else g=Qg({alpha:u,dotNL:d,dotNV:c}),m=Zg({alpha:u,dotNH:h});return f.mul(g).mul(m)}),rm=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let sm=null;const im=dn(({roughness:e,dotNV:t})=>{null===sm&&(sm=new Te(rm,16,16,W,_e),sm.name="DFG_LUT",sm.minFilter=de,sm.magFilter=de,sm.wrapS=ve,sm.wrapT=ve,sm.generateMipmaps=!1,sm.needsUpdate=!0);const r=Tn(e,t);return Ul(sm,r).rg}),nm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a})=>{const o=tm({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a}),u=cc.dot(e).clamp(),l=cc.dot(tc).clamp(),d=im({roughness:s,dotNV:l}),c=im({roughness:s,dotNV:u}),h=t.mul(d.x).add(r.mul(d.y)),p=t.mul(c.x).add(r.mul(c.y)),g=d.x.add(d.y),m=c.x.add(c.y),f=fn(1).sub(g),y=fn(1).sub(m),b=t.add(t.oneMinus().mul(.047619)),x=h.mul(p).mul(b).div(fn(1).sub(f.mul(y).mul(b).mul(b)).add(no)),T=f.mul(y),_=x.mul(T);return o.add(_)}),am=dn(e=>{const{dotNV:t,specularColor:r,specularF90:s,roughness:i}=e,n=im({dotNV:t,roughness:i});return r.mul(n.x).add(s.mul(n.y))}),om=dn(({f:e,f90:t,dotVH:r})=>{const s=r.oneMinus().saturate(),i=s.mul(s),n=s.mul(i,i).clamp(0,.9999);return e.sub(Sn(t).mul(n)).div(n.oneMinus())}).setLayout({name:"Schlick_to_F0",type:"vec3",inputs:[{name:"f",type:"vec3"},{name:"f90",type:"float"},{name:"dotVH",type:"float"}]}),um=dn(({roughness:e,dotNH:t})=>{const r=e.pow2(),s=fn(1).div(r),i=t.pow2().oneMinus().max(.0078125);return fn(2).add(s).mul(i.pow(s.mul(.5))).div(2*Math.PI)}).setLayout({name:"D_Charlie",type:"float",inputs:[{name:"roughness",type:"float"},{name:"dotNH",type:"float"}]}),lm=dn(({dotNV:e,dotNL:t})=>fn(1).div(fn(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:"V_Neubelt",type:"float",inputs:[{name:"dotNV",type:"float"},{name:"dotNL",type:"float"}]}),dm=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(e).clamp(),s=cc.dot(tc).clamp(),i=cc.dot(t).clamp(),n=um({roughness:Xn,dotNH:i}),a=lm({dotNV:s,dotNL:r});return jn.mul(n).mul(a)}),cm=dn(({N:e,V:t,roughness:r})=>{const s=e.dot(t).saturate(),i=Tn(r,s.oneMinus().sqrt());return i.assign(i.mul(.984375).add(.0078125)),i}).setLayout({name:"LTC_Uv",type:"vec2",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"roughness",type:"float"}]}),hm=dn(({f:e})=>{const t=e.length();return jo(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:"LTC_ClippedSphereFormFactor",type:"float",inputs:[{name:"f",type:"vec3"}]}),pm=dn(({v1:e,v2:t})=>{const r=e.dot(t),s=r.abs().toVar(),i=s.mul(.0145206).add(.4965155).mul(s).add(.8543985).toVar(),n=s.add(4.1616724).mul(s).add(3.417594).toVar(),a=i.div(n),o=r.greaterThan(0).select(a,jo(r.mul(r).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(a));return e.cross(t).mul(o)}).setLayout({name:"LTC_EdgeVectorFormFactor",type:"vec3",inputs:[{name:"v1",type:"vec3"},{name:"v2",type:"vec3"}]}),gm=dn(({N:e,V:t,P:r,mInv:s,p0:i,p1:n,p2:a,p3:o})=>{const u=n.sub(i).toVar(),l=o.sub(i).toVar(),d=u.cross(l),c=Sn().toVar();return pn(d.dot(r.sub(i)).greaterThanEqual(0),()=>{const u=t.sub(e.mul(t.dot(e))).normalize(),l=e.cross(u).negate(),d=s.mul(Ln(u,l,e).transpose()).toVar(),h=d.mul(i.sub(r)).normalize().toVar(),p=d.mul(n.sub(r)).normalize().toVar(),g=d.mul(a.sub(r)).normalize().toVar(),m=d.mul(o.sub(r)).normalize().toVar(),f=Sn(0).toVar();f.addAssign(pm({v1:h,v2:p})),f.addAssign(pm({v1:p,v2:g})),f.addAssign(pm({v1:g,v2:m})),f.addAssign(pm({v1:m,v2:h})),c.assign(Sn(hm({f:f})))}),c}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"P",type:"vec3"},{name:"mInv",type:"mat3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),mm=dn(({P:e,p0:t,p1:r,p2:s,p3:i})=>{const n=r.sub(t).toVar(),a=i.sub(t).toVar(),o=n.cross(a),u=Sn().toVar();return pn(o.dot(e.sub(t)).greaterThanEqual(0),()=>{const n=t.sub(e).normalize().toVar(),a=r.sub(e).normalize().toVar(),o=s.sub(e).normalize().toVar(),l=i.sub(e).normalize().toVar(),d=Sn(0).toVar();d.addAssign(pm({v1:n,v2:a})),d.addAssign(pm({v1:a,v2:o})),d.addAssign(pm({v1:o,v2:l})),d.addAssign(pm({v1:l,v2:n})),u.assign(Sn(hm({f:d.abs()})))}),u}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"P",type:"vec3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),fm=1/6,ym=e=>Pa(fm,Pa(e,Pa(e,e.negate().add(3)).sub(3)).add(1)),bm=e=>Pa(fm,Pa(e,Pa(e,Pa(3,e).sub(6))).add(4)),xm=e=>Pa(fm,Pa(e,Pa(e,Pa(-3,e).add(3)).add(3)).add(1)),Tm=e=>Pa(fm,eu(e,3)),_m=e=>ym(e).add(bm(e)),vm=e=>xm(e).add(Tm(e)),Nm=e=>Fa(-1,bm(e).div(ym(e).add(bm(e)))),Sm=e=>Fa(1,Tm(e).div(xm(e).add(Tm(e)))),Rm=(e,t,r)=>{const s=e.uvNode,i=Pa(s,t.zw).add(.5),n=vo(i),a=Ro(i),o=_m(a.x),u=vm(a.x),l=Nm(a.x),d=Sm(a.x),c=Nm(a.y),h=Sm(a.y),p=Tn(n.x.add(l),n.y.add(c)).sub(.5).mul(t.xy),g=Tn(n.x.add(d),n.y.add(c)).sub(.5).mul(t.xy),m=Tn(n.x.add(l),n.y.add(h)).sub(.5).mul(t.xy),f=Tn(n.x.add(d),n.y.add(h)).sub(.5).mul(t.xy),y=_m(a.y).mul(Fa(o.mul(e.sample(p).level(r)),u.mul(e.sample(g).level(r)))),b=vm(a.y).mul(Fa(o.mul(e.sample(m).level(r)),u.mul(e.sample(f).level(r))));return y.add(b)},Em=dn(([e,t])=>{const r=Tn(e.size(yn(t))),s=Tn(e.size(yn(t.add(1)))),i=Da(1,r),n=Da(1,s),a=Rm(e,wn(i,r),vo(t)),o=Rm(e,wn(n,s),No(t));return Ro(t).mix(a,o)}),Am=dn(([e,t])=>{const r=t.mul(Bl(e));return Em(e,r)}),wm=dn(([e,t,r,s,i])=>{const n=Sn(du(t.negate(),So(e),Da(1,s))),a=Sn(Po(i[0].xyz),Po(i[1].xyz),Po(i[2].xyz));return So(n).mul(r.mul(a))}).setLayout({name:"getVolumeTransmissionRay",type:"vec3",inputs:[{name:"n",type:"vec3"},{name:"v",type:"vec3"},{name:"thickness",type:"float"},{name:"ior",type:"float"},{name:"modelMatrix",type:"mat4"}]}),Cm=dn(([e,t])=>e.mul(uu(t.mul(2).sub(2),0,1))).setLayout({name:"applyIorToRoughness",type:"float",inputs:[{name:"roughness",type:"float"},{name:"ior",type:"float"}]}),Mm=Gp(),Bm=zp(),Fm=dn(([e,t,r],{material:s})=>{const i=(s.side===L?Mm:Bm).sample(e),n=xo(Ql.x).mul(Cm(t,r));return Em(i,n)}),Lm=dn(([e,t,r])=>(pn(r.notEqual(0),()=>{const s=bo(t).negate().div(r);return fo(s.negate().mul(e))}),Sn(1))).setLayout({name:"volumeAttenuation",type:"vec3",inputs:[{name:"transmissionDistance",type:"float"},{name:"attenuationColor",type:"vec3"},{name:"attenuationDistance",type:"float"}]}),Pm=dn(([e,t,r,s,i,n,a,o,u,l,d,c,h,p,g])=>{let m,f;if(g){m=wn().toVar(),f=Sn().toVar();const i=d.sub(1).mul(g.mul(.025)),n=Sn(d.sub(i),d,d.add(i));Ep({start:0,end:3},({i:i})=>{const d=n.element(i),g=wm(e,t,c,d,o),y=a.add(g),b=l.mul(u.mul(wn(y,1))),x=Tn(b.xy.div(b.w)).toVar();x.addAssign(1),x.divAssign(2),x.assign(Tn(x.x,x.y.oneMinus()));const T=Fm(x,r,d);m.element(i).assign(T.element(i)),m.a.addAssign(T.a),f.element(i).assign(s.element(i).mul(Lm(Po(g),h,p).element(i)))}),m.a.divAssign(3)}else{const i=wm(e,t,c,d,o),n=a.add(i),g=l.mul(u.mul(wn(n,1))),y=Tn(g.xy.div(g.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(Tn(y.x,y.y.oneMinus())),m=Fm(y,r,d),f=s.mul(Lm(Po(i),h,p))}const y=f.rgb.mul(m.rgb),b=e.dot(t).clamp(),x=Sn(am({dotNV:b,specularColor:i,specularF90:n,roughness:r})),T=f.r.add(f.g,f.b).div(3);return wn(x.oneMinus().mul(y),m.a.oneMinus().mul(T).oneMinus())}),Dm=Ln(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),Um=(e,t)=>e.sub(t).div(e.add(t)).pow2(),Im=dn(({outsideIOR:e,eta2:t,cosTheta1:r,thinFilmThickness:s,baseF0:i})=>{const n=ou(e,t,cu(0,.03,s)),a=e.div(n).pow2().mul(r.pow2().oneMinus()).oneMinus();pn(a.lessThan(0),()=>Sn(1));const o=a.sqrt(),u=Um(n,e),l=Vg({f0:u,f90:1,dotVH:r}),d=l.oneMinus(),c=n.lessThan(e).select(Math.PI,0),h=fn(Math.PI).sub(c),p=(e=>{const t=e.sqrt();return Sn(1).add(t).div(Sn(1).sub(t))})(i.clamp(0,.9999)),g=Um(p,n.toVec3()),m=Vg({f0:g,f90:1,dotVH:o}),f=Sn(p.x.lessThan(n).select(Math.PI,0),p.y.lessThan(n).select(Math.PI,0),p.z.lessThan(n).select(Math.PI,0)),y=n.mul(s,o,2),b=Sn(h).add(f),x=l.mul(m).clamp(1e-5,.9999),T=x.sqrt(),_=d.pow2().mul(m).div(Sn(1).sub(x)),v=l.add(_).toVar(),N=_.sub(d).toVar();return Ep({start:1,end:2,condition:"<=",name:"m"},({m:e})=>{N.mulAssign(T);const t=((e,t)=>{const r=e.mul(2*Math.PI*1e-9),s=Sn(54856e-17,44201e-17,52481e-17),i=Sn(1681e3,1795300,2208400),n=Sn(43278e5,93046e5,66121e5),a=fn(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(r.mul(2239900).add(t.x).cos()).mul(r.pow2().mul(-45282e5).exp());let o=s.mul(n.mul(2*Math.PI).sqrt()).mul(i.mul(r).add(t).cos()).mul(r.pow2().negate().mul(n).exp());return o=Sn(o.x.add(a),o.y,o.z).div(1.0685e-7),Dm.mul(o)})(fn(e).mul(y),fn(e).mul(b)).mul(2);v.addAssign(N.mul(t))}),v.max(Sn(0))}).setLayout({name:"evalIridescence",type:"vec3",inputs:[{name:"outsideIOR",type:"float"},{name:"eta2",type:"float"},{name:"cosTheta1",type:"float"},{name:"thinFilmThickness",type:"float"},{name:"baseF0",type:"vec3"}]}),Om=dn(({normal:e,viewDir:t,roughness:r})=>{const s=e.dot(t).saturate(),i=r.mul(r),n=r.add(.1).reciprocal(),a=fn(-1.9362).add(r.mul(1.0678)).add(i.mul(.4573)).sub(n.mul(.8469)),o=fn(-.6014).add(r.mul(.5538)).sub(i.mul(.467)).sub(n.mul(.1255));return a.mul(s).add(o).exp().saturate()}),Vm=Sn(.04),km=fn(1);class Gm extends Dg{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=r,this.anisotropy=s,this.transmission=i,this.dispersion=n,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null,this.iridescenceF0Dielectric=null,this.iridescenceF0Metallic=null}start(e){if(!0===this.clearcoat&&(this.clearcoatRadiance=Sn().toVar("clearcoatRadiance"),this.clearcoatSpecularDirect=Sn().toVar("clearcoatSpecularDirect"),this.clearcoatSpecularIndirect=Sn().toVar("clearcoatSpecularIndirect")),!0===this.sheen&&(this.sheenSpecularDirect=Sn().toVar("sheenSpecularDirect"),this.sheenSpecularIndirect=Sn().toVar("sheenSpecularIndirect")),!0===this.iridescence){const e=cc.dot(tc).clamp(),t=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:ra}),r=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:kn.rgb});this.iridescenceFresnel=ou(t,r,Wn),this.iridescenceF0Dielectric=om({f:t,f90:1,dotVH:e}),this.iridescenceF0Metallic=om({f:r,f90:1,dotVH:e}),this.iridescenceF0=ou(this.iridescenceF0Dielectric,this.iridescenceF0Metallic,Wn)}if(!0===this.transmission){const t=Zd,r=Rd.sub(Zd).normalize(),s=hc,i=e.context;i.backdrop=Pm(s,r,zn,Gn,sa,ia,t,Id,vd,Td,da,ha,ga,pa,this.dispersion?ma:null),i.backdropAlpha=ca,kn.a.mulAssign(ou(1,i.backdrop.a,ca))}super.start(e)}computeMultiscattering(e,t,r,s,i=null){const n=cc.dot(tc).clamp(),a=im({roughness:zn,dotNV:n}),o=i?Kn.mix(s,i):s,u=o.mul(a.x).add(r.mul(a.y)),l=a.x.add(a.y).oneMinus(),d=o.add(o.oneMinus().mul(.047619)),c=u.mul(d).div(l.mul(d).oneMinus());e.addAssign(u),t.addAssign(c.mul(l))}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t).toVar();if(!0===this.sheen){this.sheenSpecularDirect.addAssign(s.mul(dm({lightDirection:e})));const t=Om({normal:cc,viewDir:tc,roughness:Xn}),r=Om({normal:cc,viewDir:e,roughness:Xn}),i=jn.r.max(jn.g).max(jn.b).mul(t.max(r)).oneMinus();s.mulAssign(i)}if(!0===this.clearcoat){const r=pc.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(r.mul(tm({lightDirection:e,f0:Vm,f90:km,roughness:qn,normalView:pc})))}r.directDiffuse.addAssign(s.mul(kg({diffuseColor:Gn}))),r.directSpecular.addAssign(s.mul(nm({lightDirection:e,f0:sa,f90:1,roughness:zn,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s,reflectedLight:i,ltc_1:n,ltc_2:a}){const o=t.add(r).sub(s),u=t.sub(r).sub(s),l=t.sub(r).add(s),d=t.add(r).add(s),c=cc,h=tc,p=ec.toVar(),g=cm({N:c,V:h,roughness:zn}),m=n.sample(g).toVar(),f=a.sample(g).toVar(),y=Ln(Sn(m.x,0,m.y),Sn(0,1,0),Sn(m.z,0,m.w)).toVar(),b=sa.mul(f.x).add(ia.sub(sa).mul(f.y)).toVar();if(i.directSpecular.addAssign(e.mul(b).mul(gm({N:c,V:h,P:p,mInv:y,p0:o,p1:u,p2:l,p3:d}))),i.directDiffuse.addAssign(e.mul(Gn).mul(gm({N:c,V:h,P:p,mInv:Ln(1,0,0,0,1,0,0,0,1),p0:o,p1:u,p2:l,p3:d}))),!0===this.clearcoat){const t=pc,r=cm({N:t,V:h,roughness:qn}),s=n.sample(r),i=a.sample(r),c=Ln(Sn(s.x,0,s.y),Sn(0,1,0),Sn(s.z,0,s.w)),g=Vm.mul(i.x).add(km.sub(Vm).mul(i.y));this.clearcoatSpecularDirect.addAssign(e.mul(g).mul(gm({N:t,V:h,P:p,mInv:c,p0:o,p1:u,p2:l,p3:d})))}}indirect(e){this.indirectDiffuse(e),this.indirectSpecular(e),this.ambientOcclusion(e)}indirectDiffuse(e){const{irradiance:t,reflectedLight:r}=e.context,s=t.mul(kg({diffuseColor:Gn})).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();s.mulAssign(t)}r.indirectDiffuse.addAssign(s)}indirectSpecular(e){const{radiance:t,iblIrradiance:r,reflectedLight:s}=e.context;if(!0===this.sheen&&this.sheenSpecularIndirect.addAssign(r.mul(jn,Om({normal:cc,viewDir:tc,roughness:Xn}))),!0===this.clearcoat){const e=pc.dot(tc).clamp(),t=am({dotNV:e,specularColor:Vm,specularF90:km,roughness:qn});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(t))}const i=Sn().toVar("singleScatteringDielectric"),n=Sn().toVar("multiScatteringDielectric"),a=Sn().toVar("singleScatteringMetallic"),o=Sn().toVar("multiScatteringMetallic");this.computeMultiscattering(i,n,ia,ra,this.iridescenceF0Dielectric),this.computeMultiscattering(a,o,ia,kn.rgb,this.iridescenceF0Metallic);const u=ou(i,a,Wn),l=ou(n,o,Wn),d=i.add(n),c=Gn.mul(d.oneMinus()),h=r.mul(1/Math.PI),p=t.mul(u).add(l.mul(h)).toVar(),g=c.mul(h).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();p.mulAssign(t),g.mulAssign(t)}s.indirectSpecular.addAssign(p),s.indirectDiffuse.addAssign(g)}ambientOcclusion(e){const{ambientOcclusion:t,reflectedLight:r}=e.context,s=cc.dot(tc).clamp().add(t),i=zn.mul(-16).oneMinus().negate().exp2(),n=t.sub(s.pow(i).oneMinus()).clamp();!0===this.clearcoat&&this.clearcoatSpecularIndirect.mulAssign(t),!0===this.sheen&&this.sheenSpecularIndirect.mulAssign(t),r.indirectDiffuse.mulAssign(t),r.indirectSpecular.mulAssign(n)}finish({context:e}){const{outgoingLight:t}=e;if(!0===this.clearcoat){const e=pc.dot(tc).clamp(),r=Vg({dotVH:e,f0:Vm,f90:km}),s=t.mul(Hn.mul(r).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(Hn));t.assign(s)}if(!0===this.sheen){const e=t.add(this.sheenSpecularDirect,this.sheenSpecularIndirect.mul(1/Math.PI));t.assign(e)}}}const $m=fn(1),zm=fn(-2),Wm=fn(.8),Hm=fn(-1),qm=fn(.4),jm=fn(2),Xm=fn(.305),Km=fn(3),Qm=fn(.21),Ym=fn(4),Zm=fn(4),Jm=fn(16),ef=dn(([e])=>{const t=Sn(Fo(e)).toVar(),r=fn(-1).toVar();return pn(t.x.greaterThan(t.z),()=>{pn(t.x.greaterThan(t.y),()=>{r.assign(Tu(e.x.greaterThan(0),0,3))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}).Else(()=>{pn(t.z.greaterThan(t.y),()=>{r.assign(Tu(e.z.greaterThan(0),2,5))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}),r}).setLayout({name:"getFace",type:"float",inputs:[{name:"direction",type:"vec3"}]}),tf=dn(([e,t])=>{const r=Tn().toVar();return pn(t.equal(0),()=>{r.assign(Tn(e.z,e.y).div(Fo(e.x)))}).ElseIf(t.equal(1),()=>{r.assign(Tn(e.x.negate(),e.z.negate()).div(Fo(e.y)))}).ElseIf(t.equal(2),()=>{r.assign(Tn(e.x.negate(),e.y).div(Fo(e.z)))}).ElseIf(t.equal(3),()=>{r.assign(Tn(e.z.negate(),e.y).div(Fo(e.x)))}).ElseIf(t.equal(4),()=>{r.assign(Tn(e.x.negate(),e.z).div(Fo(e.y)))}).Else(()=>{r.assign(Tn(e.x,e.y).div(Fo(e.z)))}),Pa(.5,r.add(1))}).setLayout({name:"getUV",type:"vec2",inputs:[{name:"direction",type:"vec3"},{name:"face",type:"float"}]}),rf=dn(([e])=>{const t=fn(0).toVar();return pn(e.greaterThanEqual(Wm),()=>{t.assign($m.sub(e).mul(Hm.sub(zm)).div($m.sub(Wm)).add(zm))}).ElseIf(e.greaterThanEqual(qm),()=>{t.assign(Wm.sub(e).mul(jm.sub(Hm)).div(Wm.sub(qm)).add(Hm))}).ElseIf(e.greaterThanEqual(Xm),()=>{t.assign(qm.sub(e).mul(Km.sub(jm)).div(qm.sub(Xm)).add(jm))}).ElseIf(e.greaterThanEqual(Qm),()=>{t.assign(Xm.sub(e).mul(Ym.sub(Km)).div(Xm.sub(Qm)).add(Km))}).Else(()=>{t.assign(fn(-2).mul(xo(Pa(1.16,e))))}),t}).setLayout({name:"roughnessToMip",type:"float",inputs:[{name:"roughness",type:"float"}]}),sf=dn(([e,t])=>{const r=e.toVar();r.assign(Pa(2,r).sub(1));const s=Sn(r,1).toVar();return pn(t.equal(0),()=>{s.assign(s.zyx)}).ElseIf(t.equal(1),()=>{s.assign(s.xzy),s.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{s.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{s.assign(s.zyx),s.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{s.assign(s.xzy),s.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{s.z.mulAssign(-1)}),s}).setLayout({name:"getDirection",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"face",type:"float"}]}),nf=dn(([e,t,r,s,i,n])=>{const a=fn(r),o=Sn(t),u=uu(rf(a),zm,n),l=Ro(u),d=vo(u),c=Sn(af(e,o,d,s,i,n)).toVar();return pn(l.notEqual(0),()=>{const t=Sn(af(e,o,d.add(1),s,i,n)).toVar();c.assign(ou(c,t,l))}),c}),af=dn(([e,t,r,s,i,n])=>{const a=fn(r).toVar(),o=Sn(t),u=fn(ef(o)).toVar(),l=fn(jo(Zm.sub(a),0)).toVar();a.assign(jo(a,Zm));const d=fn(yo(a)).toVar(),c=Tn(tf(o,u).mul(d.sub(2)).add(1)).toVar();return pn(u.greaterThan(2),()=>{c.y.addAssign(d),u.subAssign(3)}),c.x.addAssign(u.mul(d)),c.x.addAssign(l.mul(Pa(3,Jm))),c.y.addAssign(Pa(4,yo(n).sub(d))),c.x.mulAssign(s),c.y.mulAssign(i),e.sample(c).grad(Tn(),Tn())}),of=dn(({envMap:e,mipInt:t,outputDirection:r,theta:s,axis:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Ao(s),l=r.mul(u).add(i.cross(r).mul(Eo(s))).add(i.mul(i.dot(r).mul(u.oneMinus())));return af(e,l,t,n,a,o)}),uf=dn(({n:e,latitudinal:t,poleAxis:r,outputDirection:s,weights:i,samples:n,dTheta:a,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})=>{const h=Sn(Tu(t,r,Jo(r,s))).toVar();pn(h.equal(Sn(0)),()=>{h.assign(Sn(s.z,0,s.x.negate()))}),h.assign(So(h));const p=Sn().toVar();return p.addAssign(i.element(0).mul(of({theta:0,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),Ep({start:yn(1),end:e},({i:e})=>{pn(e.greaterThanEqual(n),()=>{Ap()});const t=fn(a.mul(fn(e))).toVar();p.addAssign(i.element(e).mul(of({theta:t.mul(-1),axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),p.addAssign(i.element(e).mul(of({theta:t,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})))}),wn(p,1)}),lf=dn(([e])=>{const t=bn(e).toVar();return t.assign(t.shiftLeft(bn(16)).bitOr(t.shiftRight(bn(16)))),t.assign(t.bitAnd(bn(1431655765)).shiftLeft(bn(1)).bitOr(t.bitAnd(bn(2863311530)).shiftRight(bn(1)))),t.assign(t.bitAnd(bn(858993459)).shiftLeft(bn(2)).bitOr(t.bitAnd(bn(3435973836)).shiftRight(bn(2)))),t.assign(t.bitAnd(bn(252645135)).shiftLeft(bn(4)).bitOr(t.bitAnd(bn(4042322160)).shiftRight(bn(4)))),t.assign(t.bitAnd(bn(16711935)).shiftLeft(bn(8)).bitOr(t.bitAnd(bn(4278255360)).shiftRight(bn(8)))),fn(t).mul(2.3283064365386963e-10)}),df=dn(([e,t])=>Tn(fn(e).div(fn(t)),lf(e))),cf=dn(([e,t,r])=>{const s=r.mul(r).toConst(),i=Sn(1,0,0).toConst(),n=Jo(t,i).toConst(),a=To(e.x).toConst(),o=Pa(2,3.14159265359).mul(e.y).toConst(),u=a.mul(Ao(o)).toConst(),l=a.mul(Eo(o)).toVar(),d=Pa(.5,t.z.add(1)).toConst();l.assign(d.oneMinus().mul(To(u.mul(u).oneMinus())).add(d.mul(l)));const c=i.mul(u).add(n.mul(l)).add(t.mul(To(jo(0,u.mul(u).add(l.mul(l)).oneMinus()))));return So(Sn(s.mul(c.x),s.mul(c.y),jo(0,c.z)))}),hf=dn(({roughness:e,mipInt:t,envMap:r,N_immutable:s,GGX_SAMPLES:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Sn(s).toVar(),l=Sn(0).toVar(),d=fn(0).toVar();return pn(e.lessThan(.001),()=>{l.assign(af(r,u,t,n,a,o))}).Else(()=>{const s=Tu(Fo(u.z).lessThan(.999),Sn(0,0,1),Sn(1,0,0)),c=So(Jo(s,u)).toVar(),h=Jo(u,c).toVar();Ep({start:bn(0),end:i},({i:s})=>{const p=df(s,i),g=cf(p,Sn(0,0,1),e),m=So(c.mul(g.x).add(h.mul(g.y)).add(u.mul(g.z))),f=So(m.mul(Zo(u,m).mul(2)).sub(u)),y=jo(Zo(u,f),0);pn(y.greaterThan(0),()=>{const e=af(r,f,t,n,a,o);l.addAssign(e.mul(y)),d.addAssign(y)})}),pn(d.greaterThan(0),()=>{l.assign(l.div(d))})}),wn(l,1)}),pf=[.125,.215,.35,.446,.526,.582],gf=20,mf=new Se(-1,1,1,-1,0,1),ff=new Re(90,1),yf=new e;let bf=null,xf=0,Tf=0;const _f=new r,vf=new WeakMap,Nf=[3,1,5,0,4,2],Sf=sf(Al(),El("faceIndex")).normalize(),Rf=Sn(Sf.x,Sf.y,Sf.z);class Ef{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._ggxMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,r=.1,s=100,i={}){const{size:n=256,position:a=_f,renderTarget:o=null}=i;if(this._setSize(n),!1===this._hasInitialized){d('PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.');const n=o||this._allocateTarget();return i.renderTarget=n,this.fromSceneAsync(e,t,r,s,i),n}bf=this._renderer.getRenderTarget(),xf=this._renderer.getActiveCubeFace(),Tf=this._renderer.getActiveMipmapLevel();const u=o||this._allocateTarget();return u.depthBuffer=!0,this._init(u),this._sceneToCubeUV(e,r,s,u,a),t>0&&this._blur(u,0,0,t),this._applyPMREM(u),this._cleanup(u),u}async fromSceneAsync(e,t=0,r=.1,s=100,i={}){return v('PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this.fromScene(e,t,r,s,i)}fromEquirectangular(e,t=null){if(!1===this._hasInitialized){d('PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.'),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromEquirectangularAsync(e,r),r}return this._fromTexture(e,t)}async fromEquirectangularAsync(e,t=null){return v('PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}fromCubemap(e,t=null){if(!1===this._hasInitialized){d("PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead."),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromCubemapAsync(e,t),r}return this._fromTexture(e,t)}async fromCubemapAsync(e,t=null){return v('PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}async compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Bf(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===I||e.mapping===O?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=pf[a-e+4-1]:0===a&&(o=0),r.push(o);const u=1/(n-2),l=-u,d=1+u,c=[l,l,d,l,d,d,l,l,d,d,l,d],h=6,p=6,g=3,m=2,f=1,y=new Float32Array(g*p*h),b=new Float32Array(m*p*h),x=new Float32Array(f*p*h);for(let e=0;e2?0:-1,s=[t,r,0,t+2/3,r,0,t+2/3,r+1,0,t,r,0,t+2/3,r+1,0,t,r+1,0],i=Nf[e];y.set(s,g*p*i),b.set(c,m*p*i);const n=[i,i,i,i,i,i];x.set(n,f*p*i)}const T=new Ne;T.setAttribute("position",new Ce(y,g)),T.setAttribute("uv",new Ce(b,m)),T.setAttribute("faceIndex",new Ce(x,f)),s.push(new ue(T,null)),i>4&&i--}return{lodMeshes:s,sizeLods:t,sigmas:r}}(t)),this._blurMaterial=function(e,t,s){const i=$l(new Array(gf).fill(0)),n=Na(new r(0,1,0)),a=Na(0),o=fn(gf),u=Na(0),l=Na(1),d=Ul(),c=Na(0),h=fn(1/t),p=fn(1/s),g=fn(e),m={n:o,latitudinal:u,weights:i,poleAxis:n,outputDirection:Rf,dTheta:a,samples:l,envMap:d,mipInt:c,CUBEUV_TEXEL_WIDTH:h,CUBEUV_TEXEL_HEIGHT:p,CUBEUV_MAX_MIP:g},f=Cf("blur");return f.fragmentNode=uf({...m,latitudinal:u.equal(1)}),vf.set(f,m),f}(t,e.width,e.height),this._ggxMaterial=function(e,t,r){const s=Ul(),i=Na(0),n=Na(0),a=fn(1/t),o=fn(1/r),u=fn(e),l={envMap:s,roughness:i,mipInt:n,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:u},d=Cf("ggx");return d.fragmentNode=hf({...l,N_immutable:Rf,GGX_SAMPLES:bn(512)}),vf.set(d,l),d}(t,e.width,e.height)}}async _compileMaterial(e){const t=new ue(new Ne,e);await this._renderer.compile(t,mf)}_sceneToCubeUV(e,t,r,s,i){const n=ff;n.near=t,n.far=r;const a=[1,1,1,1,-1,1],o=[1,-1,1,-1,1,-1],u=this._renderer,l=u.autoClear;u.getClearColor(yf),u.autoClear=!1,null===this._backgroundBox&&(this._backgroundBox=new ue(new oe,new ye({name:"PMREM.Background",side:L,depthWrite:!1,depthTest:!1})));const d=this._backgroundBox,c=d.material;let h=!1;const p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,h=!0):(c.color.copy(yf),h=!0),u.setRenderTarget(s),u.clear(),h&&u.render(d,n);for(let t=0;t<6;t++){const r=t%3;0===r?(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x+o[t],i.y,i.z)):1===r?(n.up.set(0,0,a[t]),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y+o[t],i.z)):(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y,i.z+o[t]));const l=this._cubeSize;wf(s,r*l,t>2?l:0,l,l),u.render(e,n)}u.autoClear=l,e.background=p}_textureToCubeUV(e,t){const r=this._renderer,s=e.mapping===I||e.mapping===O;s?null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(e)):null===this._equirectMaterial&&(this._equirectMaterial=Bf(e));const i=s?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;const n=this._lodMeshes[0];n.material=i;const a=this._cubeSize;wf(t,0,0,3*a,2*a),r.setRenderTarget(t),r.render(n,mf)}_applyPMREM(e){const t=this._renderer,r=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let t=1;tc-4?r-c+4:0),g=4*(this._cubeSize-h);e.texture.frame=(e.texture.frame||0)+1,o.envMap.value=e.texture,o.roughness.value=d,o.mipInt.value=c-t,wf(i,p,g,3*h,2*h),s.setRenderTarget(i),s.render(a,mf),i.texture.frame=(i.texture.frame||0)+1,o.envMap.value=i.texture,o.roughness.value=0,o.mipInt.value=c-r,wf(e,p,g,3*h,2*h),s.setRenderTarget(e),s.render(a,mf)}_blur(e,t,r,s,i){const n=this._pingPongRenderTarget;this._halfBlur(e,n,t,r,s,"latitudinal",i),this._halfBlur(n,e,r,r,s,"longitudinal",i)}_halfBlur(e,t,r,s,i,n,a){const u=this._renderer,l=this._blurMaterial;"latitudinal"!==n&&"longitudinal"!==n&&o("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[s];c.material=l;const h=vf.get(l),p=this._sizeLods[r]-1,g=isFinite(i)?Math.PI/(2*p):2*Math.PI/39,m=i/g,f=isFinite(i)?1+Math.floor(3*m):gf;f>gf&&d(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const y=[];let b=0;for(let e=0;ex-4?s-x+4:0),4*(this._cubeSize-T),3*T,2*T),u.setRenderTarget(t),u.render(c,mf)}}function Af(e,t){const r=new ae(e,t,{magFilter:de,minFilter:de,generateMipmaps:!1,type:_e,format:Ae,colorSpace:Ee});return r.texture.mapping=we,r.texture.name="PMREM.cubeUv",r.texture.isPMREMTexture=!0,r.scissorTest=!0,r}function wf(e,t,r,s,i){e.viewport.set(t,r,s,i),e.scissor.set(t,r,s,i)}function Cf(e){const t=new yg;return t.depthTest=!1,t.depthWrite=!1,t.blending=se,t.name=`PMREM_${e}`,t}function Mf(e){const t=Cf("cubemap");return t.fragmentNode=Bc(e,Rf),t}function Bf(e){const t=Cf("equirect");return t.fragmentNode=Ul(e,Eg(Rf),0),t}const Ff=new WeakMap;function Lf(e,t,r){const s=function(e){let t=Ff.get(e);void 0===t&&(t=new WeakMap,Ff.set(e,t));return t}(t);let i=s.get(e);if((void 0!==i?i.pmremVersion:-1)!==e.pmremVersion){const t=e.image;if(e.isCubeTexture){if(!function(e){if(null==e)return!1;let t=0;const r=6;for(let s=0;s0}(t))return null;i=r.fromEquirectangular(e,i)}i.pmremVersion=e.pmremVersion,s.set(e,i)}return i.texture}class Pf extends pi{static get type(){return"PMREMNode"}constructor(e,t=null,r=null){super("vec3"),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=r,this._generator=null;const s=new N;s.isRenderTargetTexture=!0,this._texture=Ul(s),this._width=Na(0),this._height=Na(0),this._maxMip=Na(0),this.updateBeforeType=ti.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){const t=function(e){const t=Math.log2(e)-2,r=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:r,maxMip:t}}(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem;const r=t?t.pmremVersion:-1,s=this._value;r!==s.pmremVersion&&(t=!0===s.isPMREMTexture?s:Lf(s,e.renderer,this._generator),null!==t&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){null===this._generator&&(this._generator=new Ef(e.renderer)),this.updateBefore(e);let t=this.uvNode;null===t&&e.context.getUV&&(t=e.context.getUV(this,e)),t=Nc.mul(Sn(t.x,t.y.negate(),t.z));let r=this.levelNode;return null===r&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),nf(this._texture,t,r,this._width,this._height,this._maxMip)}dispose(){super.dispose(),null!==this._generator&&this._generator.dispose()}}const Df=nn(Pf).setParameterLength(1,3),Uf=new WeakMap;class If extends Lp{static get type(){return"EnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){const{material:t}=e;let r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){const s=r.isTextureNode?r.value:t[r.property],i=this._getPMREMNodeCache(e.renderer);let n=i.get(s);void 0===n&&(n=Df(s),i.set(s,n)),r=n}const s=!0===t.useAnisotropy||t.anisotropy>0?lh:cc,i=r.context(Of(zn,s)).mul(vc),n=r.context(Vf(hc)).mul(Math.PI).mul(vc),a=ul(i),o=ul(n);e.context.radiance.addAssign(a),e.context.iblIrradiance.addAssign(o);const u=e.context.lightingModel.clearcoatRadiance;if(u){const e=r.context(Of(qn,pc)).mul(vc),t=ul(e);u.addAssign(t)}}_getPMREMNodeCache(e){let t=Uf.get(e);return void 0===t&&(t=new WeakMap,Uf.set(e,t)),t}}const Of=(e,t)=>{let r=null;return{getUV:()=>(null===r&&(r=tc.negate().reflect(t),r=su(e).mix(r,t).normalize(),r=r.transformDirection(vd)),r),getTextureLevel:()=>e}},Vf=e=>({getUV:()=>e,getTextureLevel:()=>fn(1)}),kf=new Me;class Gf extends yg{static get type(){return"MeshStandardNodeMaterial"}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(kf),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return null===t&&e.environmentNode&&(t=e.environmentNode),t?new If(t):null}setupLightingModel(){return new Gm}setupSpecular(){const e=ou(Sn(.04),kn.rgb,Wn);ra.assign(Sn(.04)),sa.assign(e),ia.assign(1)}setupVariants(){const e=this.metalnessNode?fn(this.metalnessNode):Bh;Wn.assign(e);let t=this.roughnessNode?fn(this.roughnessNode):Mh;t=Kg({roughness:t}),zn.assign(t),this.setupSpecular(),Gn.assign(kn.rgb.mul(e.oneMinus()))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}}const $f=new Be;class zf extends Gf{static get type(){return"MeshPhysicalNodeMaterial"}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues($f),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||null!==this.clearcoatNode}get useIridescence(){return this.iridescence>0||null!==this.iridescenceNode}get useSheen(){return this.sheen>0||null!==this.sheenNode}get useAnisotropy(){return this.anisotropy>0||null!==this.anisotropyNode}get useTransmission(){return this.transmission>0||null!==this.transmissionNode}get useDispersion(){return this.dispersion>0||null!==this.dispersionNode}setupSpecular(){const e=this.iorNode?fn(this.iorNode):Hh;da.assign(e),ra.assign(qo(tu(da.sub(1).div(da.add(1))).mul(Ah),Sn(1)).mul(Eh)),sa.assign(ou(ra,kn.rgb,Wn)),ia.assign(ou(Eh,1,Wn))}setupLightingModel(){return new Gm(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){const e=this.clearcoatNode?fn(this.clearcoatNode):Lh,t=this.clearcoatRoughnessNode?fn(this.clearcoatRoughnessNode):Ph;Hn.assign(e),qn.assign(Kg({roughness:t}))}if(this.useSheen){const e=this.sheenNode?Sn(this.sheenNode):Ih,t=this.sheenRoughnessNode?fn(this.sheenRoughnessNode):Oh;jn.assign(e),Xn.assign(t)}if(this.useIridescence){const e=this.iridescenceNode?fn(this.iridescenceNode):kh,t=this.iridescenceIORNode?fn(this.iridescenceIORNode):Gh,r=this.iridescenceThicknessNode?fn(this.iridescenceThicknessNode):$h;Kn.assign(e),Qn.assign(t),Yn.assign(r)}if(this.useAnisotropy){const e=(this.anisotropyNode?Tn(this.anisotropyNode):Vh).toVar();Jn.assign(e.length()),pn(Jn.equal(0),()=>{e.assign(Tn(1,0))}).Else(()=>{e.divAssign(Tn(Jn)),Jn.assign(Jn.saturate())}),Zn.assign(Jn.pow2().mix(zn.pow2(),1)),ea.assign(oh[0].mul(e.x).add(oh[1].mul(e.y))),ta.assign(oh[1].mul(e.x).sub(oh[0].mul(e.y)))}if(this.useTransmission){const e=this.transmissionNode?fn(this.transmissionNode):zh,t=this.thicknessNode?fn(this.thicknessNode):Wh,r=this.attenuationDistanceNode?fn(this.attenuationDistanceNode):qh,s=this.attenuationColorNode?Sn(this.attenuationColorNode):jh;if(ca.assign(e),ha.assign(t),pa.assign(r),ga.assign(s),this.useDispersion){const e=this.dispersionNode?fn(this.dispersionNode):ep;ma.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?Sn(this.clearcoatNormalNode):Dh}setup(e){e.context.setupClearcoatNormal=()=>Pu(this.setupClearcoatNormal(e),"NORMAL","vec3"),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.iorNode=e.iorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}}class Wf extends Gm{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1,a=!1){super(e,t,r,s,i,n),this.useSSS=a}direct({lightDirection:e,lightColor:t,reflectedLight:r},s){if(!0===this.useSSS){const i=s.material,{thicknessColorNode:n,thicknessDistortionNode:a,thicknessAmbientNode:o,thicknessAttenuationNode:u,thicknessPowerNode:l,thicknessScaleNode:d}=i,c=e.add(cc.mul(a)).normalize(),h=fn(tc.dot(c.negate()).saturate().pow(l).mul(d)),p=Sn(h.add(o).mul(n));r.directDiffuse.addAssign(p.mul(u.mul(t)))}super.direct({lightDirection:e,lightColor:t,reflectedLight:r},s)}}class Hf extends zf{static get type(){return"MeshSSSNodeMaterial"}constructor(e){super(e),this.thicknessColorNode=null,this.thicknessDistortionNode=fn(.1),this.thicknessAmbientNode=fn(0),this.thicknessAttenuationNode=fn(.1),this.thicknessPowerNode=fn(2),this.thicknessScaleNode=fn(10)}get useSSS(){return null!==this.thicknessColorNode}setupLightingModel(){return new Wf(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion,this.useSSS)}copy(e){return this.thicknessColorNode=e.thicknessColorNode,this.thicknessDistortionNode=e.thicknessDistortionNode,this.thicknessAmbientNode=e.thicknessAmbientNode,this.thicknessAttenuationNode=e.thicknessAttenuationNode,this.thicknessPowerNode=e.thicknessPowerNode,this.thicknessScaleNode=e.thicknessScaleNode,super.copy(e)}}const qf=dn(({normal:e,lightDirection:t,builder:r})=>{const s=e.dot(t),i=Tn(s.mul(.5).add(.5),0);if(r.material.gradientMap){const e=Ic("gradientMap","texture").context({getUV:()=>i});return Sn(e.r)}{const e=i.fwidth().mul(.5);return ou(Sn(.7),Sn(1),cu(fn(.7).sub(e.x),fn(.7).add(e.x),i.x))}});class jf extends Dg{direct({lightDirection:e,lightColor:t,reflectedLight:r},s){const i=qf({normal:ac,lightDirection:e,builder:s}).mul(t);r.directDiffuse.addAssign(i.mul(kg({diffuseColor:kn.rgb})))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Xf=new Fe;class Kf extends yg{static get type(){return"MeshToonNodeMaterial"}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Xf),this.setValues(e)}setupLightingModel(){return new jf}}const Qf=dn(()=>{const e=Sn(tc.z,0,tc.x.negate()).normalize(),t=tc.cross(e);return Tn(e.dot(cc),t.dot(cc)).mul(.495).add(.5)}).once(["NORMAL","VERTEX"])().toVar("matcapUV"),Yf=new Le;class Zf extends yg{static get type(){return"MeshMatcapNodeMaterial"}constructor(e){super(),this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(Yf),this.setValues(e)}setupVariants(e){const t=Qf;let r;r=e.material.matcap?Ic("matcap","texture").context({getUV:()=>t}):Sn(ou(.2,.8,t.y)),kn.rgb.mulAssign(r.rgb)}}class Jf extends pi{static get type(){return"RotateNode"}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){const{rotationNode:t,positionNode:r}=this;if("vec2"===this.getNodeType(e)){const e=t.cos(),s=t.sin();return Fn(e,s,s.negate(),e).mul(r)}{const e=t,s=Pn(wn(1,0,0,0),wn(0,Ao(e.x),Eo(e.x).negate(),0),wn(0,Eo(e.x),Ao(e.x),0),wn(0,0,0,1)),i=Pn(wn(Ao(e.y),0,Eo(e.y),0),wn(0,1,0,0),wn(Eo(e.y).negate(),0,Ao(e.y),0),wn(0,0,0,1)),n=Pn(wn(Ao(e.z),Eo(e.z).negate(),0,0),wn(Eo(e.z),Ao(e.z),0,0),wn(0,0,1,0),wn(0,0,0,1));return s.mul(i).mul(n).mul(wn(r,1)).xyz}}}const ey=nn(Jf).setParameterLength(2),ty=new Pe;class ry extends yg{static get type(){return"SpriteNodeMaterial"}constructor(e){super(),this.isSpriteNodeMaterial=!0,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.transparent=!0,this.setDefaultValues(ty),this.setValues(e)}setupPositionView(e){const{object:t,camera:r}=e,{positionNode:s,rotationNode:i,scaleNode:n,sizeAttenuation:a}=this,o=Wd.mul(Sn(s||0));let u=Tn(Id[0].xyz.length(),Id[1].xyz.length());null!==n&&(u=u.mul(Tn(n))),r.isPerspectiveCamera&&!1===a&&(u=u.mul(o.z.negate()));let l=Kd.xy;if(t.center&&!0===t.center.isVector2){const e=((e,t,r)=>new Hu(e,t,r))("center","vec2",t);l=l.sub(e.sub(.5))}l=l.mul(u);const d=fn(i||Uh),c=ey(l,d);return wn(o.xy.add(c),o.zw)}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}}const sy=new De,iy=new t;class ny extends ry{static get type(){return"PointsNodeMaterial"}constructor(e){super(),this.sizeNode=null,this.isPointsNodeMaterial=!0,this.setDefaultValues(sy),this.setValues(e)}setupPositionView(){const{positionNode:e}=this;return Wd.mul(Sn(e||Qd)).xyz}setupVertexSprite(e){const{material:t,camera:r}=e,{rotationNode:s,scaleNode:i,sizeNode:n,sizeAttenuation:a}=this;let o=super.setupVertex(e);if(!0!==t.isNodeMaterial)return o;let u=null!==n?Tn(n):Jh;u=u.mul(Xl),r.isPerspectiveCamera&&!0===a&&(u=u.mul(ay.div(ec.z.negate()))),i&&i.isNode&&(u=u.mul(Tn(i)));let l=Kd.xy;if(s&&s.isNode){const e=fn(s);l=ey(l,e)}return l=l.mul(u),l=l.div(Jl.div(2)),l=l.mul(o.w),o=o.add(wn(l,0,0)),o}setupVertex(e){return e.object.isPoints?super.setupVertex(e):this.setupVertexSprite(e)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const ay=Na(1).onFrameUpdate(function({renderer:e}){const t=e.getSize(iy);this.value=.5*t.y});class oy extends Dg{constructor(){super(),this.shadowNode=fn(1).toVar("shadowMask")}direct({lightNode:e}){null!==e.shadowNode&&this.shadowNode.mulAssign(e.shadowNode)}finish({context:e}){kn.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(kn.rgb)}}const uy=new Ue;class ly extends yg{static get type(){return"ShadowNodeMaterial"}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.transparent=!0,this.setDefaultValues(uy),this.setValues(e)}setupLightingModel(){return new oy}}const dy=On("vec3"),cy=On("vec3"),hy=On("vec3");class py extends Dg{constructor(){super()}start(e){const{material:t}=e,r=On("vec3"),s=On("vec3");pn(Rd.sub(Zd).length().greaterThan(Gd.mul(2)),()=>{r.assign(Rd),s.assign(Zd)}).Else(()=>{r.assign(Zd),s.assign(Rd)});const i=s.sub(r),n=Na("int").onRenderUpdate(({material:e})=>e.steps),a=i.length().div(n).toVar(),o=i.normalize().toVar(),u=fn(0).toVar(),l=Sn(1).toVar();t.offsetNode&&u.addAssign(t.offsetNode.mul(a)),Ep(n,()=>{const s=r.add(o.mul(u)),i=vd.mul(wn(s,1)).xyz;let n;null!==t.depthNode&&(cy.assign(rg(Qp(i.z,bd,xd))),e.context.sceneDepthNode=rg(t.depthNode).toVar()),e.context.positionWorld=s,e.context.shadowPositionWorld=s,e.context.positionView=i,dy.assign(0),t.scatteringNode&&(n=t.scatteringNode({positionRay:s})),super.start(e),n&&dy.mulAssign(n);const d=dy.mul(.01).negate().mul(a).exp();l.mulAssign(d),u.addAssign(a)}),hy.addAssign(l.saturate().oneMinus())}scatteringLight(e,t){const r=t.context.sceneDepthNode;r?pn(r.greaterThanEqual(cy),()=>{dy.addAssign(e)}):dy.addAssign(e)}direct({lightNode:e,lightColor:t},r){if(void 0===e.light.distance)return;const s=t.xyz.toVar();s.mulAssign(e.shadowNode),this.scatteringLight(s,r)}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s},i){const n=t.add(r).sub(s),a=t.sub(r).sub(s),o=t.sub(r).add(s),u=t.add(r).add(s),l=i.context.positionView,d=e.xyz.mul(mm({P:l,p0:n,p1:a,p2:o,p3:u})).pow(1.5);this.scatteringLight(d,i)}finish(e){e.context.outgoingLight.assign(hy)}}class gy extends yg{static get type(){return"VolumeNodeMaterial"}constructor(e){super(),this.isVolumeNodeMaterial=!0,this.steps=25,this.offsetNode=null,this.scatteringNode=null,this.lights=!0,this.transparent=!0,this.side=L,this.depthTest=!1,this.depthWrite=!1,this.setValues(e)}setupLightingModel(){return new py}}class my{constructor(e,t,r){this.renderer=e,this.nodes=t,this.info=r,this._context="undefined"!=typeof self?self:null,this._animationLoop=null,this._requestId=null}start(){const e=(t,r)=>{this._requestId=this._context.requestAnimationFrame(e),!0===this.info.autoReset&&this.info.reset(),this.nodes.nodeFrame.update(),this.info.frame=this.nodes.nodeFrame.frameId,this.renderer._inspector.begin(),null!==this._animationLoop&&this._animationLoop(t,r),this.renderer._inspector.finish()};e()}stop(){this._context.cancelAnimationFrame(this._requestId),this._requestId=null}getAnimationLoop(){return this._animationLoop}setAnimationLoop(e){this._animationLoop=e}getContext(){return this._context}setContext(e){this._context=e}dispose(){this.stop()}}class fy{constructor(){this.weakMaps={}}_getWeakMap(e){const t=e.length;let r=this.weakMaps[t];return void 0===r&&(r=new WeakMap,this.weakMaps[t]=r),r}get(e){let t=this._getWeakMap(e);for(let r=0;r{this.dispose()},this.onGeometryDispose=()=>{this.attributes=null,this.attributesId=null},this.material.addEventListener("dispose",this.onMaterialDispose),this.geometry.addEventListener("dispose",this.onGeometryDispose)}updateClipping(e){this.clippingContext=e}get clippingNeedsUpdate(){return null!==this.clippingContext&&this.clippingContext.cacheKey!==this.clippingContextCacheKey&&(this.clippingContextCacheKey=this.clippingContext.cacheKey,!0)}get hardwareClippingPlanes(){return!0===this.material.hardwareClipping?this.clippingContext.unionClippingCount:0}getNodeBuilderState(){return this._nodeBuilderState||(this._nodeBuilderState=this._nodes.getForRender(this))}getMonitor(){return this._monitor||(this._monitor=this.getNodeBuilderState().observer)}getBindings(){return this._bindings||(this._bindings=this.getNodeBuilderState().createBindings())}getBindingGroup(e){for(const t of this.getBindings())if(t.name===e)return t}getIndex(){return this._geometries.getIndex(this)}getIndirect(){return this._geometries.getIndirect(this)}getIndirectOffset(){return this._geometries.getIndirectOffset(this)}getChainArray(){return[this.object,this.material,this.context,this.lightsNode]}setGeometry(e){this.geometry=e,this.attributes=null,this.attributesId=null}getAttributes(){if(null!==this.attributes)return this.attributes;const e=this.getNodeBuilderState().nodeAttributes,t=this.geometry,r=[],s=new Set,i={};for(const n of e){let e;if(n.node&&n.node.attribute?e=n.node.attribute:(e=t.getAttribute(n.name),i[n.name]=e.id),void 0===e)continue;r.push(e);const a=e.isInterleavedBufferAttribute?e.data:e;s.add(a)}return this.attributes=r,this.attributesId=i,this.vertexBuffers=Array.from(s.values()),r}getVertexBuffers(){return null===this.vertexBuffers&&this.getAttributes(),this.vertexBuffers}getDrawParameters(){const{object:e,material:t,geometry:r,group:s,drawRange:i}=this,n=this.drawParams||(this.drawParams={vertexCount:0,firstVertex:0,instanceCount:0,firstInstance:0}),a=this.getIndex(),o=null!==a;let u=1;if(!0===r.isInstancedBufferGeometry?u=r.instanceCount:void 0!==e.count&&(u=Math.max(0,e.count)),0===u)return null;if(n.instanceCount=u,!0===e.isBatchedMesh)return n;let l=1;!0!==t.wireframe||e.isPoints||e.isLineSegments||e.isLine||e.isLineLoop||(l=2);let d=i.start*l,c=(i.start+i.count)*l;null!==s&&(d=Math.max(d,s.start*l),c=Math.min(c,(s.start+s.count)*l));const h=r.attributes.position;let p=1/0;o?p=a.count:null!=h&&(p=h.count),d=Math.max(d,0),c=Math.min(c,p);const g=c-d;return g<0||g===1/0?null:(n.vertexCount=g,n.firstVertex=d,n)}getGeometryCacheKey(){const{geometry:e}=this;let t="";for(const r of Object.keys(e.attributes).sort()){const s=e.attributes[r];t+=r+",",s.data&&(t+=s.data.stride+","),s.offset&&(t+=s.offset+","),s.itemSize&&(t+=s.itemSize+","),s.normalized&&(t+="n,")}for(const r of Object.keys(e.morphAttributes).sort()){const s=e.morphAttributes[r];t+="morph-"+r+",";for(let e=0,r=s.length;e1||Array.isArray(e.morphTargetInfluences))&&(s+=e.uuid+","),s+=this.context.id+",",s+=e.receiveShadow+",",Os(s)}get needsGeometryUpdate(){if(this.geometry.id!==this.object.geometry.id)return!0;if(null!==this.attributes){const e=this.attributesId;for(const t in e){const r=this.geometry.getAttribute(t);if(void 0===r||e[t]!==r.id)return!0}}return!1}get needsUpdate(){return this.initialNodesCacheKey!==this.getDynamicCacheKey()||this.clippingNeedsUpdate}getDynamicCacheKey(){let e=0;return!0!==this.material.isShadowPassMaterial&&(e=this._nodes.getCacheKey(this.scene,this.lightsNode)),this.camera.isArrayCamera&&(e=ks(e,this.camera.cameras.length)),this.object.receiveShadow&&(e=ks(e,1)),e=ks(e,this.renderer.contextNode.id,this.renderer.contextNode.version),e}getCacheKey(){return this.getMaterialCacheKey()+this.getDynamicCacheKey()}dispose(){this.material.removeEventListener("dispose",this.onMaterialDispose),this.geometry.removeEventListener("dispose",this.onGeometryDispose),this.onDispose()}}const xy=[];class Ty{constructor(e,t,r,s,i,n){this.renderer=e,this.nodes=t,this.geometries=r,this.pipelines=s,this.bindings=i,this.info=n,this.chainMaps={}}get(e,t,r,s,i,n,a,o){const u=this.getChainMap(o);xy[0]=e,xy[1]=t,xy[2]=n,xy[3]=i;let l=u.get(xy);return void 0===l?(l=this.createRenderObject(this.nodes,this.geometries,this.renderer,e,t,r,s,i,n,a,o),u.set(xy,l)):(l.camera=s,l.updateClipping(a),l.needsGeometryUpdate&&l.setGeometry(e.geometry),(l.version!==t.version||l.needsUpdate)&&(l.initialCacheKey!==l.getCacheKey()?(l.dispose(),l=this.get(e,t,r,s,i,n,a,o)):l.version=t.version)),xy[0]=null,xy[1]=null,xy[2]=null,xy[3]=null,l}getChainMap(e="default"){return this.chainMaps[e]||(this.chainMaps[e]=new fy)}dispose(){this.chainMaps={}}createRenderObject(e,t,r,s,i,n,a,o,u,l,d){const c=this.getChainMap(d),h=new by(e,t,r,s,i,n,a,o,u,l);return h.onDispose=()=>{this.pipelines.delete(h),this.bindings.deleteForRender(h),this.nodes.delete(h),c.delete(h.getChainArray())},h}}class _y{constructor(){this.data=new WeakMap}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}delete(e){let t=null;return this.data.has(e)&&(t=this.data.get(e),this.data.delete(e)),t}has(e){return this.data.has(e)}dispose(){this.data=new WeakMap}}const vy=1,Ny=2,Sy=3,Ry=4,Ey=16;class Ay extends _y{constructor(e){super(),this.backend=e}delete(e){const t=super.delete(e);return null!==t&&this.backend.destroyAttribute(e),t}update(e,t){const r=this.get(e);if(void 0===r.version)t===vy?this.backend.createAttribute(e):t===Ny?this.backend.createIndexAttribute(e):t===Sy?this.backend.createStorageAttribute(e):t===Ry&&this.backend.createIndirectStorageAttribute(e),r.version=this._getBufferAttribute(e).version;else{const t=this._getBufferAttribute(e);(r.version=65535?Ie:Oe)(t,1);return i.version=wy(e),i.__id=Cy(e),i}class By extends _y{constructor(e,t){super(),this.attributes=e,this.info=t,this.wireframes=new WeakMap,this.attributeCall=new WeakMap,this._geometryDisposeListeners=new Map}has(e){const t=e.geometry;return super.has(t)&&!0===this.get(t).initialized}updateForRender(e){!1===this.has(e)&&this.initGeometry(e),this.updateAttributes(e)}initGeometry(e){const t=e.geometry;this.get(t).initialized=!0,this.info.memory.geometries++;const r=()=>{this.info.memory.geometries--;const s=t.index,i=e.getAttributes();null!==s&&this.attributes.delete(s);for(const e of i)this.attributes.delete(e);const n=this.wireframes.get(t);void 0!==n&&this.attributes.delete(n),t.removeEventListener("dispose",r),this._geometryDisposeListeners.delete(t)};t.addEventListener("dispose",r),this._geometryDisposeListeners.set(t,r)}updateAttributes(e){const t=e.getAttributes();for(const e of t)e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute?this.updateAttribute(e,Sy):this.updateAttribute(e,vy);const r=this.getIndex(e);null!==r&&this.updateAttribute(r,Ny);const s=e.geometry.indirect;null!==s&&this.updateAttribute(s,Ry)}updateAttribute(e,t){const r=this.info.render.calls;e.isInterleavedBufferAttribute?void 0===this.attributeCall.get(e)?(this.attributes.update(e,t),this.attributeCall.set(e,r)):this.attributeCall.get(e.data)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e.data,r),this.attributeCall.set(e,r)):this.attributeCall.get(e)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e,r))}getIndirect(e){return e.geometry.indirect}getIndirectOffset(e){return e.geometry.indirectOffset}getIndex(e){const{geometry:t,material:r}=e;let s=t.index;if(!0===r.wireframe){const e=this.wireframes;let r=e.get(t);void 0===r?(r=My(t),e.set(t,r)):r.version===wy(t)&&r.__id===Cy(t)||(this.attributes.delete(r),r=My(t),e.set(t,r)),s=r}return s}dispose(){for(const[e,t]of this._geometryDisposeListeners.entries())e.removeEventListener("dispose",t);this._geometryDisposeListeners.clear()}}class Fy{constructor(){this.autoReset=!0,this.frame=0,this.calls=0,this.render={calls:0,frameCalls:0,drawCalls:0,triangles:0,points:0,lines:0,timestamp:0},this.compute={calls:0,frameCalls:0,timestamp:0},this.memory={geometries:0,textures:0}}update(e,t,r){this.render.drawCalls++,e.isMesh||e.isSprite?this.render.triangles+=r*(t/3):e.isPoints?this.render.points+=r*t:e.isLineSegments?this.render.lines+=r*(t/2):e.isLine?this.render.lines+=r*(t-1):o("WebGPUInfo: Unknown object type.")}reset(){this.render.drawCalls=0,this.render.frameCalls=0,this.compute.frameCalls=0,this.render.triangles=0,this.render.points=0,this.render.lines=0}dispose(){this.reset(),this.calls=0,this.render.calls=0,this.compute.calls=0,this.render.timestamp=0,this.compute.timestamp=0,this.memory.geometries=0,this.memory.textures=0}}class Ly{constructor(e){this.cacheKey=e,this.usedTimes=0}}class Py extends Ly{constructor(e,t,r){super(e),this.vertexProgram=t,this.fragmentProgram=r}}class Dy extends Ly{constructor(e,t){super(e),this.computeProgram=t,this.isComputePipeline=!0}}let Uy=0;class Iy{constructor(e,t,r,s=null,i=null){this.id=Uy++,this.code=e,this.stage=t,this.name=r,this.transforms=s,this.attributes=i,this.usedTimes=0}}class Oy extends _y{constructor(e,t){super(),this.backend=e,this.nodes=t,this.bindings=null,this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}getForCompute(e,t){const{backend:r}=this,s=this.get(e);if(this._needsComputeUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.computeProgram.usedTimes--);const n=this.nodes.getForCompute(e);let a=this.programs.compute.get(n.computeShader);void 0===a&&(i&&0===i.computeProgram.usedTimes&&this._releaseProgram(i.computeProgram),a=new Iy(n.computeShader,"compute",e.name,n.transforms,n.nodeAttributes),this.programs.compute.set(n.computeShader,a),r.createProgram(a));const o=this._getComputeCacheKey(e,a);let u=this.caches.get(o);void 0===u&&(i&&0===i.usedTimes&&this._releasePipeline(i),u=this._getComputePipeline(e,a,o,t)),u.usedTimes++,a.usedTimes++,s.version=e.version,s.pipeline=u}return s.pipeline}getForRender(e,t=null){const{backend:r}=this,s=this.get(e);if(this._needsRenderUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.vertexProgram.usedTimes--,i.fragmentProgram.usedTimes--);const n=e.getNodeBuilderState(),a=e.material?e.material.name:"";let o=this.programs.vertex.get(n.vertexShader);void 0===o&&(i&&0===i.vertexProgram.usedTimes&&this._releaseProgram(i.vertexProgram),o=new Iy(n.vertexShader,"vertex",a),this.programs.vertex.set(n.vertexShader,o),r.createProgram(o));let u=this.programs.fragment.get(n.fragmentShader);void 0===u&&(i&&0===i.fragmentProgram.usedTimes&&this._releaseProgram(i.fragmentProgram),u=new Iy(n.fragmentShader,"fragment",a),this.programs.fragment.set(n.fragmentShader,u),r.createProgram(u));const l=this._getRenderCacheKey(e,o,u);let d=this.caches.get(l);void 0===d?(i&&0===i.usedTimes&&this._releasePipeline(i),d=this._getRenderPipeline(e,o,u,l,t)):e.pipeline=d,d.usedTimes++,o.usedTimes++,u.usedTimes++,s.pipeline=d}return s.pipeline}isReady(e){const t=this.get(e).pipeline;if(void 0===t)return!1;const r=this.backend.get(t);return void 0!==r.pipeline&&null!==r.pipeline}delete(e){const t=this.get(e).pipeline;return t&&(t.usedTimes--,0===t.usedTimes&&this._releasePipeline(t),t.isComputePipeline?(t.computeProgram.usedTimes--,0===t.computeProgram.usedTimes&&this._releaseProgram(t.computeProgram)):(t.fragmentProgram.usedTimes--,t.vertexProgram.usedTimes--,0===t.vertexProgram.usedTimes&&this._releaseProgram(t.vertexProgram),0===t.fragmentProgram.usedTimes&&this._releaseProgram(t.fragmentProgram))),super.delete(e)}dispose(){super.dispose(),this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}updateForRender(e){this.getForRender(e)}_getComputePipeline(e,t,r,s){r=r||this._getComputeCacheKey(e,t);let i=this.caches.get(r);return void 0===i&&(i=new Dy(r,t),this.caches.set(r,i),this.backend.createComputePipeline(i,s)),i}_getRenderPipeline(e,t,r,s,i){s=s||this._getRenderCacheKey(e,t,r);let n=this.caches.get(s);return void 0===n&&(n=new Py(s,t,r),this.caches.set(s,n),e.pipeline=n,this.backend.createRenderPipeline(e,i)),n}_getComputeCacheKey(e,t){return e.id+","+t.id}_getRenderCacheKey(e,t,r){return t.id+","+r.id+","+this.backend.getRenderCacheKey(e)}_releasePipeline(e){this.caches.delete(e.cacheKey)}_releaseProgram(e){const t=e.code,r=e.stage;this.programs[r].delete(t)}_needsComputeUpdate(e){const t=this.get(e);return void 0===t.pipeline||t.version!==e.version}_needsRenderUpdate(e){return void 0===this.get(e).pipeline||this.backend.needsRenderUpdate(e)}}class Vy extends _y{constructor(e,t,r,s,i,n){super(),this.backend=e,this.textures=r,this.pipelines=i,this.attributes=s,this.nodes=t,this.info=n,this.pipelines.bindings=this}getForRender(e){const t=e.getBindings();for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}getForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}updateForCompute(e){this._updateBindings(this.getForCompute(e))}updateForRender(e){this._updateBindings(this.getForRender(e))}deleteForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}deleteForRender(e){const t=e.getBindings();for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}_updateBindings(e){for(const t of e)this._update(t,e)}_init(e){for(const t of e.bindings)if(t.isSampledTexture)this.textures.updateTexture(t.texture);else if(t.isSampler)this.textures.updateSampler(t.texture);else if(t.isStorageBuffer){const e=t.attribute,r=e.isIndirectStorageBufferAttribute?Ry:Sy;this.attributes.update(e,r)}}_update(e,t){const{backend:r}=this;let s=!1,i=!0,n=0,a=0;for(const t of e.bindings){if(!1!==this.nodes.updateGroup(t)){if(t.isStorageBuffer){const e=t.attribute,i=e.isIndirectStorageBufferAttribute?Ry:Sy,n=r.get(t);this.attributes.update(e,i),n.attribute!==e&&(n.attribute=e,s=!0)}if(t.isUniformBuffer){t.update()&&r.updateBinding(t)}else if(t.isSampledTexture){const o=t.update(),u=t.texture,l=this.textures.get(u);o&&(this.textures.updateTexture(u),t.generation!==l.generation&&(t.generation=l.generation,s=!0),l.bindGroups.add(e));if(void 0!==r.get(u).externalTexture||l.isDefaultTexture?i=!1:(n=10*n+u.id,a+=u.version),!0===u.isStorageTexture&&!0===u.mipmapsAutoUpdate){const e=this.get(u);!0===t.store?e.needsMipmap=!0:this.textures.needsMipmaps(u)&&!0===e.needsMipmap&&(this.backend.generateMipmaps(u),e.needsMipmap=!1)}}else if(t.isSampler){if(t.update()){const e=this.textures.updateSampler(t.texture);t.samplerKey!==e&&(t.samplerKey=e,s=!0)}}t.isBuffer&&t.updateRanges.length>0&&t.clearUpdateRanges()}}!0===s&&this.backend.updateBindings(e,t,i?n:0,a)}}function ky(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?e.z-t.z:e.id-t.id}function Gy(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function $y(e){return(e.transmission>0||e.transmissionNode&&e.transmissionNode.isNode)&&e.side===P&&!1===e.forceSinglePass}class zy{constructor(e,t,r){this.renderItems=[],this.renderItemsIndex=0,this.opaque=[],this.transparentDoublePass=[],this.transparent=[],this.bundles=[],this.lightsNode=e.getNode(t,r),this.lightsArray=[],this.scene=t,this.camera=r,this.occlusionQueryCount=0}begin(){return this.renderItemsIndex=0,this.opaque.length=0,this.transparentDoublePass.length=0,this.transparent.length=0,this.bundles.length=0,this.lightsArray.length=0,this.occlusionQueryCount=0,this}getNextRenderItem(e,t,r,s,i,n,a){let o=this.renderItems[this.renderItemsIndex];return void 0===o?(o={id:e.id,object:e,geometry:t,material:r,groupOrder:s,renderOrder:e.renderOrder,z:i,group:n,clippingContext:a},this.renderItems[this.renderItemsIndex]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.groupOrder=s,o.renderOrder=e.renderOrder,o.z=i,o.group=n,o.clippingContext=a),this.renderItemsIndex++,o}push(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===e.occlusionTest&&this.occlusionQueryCount++,!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.push(o),this.transparent.push(o)):this.opaque.push(o)}unshift(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.unshift(o),this.transparent.unshift(o)):this.opaque.unshift(o)}pushBundle(e){this.bundles.push(e)}pushLight(e){this.lightsArray.push(e)}sort(e,t){this.opaque.length>1&&this.opaque.sort(e||ky),this.transparentDoublePass.length>1&&this.transparentDoublePass.sort(t||Gy),this.transparent.length>1&&this.transparent.sort(t||Gy)}finish(){this.lightsNode.setLights(this.lightsArray);for(let e=this.renderItemsIndex,t=this.renderItems.length;e>t,u=a.height>>t;let l=e.depthTexture||i[t];const d=!0===e.depthBuffer||!0===e.stencilBuffer;let c=!1;void 0===l&&d&&(l=new J,l.format=e.stencilBuffer?Ve:ke,l.type=e.stencilBuffer?Ge:S,l.image.width=o,l.image.height=u,l.image.depth=a.depth,l.renderTarget=e,l.isArrayTexture=!0===e.multiview&&a.depth>1,i[t]=l),r.width===a.width&&a.height===r.height||(c=!0,l&&(l.needsUpdate=!0,l.image.width=o,l.image.height=u,l.image.depth=l.isArrayTexture?l.image.depth:1)),r.width=a.width,r.height=a.height,r.textures=n,r.depthTexture=l||null,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,r.renderTarget=e,r.sampleCount!==s&&(c=!0,l&&(l.needsUpdate=!0),r.sampleCount=s);const h={sampleCount:s};if(!0!==e.isXRRenderTarget){for(let e=0;e{this._destroyRenderTarget(e)},e.addEventListener("dispose",r.onDispose))}updateTexture(e,t={}){const r=this.get(e);if(!0===r.initialized&&r.version===e.version)return;const s=e.isRenderTargetTexture||e.isDepthTexture||e.isFramebufferTexture,i=this.backend;if(s&&!0===r.initialized&&i.destroyTexture(e),e.isFramebufferTexture){const t=this.renderer.getRenderTarget();e.type=t?t.texture.type:$e}const{width:n,height:a,depth:o}=this.getSize(e);if(t.width=n,t.height=a,t.depth=o,t.needsMipmaps=this.needsMipmaps(e),t.levels=t.needsMipmaps?this.getMipLevels(e,n,a):1,e.isCubeTexture&&e.mipmaps.length>0&&t.levels++,s||!0===e.isStorageTexture||!0===e.isExternalTexture)i.createTexture(e,t),r.generation=e.version;else if(e.version>0){const s=e.image;if(void 0===s)d("Renderer: Texture marked for update but image is undefined.");else if(!1===s.complete)d("Renderer: Texture marked for update but image is incomplete.");else{if(e.images){const r=[];for(const t of e.images)r.push(t);t.images=r}else t.image=s;void 0!==r.isDefaultTexture&&!0!==r.isDefaultTexture||(i.createTexture(e,t),r.isDefaultTexture=!1,r.generation=e.version),!0===e.source.dataReady&&i.updateTexture(e,t);const n=!0===e.isStorageTexture&&!1===e.mipmapsAutoUpdate;t.needsMipmaps&&0===e.mipmaps.length&&!n&&i.generateMipmaps(e),e.onUpdate&&e.onUpdate(e)}}else i.createDefaultTexture(e),r.isDefaultTexture=!0,r.generation=e.version;!0!==r.initialized&&(r.initialized=!0,r.generation=e.version,r.bindGroups=new Set,this.info.memory.textures++,e.isVideoTexture&&!0===p.enabled&&p.getTransfer(e.colorSpace)!==g&&d("WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace."),r.onDispose=()=>{this._destroyTexture(e)},e.addEventListener("dispose",r.onDispose)),r.version=e.version}updateSampler(e){return this.backend.updateSampler(e)}getSize(e,t=Qy){let r=e.images?e.images[0]:e.image;return r?(void 0!==r.image&&(r=r.image),"undefined"!=typeof HTMLVideoElement&&r instanceof HTMLVideoElement?(t.width=r.videoWidth||1,t.height=r.videoHeight||1,t.depth=1):"undefined"!=typeof VideoFrame&&r instanceof VideoFrame?(t.width=r.displayWidth||1,t.height=r.displayHeight||1,t.depth=1):(t.width=r.width||1,t.height=r.height||1,t.depth=e.isCubeTexture?6:r.depth||1)):t.width=t.height=t.depth=1,t}getMipLevels(e,t,r){let s;return s=e.mipmaps.length>0?e.mipmaps.length:!0===e.isCompressedTexture?1:Math.floor(Math.log2(Math.max(t,r)))+1,s}needsMipmaps(e){return!0===e.generateMipmaps||e.mipmaps.length>0}_destroyRenderTarget(e){if(!0===this.has(e)){const t=this.get(e),r=t.textures,s=t.depthTexture;e.removeEventListener("dispose",t.onDispose);for(let e=0;e=2)for(let r=0;r{if(this._currentNode=t,!t.isVarNode||!t.isIntent(e)||!0===t.isAssign(e))if("setup"===s)t.build(e);else if("analyze"===s)t.build(e,this);else if("generate"===s){const r=e.getDataFromNode(t,"any").stages,s=r&&r[e.shaderStage];if(t.isVarNode&&s&&1===s.length&&s[0]&&s[0].isStackNode)return;t.build(e,"void")}},n=[...this.nodes];for(const e of n)i(e);this._currentNode=null;const a=this.nodes.filter(e=>-1===n.indexOf(e));for(const e of a)i(e);let o;return o=this.hasOutput(e)?this.outputNode.build(e,...t):super.build(e,...t),cn(r),e.removeActiveStack(this),o}}const tb=nn(eb).setParameterLength(0,1);class rb extends di{static get type(){return"StructTypeNode"}constructor(e,t=null){var r;super("struct"),this.membersLayout=(r=e,Object.entries(r).map(([e,t])=>"string"==typeof t?{name:e,type:t,atomic:!1}:{name:e,type:t.type,atomic:t.atomic||!1})),this.name=t,this.isStructLayoutNode=!0}getLength(){const e=Float32Array.BYTES_PER_ELEMENT;let t=1,r=0;for(const s of this.membersLayout){const i=s.type,n=qs(i),a=js(i)/e;t=Math.max(t,a);const o=r%t%a;0!==o&&(r+=a-o),r+=n}return Math.ceil(r/t)*t}getMemberType(e,t){const r=this.membersLayout.find(e=>e.name===t);return r?r.type:"void"}getNodeType(e){return e.getStructTypeFromNode(this,this.membersLayout,this.name).name}setup(e){e.getStructTypeFromNode(this,this.membersLayout,this.name),e.addInclude(this)}generate(e){return this.getNodeType(e)}}class sb extends di{static get type(){return"StructNode"}constructor(e,t){super("vec3"),this.structTypeNode=e,this.values=t,this.isStructNode=!0}getNodeType(e){return this.structTypeNode.getNodeType(e)}getMemberType(e,t){return this.structTypeNode.getMemberType(e,t)}_getChildren(){const e=super._getChildren(),t=e.find(e=>e.childNode===this.structTypeNode);return e.splice(e.indexOf(t),1),e.push(t),e}generate(e){const t=e.getVarFromNode(this),r=t.type,s=e.getPropertyName(t);return e.addLineFlowCode(`${s} = ${e.generateStruct(r,this.structTypeNode.membersLayout,this.values)}`,this),t.name}}class ib extends di{static get type(){return"OutputStructNode"}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}getNodeType(){return"OutputType"}generate(e){const t=e.getDataFromNode(this);if(void 0===t.membersLayout){const r=this.members,s=[];for(let t=0;tnew hb(e,"uint","float"),mb={};class fb extends io{static get type(){return"BitcountNode"}constructor(e,t){super(e,t),this.isBitcountNode=!0}_resolveElementType(e,t,r){"int"===r?t.assign(pb(e,"uint")):t.assign(e)}_returnDataNode(e){switch(e){case"uint":return bn;case"int":return yn;case"uvec2":return vn;case"uvec3":return En;case"uvec4":return Mn;case"ivec2":return _n;case"ivec3":return Rn;case"ivec4":return Cn}}_createTrailingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t);const i=fn(s.bitAnd(Do(s))),n=gb(i).shiftRight(23).sub(127);return r(n)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createLeadingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{pn(e.equal(bn(0)),()=>bn(32));const s=bn(0),i=bn(0);return this._resolveElementType(e,s,t),pn(s.shiftRight(16).equal(0),()=>{i.addAssign(16),s.shiftLeftAssign(16)}),pn(s.shiftRight(24).equal(0),()=>{i.addAssign(8),s.shiftLeftAssign(8)}),pn(s.shiftRight(28).equal(0),()=>{i.addAssign(4),s.shiftLeftAssign(4)}),pn(s.shiftRight(30).equal(0),()=>{i.addAssign(2),s.shiftLeftAssign(2)}),pn(s.shiftRight(31).equal(0),()=>{i.addAssign(1)}),r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createOneBitsBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t),s.assign(s.sub(s.shiftRight(bn(1)).bitAnd(bn(1431655765)))),s.assign(s.bitAnd(bn(858993459)).add(s.shiftRight(bn(2)).bitAnd(bn(858993459))));const i=s.add(s.shiftRight(bn(4))).bitAnd(bn(252645135)).mul(bn(16843009)).shiftRight(bn(24));return r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createMainLayout(e,t,r,s){const i=this._returnDataNode(t);return dn(([e])=>{if(1===r)return i(s(e));{const t=i(0),n=["x","y","z","w"];for(let i=0;id(r))()}}fb.COUNT_TRAILING_ZEROS="countTrailingZeros",fb.COUNT_LEADING_ZEROS="countLeadingZeros",fb.COUNT_ONE_BITS="countOneBits";const yb=on(fb,fb.COUNT_TRAILING_ZEROS).setParameterLength(1),bb=on(fb,fb.COUNT_LEADING_ZEROS).setParameterLength(1),xb=on(fb,fb.COUNT_ONE_BITS).setParameterLength(1),Tb=dn(([e])=>{const t=e.toUint().mul(747796405).add(2891336453),r=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return r.shiftRight(22).bitXor(r).toFloat().mul(1/2**32)}),_b=(e,t)=>eu(Pa(4,e.mul(La(1,e))),t);class vb extends pi{static get type(){return"PackFloatNode"}constructor(e,t){super(),this.vectorNode=t,this.encoding=e,this.isPackFloatNode=!0}getNodeType(){return"uint"}generate(e){const t=this.vectorNode.getNodeType(e);return`${e.getFloatPackingMethod(this.encoding)}(${this.vectorNode.build(e,t)})`}}const Nb=on(vb,"snorm").setParameterLength(1),Sb=on(vb,"unorm").setParameterLength(1),Rb=on(vb,"float16").setParameterLength(1);class Eb extends pi{static get type(){return"UnpackFloatNode"}constructor(e,t){super(),this.uintNode=t,this.encoding=e,this.isUnpackFloatNode=!0}getNodeType(){return"vec2"}generate(e){const t=this.uintNode.getNodeType(e);return`${e.getFloatUnpackingMethod(this.encoding)}(${this.uintNode.build(e,t)})`}}const Ab=on(Eb,"snorm").setParameterLength(1),wb=on(Eb,"unorm").setParameterLength(1),Cb=on(Eb,"float16").setParameterLength(1),Mb=dn(([e])=>e.fract().sub(.5).abs()).setLayout({name:"tri",type:"float",inputs:[{name:"x",type:"float"}]}),Bb=dn(([e])=>Sn(Mb(e.z.add(Mb(e.y.mul(1)))),Mb(e.z.add(Mb(e.x.mul(1)))),Mb(e.y.add(Mb(e.x.mul(1)))))).setLayout({name:"tri3",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),Fb=dn(([e,t,r])=>{const s=Sn(e).toVar(),i=fn(1.4).toVar(),n=fn(0).toVar(),a=Sn(s).toVar();return Ep({start:fn(0),end:fn(3),type:"float",condition:"<="},()=>{const e=Sn(Bb(a.mul(2))).toVar();s.addAssign(e.add(r.mul(fn(.1).mul(t)))),a.mulAssign(1.8),i.mulAssign(1.5),s.mulAssign(1.2);const o=fn(Mb(s.z.add(Mb(s.x.add(Mb(s.y)))))).toVar();n.addAssign(o.div(i)),a.addAssign(.14)}),n}).setLayout({name:"triNoise3D",type:"float",inputs:[{name:"position",type:"vec3"},{name:"speed",type:"float"},{name:"time",type:"float"}]});class Lb extends di{static get type(){return"FunctionOverloadingNode"}constructor(e=[],...t){super(),this.functionNodes=e,this.parametersNodes=t,this._candidateFn=null,this.global=!0}getNodeType(e){return this.getCandidateFn(e).shaderNode.layout.type}getCandidateFn(e){const t=this.parametersNodes;let r=this._candidateFn;if(null===r){let s=null,i=-1;for(const r of this.functionNodes){const n=r.shaderNode.layout;if(null===n)throw new Error("FunctionOverloadingNode: FunctionNode must be a layout.");const a=n.inputs;if(t.length===a.length){let n=0;for(let r=0;ri&&(s=r,i=n)}}this._candidateFn=r=s}return r}setup(e){return this.getCandidateFn(e)(...this.parametersNodes)}}const Pb=nn(Lb),Db=e=>(...t)=>Pb(e,...t),Ub=Na(0).setGroup(Ta).onRenderUpdate(e=>e.time),Ib=Na(0).setGroup(Ta).onRenderUpdate(e=>e.deltaTime),Ob=Na(0,"uint").setGroup(Ta).onRenderUpdate(e=>e.frameId);const Vb=dn(([e,t,r=Tn(.5)])=>ey(e.sub(r),t).add(r)),kb=dn(([e,t,r=Tn(.5)])=>{const s=e.sub(r),i=s.dot(s),n=i.mul(i).mul(t);return e.add(s.mul(n))}),Gb=dn(({position:e=null,horizontal:t=!0,vertical:r=!1})=>{let s;null!==e?(s=Id.toVar(),s[3][0]=e.x,s[3][1]=e.y,s[3][2]=e.z):s=Id;const i=vd.mul(s);return Yi(t)&&(i[0][0]=Id[0].length(),i[0][1]=0,i[0][2]=0),Yi(r)&&(i[1][0]=0,i[1][1]=Id[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Td.mul(i).mul(Qd)}),$b=dn(([e=null])=>{const t=rg();return rg(qp(e)).sub(t).lessThan(0).select(Kl,e)}),zb=dn(([e,t=Al(),r=fn(0)])=>{const s=e.x,i=e.y,n=r.mod(s.mul(i)).floor(),a=n.mod(s),o=i.sub(n.add(1).div(s).ceil()),u=e.reciprocal(),l=Tn(a,o);return t.add(l).mul(u)}),Wb=dn(([e,t=null,r=null,s=fn(1),i=Qd,n=oc])=>{let a=n.abs().normalize();a=a.div(a.dot(Sn(1)));const o=i.yz.mul(s),u=i.zx.mul(s),l=i.xy.mul(s),d=e.value,c=null!==t?t.value:d,h=null!==r?r.value:d,p=Ul(d,o).mul(a.x),g=Ul(c,u).mul(a.y),m=Ul(h,l).mul(a.z);return Fa(p,g,m)}),Hb=new Xe,qb=new r,jb=new r,Xb=new r,Kb=new a,Qb=new r(0,0,-1),Yb=new s,Zb=new r,Jb=new r,ex=new s,tx=new t,rx=new ae,sx=Kl.flipX();rx.depthTexture=new J(1,1);let ix=!1;class nx extends Pl{static get type(){return"ReflectorNode"}constructor(e={}){super(e.defaultTexture||rx.texture,sx),this._reflectorBaseNode=e.reflector||new ax(this,e),this._depthNode=null,this.setUpdateMatrix(!1)}get reflector(){return this._reflectorBaseNode}get target(){return this._reflectorBaseNode.target}getDepthNode(){if(null===this._depthNode){if(!0!==this._reflectorBaseNode.depth)throw new Error("THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ");this._depthNode=new nx({defaultTexture:rx.depthTexture,reflector:this._reflectorBaseNode})}return this._depthNode}setup(e){return e.object.isQuadMesh||this._reflectorBaseNode.build(e),super.setup(e)}clone(){const e=new this.constructor(this.reflectorNode);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e._reflectorBaseNode=this._reflectorBaseNode,e}dispose(){super.dispose(),this._reflectorBaseNode.dispose()}}class ax extends di{static get type(){return"ReflectorBaseNode"}constructor(e,t={}){super();const{target:r=new Ke,resolutionScale:s=1,generateMipmaps:i=!1,bounces:n=!0,depth:a=!1,samples:o=0}=t;this.textureNode=e,this.target=r,this.resolutionScale=s,void 0!==t.resolution&&(v('ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".'),this.resolutionScale=t.resolution),this.generateMipmaps=i,this.bounces=n,this.depth=a,this.samples=o,this.updateBeforeType=n?ti.RENDER:ti.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new Map,this.forceUpdate=!1,this.hasOutput=!1}_updateResolution(e,t){const r=this.resolutionScale;t.getDrawingBufferSize(tx),e.setSize(Math.round(tx.width*r),Math.round(tx.height*r))}setup(e){return this._updateResolution(rx,e.renderer),super.setup(e)}dispose(){super.dispose();for(const e of this.renderTargets.values())e.dispose()}getVirtualCamera(e){let t=this.virtualCameras.get(e);return void 0===t&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return void 0===t&&(t=new ae(0,0,{type:_e,samples:this.samples}),!0===this.generateMipmaps&&(t.texture.minFilter=Qe,t.texture.generateMipmaps=!0),!0===this.depth&&(t.depthTexture=new J),this.renderTargets.set(e,t)),t}updateBefore(e){if(!1===this.bounces&&ix)return!1;ix=!0;const{scene:t,camera:r,renderer:s,material:i}=e,{target:n}=this,a=this.getVirtualCamera(r),o=this.getRenderTarget(a);s.getDrawingBufferSize(tx),this._updateResolution(o,s),jb.setFromMatrixPosition(n.matrixWorld),Xb.setFromMatrixPosition(r.matrixWorld),Kb.extractRotation(n.matrixWorld),qb.set(0,0,1),qb.applyMatrix4(Kb),Zb.subVectors(jb,Xb);let u=!1;if(!0===Zb.dot(qb)>0&&!1===this.forceUpdate){if(!1===this.hasOutput)return void(ix=!1);u=!0}Zb.reflect(qb).negate(),Zb.add(jb),Kb.extractRotation(r.matrixWorld),Qb.set(0,0,-1),Qb.applyMatrix4(Kb),Qb.add(Xb),Jb.subVectors(jb,Qb),Jb.reflect(qb).negate(),Jb.add(jb),a.coordinateSystem=r.coordinateSystem,a.position.copy(Zb),a.up.set(0,1,0),a.up.applyMatrix4(Kb),a.up.reflect(qb),a.lookAt(Jb),a.near=r.near,a.far=r.far,a.updateMatrixWorld(),a.projectionMatrix.copy(r.projectionMatrix),Hb.setFromNormalAndCoplanarPoint(qb,jb),Hb.applyMatrix4(a.matrixWorldInverse),Yb.set(Hb.normal.x,Hb.normal.y,Hb.normal.z,Hb.constant);const l=a.projectionMatrix;ex.x=(Math.sign(Yb.x)+l.elements[8])/l.elements[0],ex.y=(Math.sign(Yb.y)+l.elements[9])/l.elements[5],ex.z=-1,ex.w=(1+l.elements[10])/l.elements[14],Yb.multiplyScalar(1/Yb.dot(ex));l.elements[2]=Yb.x,l.elements[6]=Yb.y,l.elements[10]=s.coordinateSystem===h?Yb.z-0:Yb.z+1-0,l.elements[14]=Yb.w,this.textureNode.value=o.texture,!0===this.depth&&(this.textureNode.getDepthNode().value=o.depthTexture),i.visible=!1;const d=s.getRenderTarget(),c=s.getMRT(),p=s.autoClear;s.setMRT(null),s.setRenderTarget(o),s.autoClear=!0;const g=t.name;t.name=(t.name||"Scene")+" [ Reflector ]",u?(s.clear(),this.hasOutput=!1):(s.render(t,a),this.hasOutput=!0),t.name=g,s.setMRT(c),s.setRenderTarget(d),s.autoClear=p,i.visible=!0,ix=!1,this.forceUpdate=!1}get resolution(){return v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale}set resolution(e){v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale=e}}const ox=new Se(-1,1,1,-1,0,1);class ux extends Ne{constructor(e=!1){super();const t=!1===e?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute("position",new Ye([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Ye(t,2))}}const lx=new ux;class dx extends ue{constructor(e=null){super(lx,e),this.camera=ox,this.isQuadMesh=!0}async renderAsync(e){v('QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await e.init(),e.render(this,ox)}render(e){e.render(this,ox)}}const cx=new t;class hx extends Pl{static get type(){return"RTTNode"}constructor(e,t=null,r=null,s={type:_e}){const i=new ae(t,r,s);super(i.texture,Al()),this.isRTTNode=!0,this.node=e,this.width=t,this.height=r,this.pixelRatio=1,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this._rttNode=null,this._quadMesh=new dx(new yg),this.updateBeforeType=ti.RENDER}get autoResize(){return null===this.width}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name="RTT",this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;const r=e*this.pixelRatio,s=t*this.pixelRatio;this.renderTarget.setSize(r,s),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(!1===this.textureNeedsUpdate&&!1===this.autoUpdate)return;if(this.textureNeedsUpdate=!1,!0===this.autoResize){const t=e.getPixelRatio(),r=e.getSize(cx),s=Math.floor(r.width*t),i=Math.floor(r.height*t);s===this.renderTarget.width&&i===this.renderTarget.height||(this.renderTarget.setSize(s,i),this.textureNeedsUpdate=!0)}let t="RTT";this.node.name&&(t=this.node.name+" [ "+t+" ]"),this._quadMesh.material.fragmentNode=this._rttNode,this._quadMesh.name=t;const r=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(r)}clone(){const e=new Pl(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}}const px=(e,...t)=>new hx(en(e),...t),gx=dn(([e,t,r],s)=>{let i;s.renderer.coordinateSystem===h?(e=Tn(e.x,e.y.oneMinus()).mul(2).sub(1),i=wn(Sn(e,t),1)):i=wn(Sn(e.x,e.y.oneMinus(),t).mul(2).sub(1),1);const n=wn(r.mul(i));return n.xyz.div(n.w)}),mx=dn(([e,t])=>{const r=t.mul(wn(e,1)),s=r.xy.div(r.w).mul(.5).add(.5).toVar();return Tn(s.x,s.y.oneMinus())}),fx=dn(([e,t,r])=>{const s=Cl(Il(t)),i=_n(e.mul(s)).toVar(),n=Il(t,i).toVar(),a=Il(t,i.sub(_n(2,0))).toVar(),o=Il(t,i.sub(_n(1,0))).toVar(),u=Il(t,i.add(_n(1,0))).toVar(),l=Il(t,i.add(_n(2,0))).toVar(),d=Il(t,i.add(_n(0,2))).toVar(),c=Il(t,i.add(_n(0,1))).toVar(),h=Il(t,i.sub(_n(0,1))).toVar(),p=Il(t,i.sub(_n(0,2))).toVar(),g=Fo(La(fn(2).mul(o).sub(a),n)).toVar(),m=Fo(La(fn(2).mul(u).sub(l),n)).toVar(),f=Fo(La(fn(2).mul(c).sub(d),n)).toVar(),y=Fo(La(fn(2).mul(h).sub(p),n)).toVar(),b=gx(e,n,r).toVar(),x=g.lessThan(m).select(b.sub(gx(e.sub(Tn(fn(1).div(s.x),0)),o,r)),b.negate().add(gx(e.add(Tn(fn(1).div(s.x),0)),u,r))),T=f.lessThan(y).select(b.sub(gx(e.add(Tn(0,fn(1).div(s.y))),c,r)),b.negate().add(gx(e.sub(Tn(0,fn(1).div(s.y))),h,r)));return So(Jo(x,T))}),yx=dn(([e])=>Ro(fn(52.9829189).mul(Ro(Zo(e,Tn(.06711056,.00583715)))))).setLayout({name:"interleavedGradientNoise",type:"float",inputs:[{name:"position",type:"vec2"}]}),bx=dn(([e,t,r])=>{const s=fn(2.399963229728653),i=To(fn(e).add(.5).div(fn(t))),n=fn(e).mul(s).add(r);return Tn(Ao(n),Eo(n)).mul(i)}).setLayout({name:"vogelDiskSample",type:"vec2",inputs:[{name:"sampleIndex",type:"int"},{name:"samplesCount",type:"int"},{name:"phi",type:"float"}]});class xx extends di{static get type(){return"SampleNode"}constructor(e,t=null){super(),this.callback=e,this.uvNode=t,this.isSampleNode=!0}setup(){return this.sample(Al())}sample(e){return this.callback(e)}}class Tx extends di{static get type(){return"EventNode"}constructor(e,t){super("void"),this.eventType=e,this.callback=t,e===Tx.OBJECT?this.updateType=ti.OBJECT:e===Tx.MATERIAL?this.updateType=ti.RENDER:e===Tx.BEFORE_OBJECT?this.updateBeforeType=ti.OBJECT:e===Tx.BEFORE_MATERIAL&&(this.updateBeforeType=ti.RENDER)}update(e){this.callback(e)}updateBefore(e){this.callback(e)}}Tx.OBJECT="object",Tx.MATERIAL="material",Tx.BEFORE_OBJECT="beforeObject",Tx.BEFORE_MATERIAL="beforeMaterial";const _x=(e,t)=>new Tx(e,t).toStack();class vx extends j{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageInstancedBufferAttribute=!0}}class Nx extends Ce{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageBufferAttribute=!0}}class Sx extends di{static get type(){return"PointUVNode"}constructor(){super("vec2"),this.isPointUVNode=!0}generate(){return"vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )"}}const Rx=an(Sx),Ex=new D,Ax=new a,wx=Na(0).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundBlurriness),Cx=Na(1).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundIntensity),Mx=Na(new a).setGroup(Ta).onRenderUpdate(({scene:e})=>{const t=e.background;return null!==t&&t.isTexture&&t.mapping!==Ze?(Ex.copy(e.backgroundRotation),Ex.x*=-1,Ex.y*=-1,Ex.z*=-1,Ax.makeRotationFromEuler(Ex)):Ax.identity(),Ax});class Bx extends Pl{static get type(){return"StorageTextureNode"}constructor(e,t,r=null){super(e,t),this.storeNode=r,this.mipLevel=0,this.isStorageTextureNode=!0,this.access=si.WRITE_ONLY}getInputType(){return"storageTexture"}setup(e){super.setup(e);const t=e.getNodeProperties(this);return t.storeNode=this.storeNode,t}setAccess(e){return this.access=e,this}setMipLevel(e){return this.mipLevel=e,this}generate(e,t){let r;return r=null!==this.storeNode?this.generateStore(e):super.generate(e,t),r}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;return e.generateStorageTextureLoad(l,t,r,s,n,u)}toReadWrite(){return this.setAccess(si.READ_WRITE)}toReadOnly(){return this.setAccess(si.READ_ONLY)}toWriteOnly(){return this.setAccess(si.WRITE_ONLY)}generateStore(e){const t=e.getNodeProperties(this),{uvNode:r,storeNode:s,depthNode:i}=t,n=super.generate(e,"property"),a=r.build(e,!0===this.value.is3DTexture?"uvec3":"uvec2"),o=s.build(e,"vec4"),u=i?i.build(e,"int"):null,l=e.generateTextureStore(e,n,a,u,o);e.addLineFlowCode(l,this)}clone(){const e=super.clone();return e.storeNode=this.storeNode,e.mipLevel=this.mipLevel,e.access=this.access,e}}const Fx=nn(Bx).setParameterLength(1,3),Lx=dn(({texture:e,uv:t})=>{const r=1e-4,s=Sn().toVar();return pn(t.x.lessThan(r),()=>{s.assign(Sn(1,0,0))}).ElseIf(t.y.lessThan(r),()=>{s.assign(Sn(0,1,0))}).ElseIf(t.z.lessThan(r),()=>{s.assign(Sn(0,0,1))}).ElseIf(t.x.greaterThan(.9999),()=>{s.assign(Sn(-1,0,0))}).ElseIf(t.y.greaterThan(.9999),()=>{s.assign(Sn(0,-1,0))}).ElseIf(t.z.greaterThan(.9999),()=>{s.assign(Sn(0,0,-1))}).Else(()=>{const r=.01,i=e.sample(t.add(Sn(-.01,0,0))).r.sub(e.sample(t.add(Sn(r,0,0))).r),n=e.sample(t.add(Sn(0,-.01,0))).r.sub(e.sample(t.add(Sn(0,r,0))).r),a=e.sample(t.add(Sn(0,0,-.01))).r.sub(e.sample(t.add(Sn(0,0,r))).r);s.assign(Sn(i,n,a))}),s.normalize()});class Px extends Pl{static get type(){return"Texture3DNode"}constructor(e,t=null,r=null){super(e,t,r),this.isTexture3DNode=!0}getInputType(){return"texture3D"}getDefaultUV(){return Sn(.5,.5,.5)}setUpdateMatrix(){}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}generateOffset(e,t){return t.build(e,"ivec3")}normal(e){return Lx({texture:this,uv:e})}}const Dx=nn(Px).setParameterLength(1,3);class Ux extends Lc{static get type(){return"UserDataNode"}constructor(e,t,r=null){super(e,t,r),this.userData=r}updateReference(e){return this.reference=null!==this.userData?this.userData:e.object.userData,this.reference}}const Ix=new WeakMap;class Ox extends pi{static get type(){return"VelocityNode"}constructor(){super("vec2"),this.projectionMatrix=null,this.updateType=ti.OBJECT,this.updateAfterType=ti.OBJECT,this.previousModelWorldMatrix=Na(new a),this.previousProjectionMatrix=Na(new a).setGroup(Ta),this.previousCameraViewMatrix=Na(new a)}setProjectionMatrix(e){this.projectionMatrix=e}update({frameId:e,camera:t,object:r}){const s=kx(r);this.previousModelWorldMatrix.value.copy(s);const i=Vx(t);i.frameId!==e&&(i.frameId=e,void 0===i.previousProjectionMatrix?(i.previousProjectionMatrix=new a,i.previousCameraViewMatrix=new a,i.currentProjectionMatrix=new a,i.currentCameraViewMatrix=new a,i.previousProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){kx(e).copy(e.matrixWorld)}setup(){const e=null===this.projectionMatrix?Td:Na(this.projectionMatrix),t=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),r=e.mul(Wd).mul(Qd),s=this.previousProjectionMatrix.mul(t).mul(Yd),i=r.xy.div(r.w),n=s.xy.div(s.w);return La(i,n)}}function Vx(e){let t=Ix.get(e);return void 0===t&&(t={},Ix.set(e,t)),t}function kx(e,t=0){const r=Vx(e);let s=r[t];return void 0===s&&(r[t]=s=new a,r[t].copy(e.matrixWorld)),s}const Gx=an(Ox),$x=dn(([e])=>qx(e.rgb)),zx=dn(([e,t=fn(1)])=>t.mix(qx(e.rgb),e.rgb)),Wx=dn(([e,t=fn(1)])=>{const r=Fa(e.r,e.g,e.b).div(3),s=e.r.max(e.g.max(e.b)),i=s.sub(r).mul(t).mul(-3);return ou(e.rgb,s,i)}),Hx=dn(([e,t=fn(1)])=>{const r=Sn(.57735,.57735,.57735),s=t.cos();return Sn(e.rgb.mul(s).add(r.cross(e.rgb).mul(t.sin()).add(r.mul(Zo(r,e.rgb).mul(s.oneMinus())))))}),qx=(e,t=Sn(p.getLuminanceCoefficients(new r)))=>Zo(e,t),jx=dn(([e,t=Sn(1),s=Sn(0),i=Sn(1),n=fn(1),a=Sn(p.getLuminanceCoefficients(new r,Ee))])=>{const o=e.rgb.dot(Sn(a)),u=jo(e.rgb.mul(t).add(s),0).toVar(),l=u.pow(i).toVar();return pn(u.r.greaterThan(0),()=>{u.r.assign(l.r)}),pn(u.g.greaterThan(0),()=>{u.g.assign(l.g)}),pn(u.b.greaterThan(0),()=>{u.b.assign(l.b)}),u.assign(o.add(u.sub(o).mul(n))),wn(u.rgb,e.a)}),Xx=dn(([e,t])=>e.mul(t).floor().div(t));let Kx=null;class Qx extends Vp{static get type(){return"ViewportSharedTextureNode"}constructor(e=Kl,t=null){null===Kx&&(Kx=new Y),super(e,t,Kx)}getTextureForReference(){return Kx}updateReference(){return this}}const Yx=nn(Qx).setParameterLength(0,2),Zx=new t;class Jx extends Pl{static get type(){return"PassTextureNode"}constructor(e,t){super(t),this.passNode=e,this.isPassTextureNode=!0,this.setUpdateMatrix(!1)}setup(e){return e.getNodeProperties(this).passNode=this.passNode,super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}}class eT extends Jx{static get type(){return"PassMultipleTextureNode"}constructor(e,t,r=!1){super(e,null),this.textureName=t,this.previousTexture=r,this.isPassMultipleTextureNode=!0}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){const e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}class tT extends pi{static get type(){return"PassNode"}constructor(e,t,r,s={}){super("vec4"),this.scope=e,this.scene=t,this.camera=r,this.options=s,this._pixelRatio=1,this._width=1,this._height=1;const i=new J;i.isRenderTargetTexture=!0,i.name="depth";const n=new ae(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:_e,...s});n.texture.name="output",n.depthTexture=i,this.renderTarget=n,this.overrideMaterial=null,this.transparent=!0,this.opaque=!0,this.contextNode=null,this._contextNodeCache=null,this._textures={output:n.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Na(0),this._cameraFar=Na(0),this._mrt=null,this._layers=null,this._resolutionScale=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=ti.FRAME,this.global=!0}setResolutionScale(e){return this._resolutionScale=e,this}getResolutionScale(){return this._resolutionScale}setResolution(e){return d("PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead."),this.setResolutionScale(e)}getResolution(){return d("PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead."),this.getResolutionScale()}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];if(void 0===t){t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)}return t}getPreviousTexture(e){let t=this._previousTextures[e];return void 0===t&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){const t=this._previousTextures[e];if(void 0!==t){const r=this._textures[e],s=this.renderTarget.textures.indexOf(r);this.renderTarget.textures[s]=t,this._textures[e]=t,this._previousTextures[e]=r,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e="output"){let t=this._textureNodes[e];return void 0===t&&(t=new eT(this,e),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e="output"){let t=this._previousTextureNodes[e];return void 0===t&&(void 0===this._textureNodes[e]&&this.getTextureNode(e),t=new eT(this,e,!0),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e="depth"){let t=this._viewZNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar;this._viewZNodes[e]=t=Zp(this.getTextureNode(e),r,s)}return t}getLinearDepthNode(e="depth"){let t=this._linearDepthNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Xp(i,r,s)}return t}async compileAsync(e){const t=e.getRenderTarget(),r=e.getMRT();e.setRenderTarget(this.renderTarget),e.setMRT(this._mrt),await e.compileAsync(this.scene,this.camera),e.setRenderTarget(t),e.setMRT(r)}setup({renderer:e}){return this.renderTarget.samples=void 0===this.options.samples?e.samples:this.options.samples,this.renderTarget.texture.type=e.getOutputBufferType(),this.scope===tT.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){const{renderer:t}=e,{scene:r}=this;let s,i;const n=t.getOutputRenderTarget();n&&!0===n.isXRRenderTarget?(i=1,s=t.xr.getCamera(),t.xr.updateCamera(s),Zx.set(n.width,n.height)):(s=this.camera,i=t.getPixelRatio(),t.getSize(Zx)),this._pixelRatio=i,this.setSize(Zx.width,Zx.height);const a=t.getRenderTarget(),o=t.getMRT(),u=t.autoClear,l=t.transparent,d=t.opaque,c=s.layers.mask,h=t.contextNode,p=r.overrideMaterial;this._cameraNear.value=s.near,this._cameraFar.value=s.far,null!==this._layers&&(s.layers.mask=this._layers.mask);for(const e in this._previousTextures)this.toggleTexture(e);null!==this.overrideMaterial&&(r.overrideMaterial=this.overrideMaterial),t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.autoClear=!0,t.transparent=this.transparent,t.opaque=this.opaque,null!==this.contextNode&&(null!==this._contextNodeCache&&this._contextNodeCache.version===this.version||(this._contextNodeCache={version:this.version,context:vu({...t.contextNode.getFlowContextData(),...this.contextNode.getFlowContextData()})}),t.contextNode=this._contextNodeCache.context);const g=r.name;r.name=this.name?this.name:r.name,t.render(r,s),r.name=g,r.overrideMaterial=p,t.setRenderTarget(a),t.setMRT(o),t.autoClear=u,t.transparent=l,t.opaque=d,t.contextNode=h,s.layers.mask=c}setSize(e,t){this._width=e,this._height=t;const r=Math.floor(this._width*this._pixelRatio*this._resolutionScale),s=Math.floor(this._height*this._pixelRatio*this._resolutionScale);this.renderTarget.setSize(r,s),null!==this._scissor&&this.renderTarget.scissor.copy(this._scissor),null!==this._viewport&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,r,i){null===e?this._scissor=null:(null===this._scissor&&(this._scissor=new s),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,r,i),this._scissor.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setViewport(e,t,r,i){null===e?this._viewport=null:(null===this._viewport&&(this._viewport=new s),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,r,i),this._viewport.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}}tT.COLOR="color",tT.DEPTH="depth";class rT extends tT{static get type(){return"ToonOutlinePassNode"}constructor(e,t,r,s,i){super(tT.COLOR,e,t),this.colorNode=r,this.thicknessNode=s,this.alphaNode=i,this._materialCache=new WeakMap,this.name="Outline Pass"}updateBefore(e){const{renderer:t}=e,r=t.getRenderObjectFunction();t.setRenderObjectFunction((e,r,s,i,n,a,o,u)=>{if((n.isMeshToonMaterial||n.isMeshToonNodeMaterial)&&!1===n.wireframe){const l=this._getOutlineMaterial(n);t.renderObject(e,r,s,i,l,a,o,u)}t.renderObject(e,r,s,i,n,a,o,u)}),super.updateBefore(e),t.setRenderObjectFunction(r)}_createMaterial(){const e=new yg;e.isMeshToonOutlineMaterial=!0,e.name="Toon_Outline",e.side=L;const t=oc.negate(),r=Td.mul(Wd),s=fn(1),i=r.mul(wn(Qd,1)),n=r.mul(wn(Qd.add(t),1)),a=So(i.sub(n));return e.vertexNode=i.add(a.mul(this.thicknessNode).mul(i.w).mul(s)),e.colorNode=wn(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return void 0===t&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}}const sT=dn(([e,t])=>e.mul(t).clamp()).setLayout({name:"linearToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),iT=dn(([e,t])=>(e=e.mul(t)).div(e.add(1)).clamp()).setLayout({name:"reinhardToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),nT=dn(([e,t])=>{const r=(e=(e=e.mul(t)).sub(.004).max(0)).mul(e.mul(6.2).add(.5)),s=e.mul(e.mul(6.2).add(1.7)).add(.06);return r.div(s).pow(2.2)}).setLayout({name:"cineonToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),aT=dn(([e])=>{const t=e.mul(e.add(.0245786)).sub(90537e-9),r=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(r)}),oT=dn(([e,t])=>{const r=Ln(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),s=Ln(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=r.mul(e),e=aT(e),(e=s.mul(e)).clamp()}).setLayout({name:"acesFilmicToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),uT=Ln(Sn(1.6605,-.1246,-.0182),Sn(-.5876,1.1329,-.1006),Sn(-.0728,-.0083,1.1187)),lT=Ln(Sn(.6274,.0691,.0164),Sn(.3293,.9195,.088),Sn(.0433,.0113,.8956)),dT=dn(([e])=>{const t=Sn(e).toVar(),r=Sn(t.mul(t)).toVar(),s=Sn(r.mul(r)).toVar();return fn(15.5).mul(s.mul(r)).sub(Pa(40.14,s.mul(t))).add(Pa(31.96,s).sub(Pa(6.868,r.mul(t))).add(Pa(.4298,r).add(Pa(.1191,t).sub(.00232))))}),cT=dn(([e,t])=>{const r=Sn(e).toVar(),s=Ln(Sn(.856627153315983,.137318972929847,.11189821299995),Sn(.0951212405381588,.761241990602591,.0767994186031903),Sn(.0482516061458583,.101439036467562,.811302368396859)),i=Ln(Sn(1.1271005818144368,-.1413297634984383,-.14132976349843826),Sn(-.11060664309660323,1.157823702216272,-.11060664309660294),Sn(-.016493938717834573,-.016493938717834257,1.2519364065950405)),n=fn(-12.47393),a=fn(4.026069);return r.mulAssign(t),r.assign(lT.mul(r)),r.assign(s.mul(r)),r.assign(jo(r,1e-10)),r.assign(xo(r)),r.assign(r.sub(n).div(a.sub(n))),r.assign(uu(r,0,1)),r.assign(dT(r)),r.assign(i.mul(r)),r.assign(eu(jo(Sn(0),r),Sn(2.2))),r.assign(uT.mul(r)),r.assign(uu(r,0,1)),r}).setLayout({name:"agxToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),hT=dn(([e,t])=>{const r=fn(.76),s=fn(.15);e=e.mul(t);const i=qo(e.r,qo(e.g,e.b)),n=Tu(i.lessThan(.08),i.sub(Pa(6.25,i.mul(i))),.04);e.subAssign(n);const a=jo(e.r,jo(e.g,e.b));pn(a.lessThan(r),()=>e);const o=La(1,r),u=La(1,o.mul(o).div(a.add(o.sub(r))));e.mulAssign(u.div(a));const l=La(1,Da(1,s.mul(a.sub(u)).add(1)));return ou(e,Sn(u),l)}).setLayout({name:"neutralToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]});class pT extends di{static get type(){return"CodeNode"}constructor(e="",t=[],r=""){super("code"),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=r}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){const t=this.getIncludes(e);for(const r of t)r.build(e);const r=e.getCodeFromNode(this,this.getNodeType(e));return r.code=this.code,r.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}}const gT=nn(pT).setParameterLength(1,3);class mT extends pT{static get type(){return"FunctionNode"}constructor(e="",t=[],r=""){super(e,t,r)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){const r=this.getNodeType(e);return e.getStructTypeNode(r).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){const t=e.getDataFromNode(this);let r=t.nodeFunction;return void 0===r&&(r=e.parser.parseFunction(this.code),t.nodeFunction=r),r}generate(e,t){super.generate(e);const r=this.getNodeFunction(e),s=r.name,i=r.type,n=e.getCodeFromNode(this,i);""!==s&&(n.name=s);const a=e.getPropertyName(n),o=this.getNodeFunction(e).getCode(a);return n.code=o+"\n","property"===t?a:e.format(`${a}()`,i,t)}}const fT=(e,t=[],r="")=>{for(let e=0;es.call(...e);return i.functionNode=s,i};function yT(e){let t;const r=e.context.getViewZ;return void 0!==r&&(t=r(this)),(t||ec.z).negate()}const bT=dn(([e,t],r)=>{const s=yT(r);return cu(e,t,s)}),xT=dn(([e],t)=>{const r=yT(t);return e.mul(e,r,r).negate().exp().oneMinus()}),TT=dn(([e,t],r)=>{const s=yT(r),i=t.sub(Zd.y).max(0).toConst().mul(s).toConst();return e.mul(e,i,i).negate().exp().oneMinus()}),_T=dn(([e,t])=>wn(t.toFloat().mix(aa.rgb,e.toVec3()),aa.a));let vT=null,NT=null;class ST extends di{static get type(){return"RangeNode"}constructor(e=fn(),t=fn()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){const t=this.getConstNode(this.minNode),r=this.getConstNode(this.maxNode),s=e.getTypeLength(Xs(t.value)),i=e.getTypeLength(Xs(r.value));return s>i?s:i}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):"float"}getConstNode(e){let t=null;if(e.traverse(e=>{!0===e.isConstNode&&(t=e)}),null===t)throw new Fl('THREE.TSL: No "ConstNode" found in node graph.',this.stackTrace);return t}setup(e){const t=e.object;let r=null;if(t.count>1){const i=this.getConstNode(this.minNode),n=this.getConstNode(this.maxNode),a=i.value,o=n.value,u=e.getTypeLength(Xs(a)),d=e.getTypeLength(Xs(o));vT=vT||new s,NT=NT||new s,vT.setScalar(0),NT.setScalar(0),1===u?vT.setScalar(a):a.isColor?vT.set(a.r,a.g,a.b,1):vT.set(a.x,a.y,a.z||0,a.w||0),1===d?NT.setScalar(o):o.isColor?NT.set(o.r,o.g,o.b,1):NT.set(o.x,o.y,o.z||0,o.w||0);const c=4,h=c*t.count,p=new Float32Array(h);for(let e=0;enew ET(e,t),wT=AT("numWorkgroups","uvec3"),CT=AT("workgroupId","uvec3"),MT=AT("globalId","uvec3"),BT=AT("localId","uvec3"),FT=AT("subgroupSize","uint");class LT extends di{constructor(e){super(),this.scope=e}generate(e){const{scope:t}=this,{renderer:r}=e;!0===r.backend.isWebGLBackend?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}const PT=nn(LT);class DT extends ci{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let r;const s=e.context.assign;if(r=super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}class UT extends di{constructor(e,t,r=0){super(t),this.bufferType=t,this.bufferCount=r,this.isWorkgroupInfoNode=!0,this.elementType=t,this.scope=e,this.name=""}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setScope(e){return this.scope=e,this}getElementType(){return this.elementType}getInputType(){return`${this.scope}Array`}element(e){return new DT(this,e)}generate(e){const t=""!==this.name?this.name:`${this.scope}Array_${this.id}`;return e.getScopedArray(t,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}}class IT extends di{static get type(){return"AtomicFunctionNode"}constructor(e,t,r){super("uint"),this.method=e,this.pointerNode=t,this.valueNode=r,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){const t=e.getNodeProperties(this),r=t.parents,s=this.method,i=this.getNodeType(e),n=this.getInputType(e),a=this.pointerNode,o=this.valueNode,u=[];u.push(`&${a.build(e,n)}`),null!==o&&u.push(o.build(e,n));const l=`${e.getMethod(s,i)}( ${u.join(", ")} )`;if(!(!!r&&(1===r.length&&!0===r[0].isStackNode)))return void 0===t.constNode&&(t.constNode=fl(l,i).toConst()),t.constNode.build(e);e.addLineFlowCode(l,this)}}IT.ATOMIC_LOAD="atomicLoad",IT.ATOMIC_STORE="atomicStore",IT.ATOMIC_ADD="atomicAdd",IT.ATOMIC_SUB="atomicSub",IT.ATOMIC_MAX="atomicMax",IT.ATOMIC_MIN="atomicMin",IT.ATOMIC_AND="atomicAnd",IT.ATOMIC_OR="atomicOr",IT.ATOMIC_XOR="atomicXor";const OT=nn(IT),VT=(e,t,r)=>OT(e,t,r).toStack();class kT extends pi{static get type(){return"SubgroupFunctionNode"}constructor(e,t=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=r}getInputType(e){const t=this.aNode?this.aNode.getNodeType(e):null,r=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(r)?0:e.getTypeLength(r))?t:r}getNodeType(e){const t=this.method;return t===kT.SUBGROUP_ELECT?"bool":t===kT.SUBGROUP_BALLOT?"uvec4":this.getInputType(e)}generate(e,t){const r=this.method,s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=[];if(r===kT.SUBGROUP_BROADCAST||r===kT.SUBGROUP_SHUFFLE||r===kT.QUAD_BROADCAST){const t=a.getNodeType(e);o.push(n.build(e,s),a.build(e,"float"===t?"int":s))}else r===kT.SUBGROUP_SHUFFLE_XOR||r===kT.SUBGROUP_SHUFFLE_DOWN||r===kT.SUBGROUP_SHUFFLE_UP?o.push(n.build(e,s),a.build(e,"uint")):(null!==n&&o.push(n.build(e,i)),null!==a&&o.push(a.build(e,i)));const u=0===o.length?"()":`( ${o.join(", ")} )`;return e.format(`${e.getMethod(r,s)}${u}`,s,t)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}kT.SUBGROUP_ELECT="subgroupElect",kT.SUBGROUP_BALLOT="subgroupBallot",kT.SUBGROUP_ADD="subgroupAdd",kT.SUBGROUP_INCLUSIVE_ADD="subgroupInclusiveAdd",kT.SUBGROUP_EXCLUSIVE_AND="subgroupExclusiveAdd",kT.SUBGROUP_MUL="subgroupMul",kT.SUBGROUP_INCLUSIVE_MUL="subgroupInclusiveMul",kT.SUBGROUP_EXCLUSIVE_MUL="subgroupExclusiveMul",kT.SUBGROUP_AND="subgroupAnd",kT.SUBGROUP_OR="subgroupOr",kT.SUBGROUP_XOR="subgroupXor",kT.SUBGROUP_MIN="subgroupMin",kT.SUBGROUP_MAX="subgroupMax",kT.SUBGROUP_ALL="subgroupAll",kT.SUBGROUP_ANY="subgroupAny",kT.SUBGROUP_BROADCAST_FIRST="subgroupBroadcastFirst",kT.QUAD_SWAP_X="quadSwapX",kT.QUAD_SWAP_Y="quadSwapY",kT.QUAD_SWAP_DIAGONAL="quadSwapDiagonal",kT.SUBGROUP_BROADCAST="subgroupBroadcast",kT.SUBGROUP_SHUFFLE="subgroupShuffle",kT.SUBGROUP_SHUFFLE_XOR="subgroupShuffleXor",kT.SUBGROUP_SHUFFLE_UP="subgroupShuffleUp",kT.SUBGROUP_SHUFFLE_DOWN="subgroupShuffleDown",kT.QUAD_BROADCAST="quadBroadcast";const GT=on(kT,kT.SUBGROUP_ELECT).setParameterLength(0),$T=on(kT,kT.SUBGROUP_BALLOT).setParameterLength(1),zT=on(kT,kT.SUBGROUP_ADD).setParameterLength(1),WT=on(kT,kT.SUBGROUP_INCLUSIVE_ADD).setParameterLength(1),HT=on(kT,kT.SUBGROUP_EXCLUSIVE_AND).setParameterLength(1),qT=on(kT,kT.SUBGROUP_MUL).setParameterLength(1),jT=on(kT,kT.SUBGROUP_INCLUSIVE_MUL).setParameterLength(1),XT=on(kT,kT.SUBGROUP_EXCLUSIVE_MUL).setParameterLength(1),KT=on(kT,kT.SUBGROUP_AND).setParameterLength(1),QT=on(kT,kT.SUBGROUP_OR).setParameterLength(1),YT=on(kT,kT.SUBGROUP_XOR).setParameterLength(1),ZT=on(kT,kT.SUBGROUP_MIN).setParameterLength(1),JT=on(kT,kT.SUBGROUP_MAX).setParameterLength(1),e_=on(kT,kT.SUBGROUP_ALL).setParameterLength(0),t_=on(kT,kT.SUBGROUP_ANY).setParameterLength(0),r_=on(kT,kT.SUBGROUP_BROADCAST_FIRST).setParameterLength(2),s_=on(kT,kT.QUAD_SWAP_X).setParameterLength(1),i_=on(kT,kT.QUAD_SWAP_Y).setParameterLength(1),n_=on(kT,kT.QUAD_SWAP_DIAGONAL).setParameterLength(1),a_=on(kT,kT.SUBGROUP_BROADCAST).setParameterLength(2),o_=on(kT,kT.SUBGROUP_SHUFFLE).setParameterLength(2),u_=on(kT,kT.SUBGROUP_SHUFFLE_XOR).setParameterLength(2),l_=on(kT,kT.SUBGROUP_SHUFFLE_UP).setParameterLength(2),d_=on(kT,kT.SUBGROUP_SHUFFLE_DOWN).setParameterLength(2),c_=on(kT,kT.QUAD_BROADCAST).setParameterLength(1);let h_;function p_(e){h_=h_||new WeakMap;let t=h_.get(e);return void 0===t&&h_.set(e,t={}),t}function g_(e){const t=p_(e);return t.shadowMatrix||(t.shadowMatrix=Na("mat4").setGroup(Ta).onRenderUpdate(t=>(!0===e.castShadow&&!1!==t.renderer.shadowMap.enabled||(e.shadow.camera.coordinateSystem!==t.camera.coordinateSystem&&(e.shadow.camera.coordinateSystem=t.camera.coordinateSystem,e.shadow.camera.updateProjectionMatrix()),e.shadow.updateMatrices(e)),e.shadow.matrix)))}function m_(e,t=Zd){const r=g_(e).mul(t);return r.xyz.div(r.w)}function f_(e){const t=p_(e);return t.position||(t.position=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.matrixWorld)))}function y_(e){const t=p_(e);return t.targetPosition||(t.targetPosition=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.target.matrixWorld)))}function b_(e){const t=p_(e);return t.viewPosition||(t.viewPosition=Na(new r).setGroup(Ta).onRenderUpdate(({camera:t},s)=>{s.value=s.value||new r,s.value.setFromMatrixPosition(e.matrixWorld),s.value.applyMatrix4(t.matrixWorldInverse)}))}const x_=e=>vd.transformDirection(f_(e).sub(y_(e))),T_=(e,t)=>{for(const r of t)if(r.isAnalyticLightNode&&r.light.id===e)return r;return null},__=new WeakMap,v_=[];class N_ extends di{static get type(){return"LightsNode"}constructor(){super("vec3"),this.totalDiffuseNode=On("vec3","totalDiffuse"),this.totalSpecularNode=On("vec3","totalSpecular"),this.outgoingLightNode=On("vec3","outgoingLight"),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){const e=this._lights;for(let t=0;te.sort((e,t)=>e.id-t.id))(this._lights),i=e.renderer.library;for(const e of s)if(e.isNode)t.push(en(e));else{let s=null;if(null!==r&&(s=T_(e.id,r)),null===s){const r=i.getLightNodeClass(e.constructor);if(null===r){d(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let s=null;__.has(e)?s=__.get(e):(s=new r(e),__.set(e,s)),t.push(s)}}this._lightNodes=t}setupDirectLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.direct({...r,lightNode:t,reflectedLight:i},e)}setupDirectRectAreaLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.directRectArea({...r,lightNode:t,reflectedLight:i},e)}setupLights(e,t){for(const r of t)r.build(e)}getLightNodes(e){return null===this._lightNodes&&this.setupLightsNode(e),this._lightNodes}setup(e){const t=e.lightsNode;e.lightsNode=this;let r=this.outgoingLightNode;const s=e.context,i=s.lightingModel,n=e.getNodeProperties(this);if(i){const{totalDiffuseNode:t,totalSpecularNode:a}=this;s.outgoingLight=r;const o=e.addStack();n.nodes=o.nodes,i.start(e);const{backdrop:u,backdropAlpha:l}=s,{directDiffuse:d,directSpecular:c,indirectDiffuse:h,indirectSpecular:p}=s.reflectedLight;let g=d.add(h);null!==u&&(g=Sn(null!==l?l.mix(g,u):u)),t.assign(g),a.assign(c.add(p)),r.assign(t.add(a)),i.finish(e),r=r.bypass(e.removeStack())}else n.nodes=[];return e.lightsNode=t,r}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}}class S_ extends di{static get type(){return"ShadowBaseNode"}constructor(e){super(),this.light=e,this.updateBeforeType=ti.RENDER,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){R_.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Zd)}}const R_=On("vec3","shadowPositionWorld");function E_(t,r={}){return r.toneMapping=t.toneMapping,r.toneMappingExposure=t.toneMappingExposure,r.outputColorSpace=t.outputColorSpace,r.renderTarget=t.getRenderTarget(),r.activeCubeFace=t.getActiveCubeFace(),r.activeMipmapLevel=t.getActiveMipmapLevel(),r.renderObjectFunction=t.getRenderObjectFunction(),r.pixelRatio=t.getPixelRatio(),r.mrt=t.getMRT(),r.clearColor=t.getClearColor(r.clearColor||new e),r.clearAlpha=t.getClearAlpha(),r.autoClear=t.autoClear,r.scissorTest=t.getScissorTest(),r}function A_(e,t){return t=E_(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}function w_(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}function C_(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}function M_(e,t){return t=C_(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}function B_(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}function F_(e,t,r){return r=M_(t,r=A_(e,r))}function L_(e,t,r){w_(e,r),B_(t,r)}var P_=Object.freeze({__proto__:null,resetRendererAndSceneState:F_,resetRendererState:A_,resetSceneState:M_,restoreRendererAndSceneState:L_,restoreRendererState:w_,restoreSceneState:B_,saveRendererAndSceneState:function(e,t,r={}){return r=C_(t,r=E_(e,r))},saveRendererState:E_,saveSceneState:C_});const D_=new WeakMap,U_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r})=>{let s=Ul(e,t.xy).setName("t_basic");return e.isArrayTexture&&(s=s.depth(r)),s.compare(t.z)}),I_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Pc("radius","float",r).setGroup(Ta),o=Tn(1).div(n),u=a.mul(o.x),l=yx(Yl.xy).mul(6.28318530718);return Fa(i(t.xy.add(bx(0,5,l).mul(u)),t.z),i(t.xy.add(bx(1,5,l).mul(u)),t.z),i(t.xy.add(bx(2,5,l).mul(u)),t.z),i(t.xy.add(bx(3,5,l).mul(u)),t.z),i(t.xy.add(bx(4,5,l).mul(u)),t.z)).mul(.2)}),O_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Tn(1).div(n),o=a.x,u=a.y,l=t.xy,d=Ro(l.mul(n).add(.5));return l.subAssign(d.mul(a)),Fa(i(l,t.z),i(l.add(Tn(o,0)),t.z),i(l.add(Tn(0,u)),t.z),i(l.add(a),t.z),ou(i(l.add(Tn(o.negate(),0)),t.z),i(l.add(Tn(o.mul(2),0)),t.z),d.x),ou(i(l.add(Tn(o.negate(),u)),t.z),i(l.add(Tn(o.mul(2),u)),t.z),d.x),ou(i(l.add(Tn(0,u.negate())),t.z),i(l.add(Tn(0,u.mul(2))),t.z),d.y),ou(i(l.add(Tn(o,u.negate())),t.z),i(l.add(Tn(o,u.mul(2))),t.z),d.y),ou(ou(i(l.add(Tn(o.negate(),u.negate())),t.z),i(l.add(Tn(o.mul(2),u.negate())),t.z),d.x),ou(i(l.add(Tn(o.negate(),u.mul(2))),t.z),i(l.add(Tn(o.mul(2),u.mul(2))),t.z),d.x),d.y)).mul(1/9)}),V_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r},s)=>{let i=Ul(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(r)),i=i.rg;const n=i.x,a=jo(1e-7,i.y.mul(i.y)),o=s.renderer.reversedDepthBuffer?Xo(n,t.z):Xo(t.z,n),u=fn(1).toVar();return pn(o.notEqual(1),()=>{const e=t.z.sub(n);let r=a.div(a.add(e.mul(e)));r=uu(La(r,.3).div(.65)),u.assign(jo(o,r))}),u}),k_=e=>{let t=D_.get(e);return void 0===t&&(t=new yg,t.colorNode=wn(0,0,0,1),t.isShadowPassMaterial=!0,t.name="ShadowMaterial",t.blending=se,t.fog=!1,D_.set(e,t)),t},G_=e=>{const t=D_.get(e);void 0!==t&&(t.dispose(),D_.delete(e))},$_=new fy,z_=[],W_=(e,t,r,s)=>{z_[0]=e,z_[1]=t;let i=$_.get(z_);return void 0!==i&&i.shadowType===r&&i.useVelocity===s||(i=(i,n,a,o,u,l,...d)=>{(!0===i.castShadow||i.receiveShadow&&r===tt)&&(s&&(Qs(i).useVelocity=!0),i.onBeforeShadow(e,i,a,t.camera,o,n.overrideMaterial,l),e.renderObject(i,n,a,o,u,l,...d),i.onAfterShadow(e,i,a,t.camera,o,n.overrideMaterial,l))},i.shadowType=r,i.useVelocity=s,$_.set(z_,i)),z_[0]=null,z_[1]=null,i},H_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanVertical"),a=fn(0).toVar("squareMeanVertical"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(0,l).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),d=d.x,n.addAssign(d),a.addAssign(d.mul(d))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),q_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanHorizontal"),a=fn(0).toVar("squareMeanHorizontal"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(l,0).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),n.addAssign(d.x),a.addAssign(Fa(d.y.mul(d.y),d.x.mul(d.x)))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),j_=[U_,I_,O_,V_];let X_;const K_=new dx;class Q_ extends S_{static get type(){return"ShadowNode"}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._currentShadowType=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n}){const a=s.x.greaterThanEqual(0).and(s.x.lessThanEqual(1)).and(s.y.greaterThanEqual(0)).and(s.y.lessThanEqual(1)).and(s.z.lessThanEqual(1)),o=t({depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n});return a.select(o,fn(1))}setupShadowCoord(e,t){const{shadow:r}=this,{renderer:s}=e,i=r.biasNode||Pc("bias","float",r).setGroup(Ta);let n,a=t;if(r.camera.isOrthographicCamera||!0!==s.logarithmicDepthBuffer)a=a.xyz.div(a.w),n=a.z;else{const e=a.w;a=a.xy.div(e);const t=Pc("near","float",r.camera).setGroup(Ta),s=Pc("far","float",r.camera).setGroup(Ta);n=Jp(e.negate(),t,s)}return a=Sn(a.x,a.y.oneMinus(),s.reversedDepthBuffer?n.sub(i):n.add(i)),a}getShadowFilterFn(e){return j_[e]}setupRenderTarget(e,t){const r=new J(e.mapSize.width,e.mapSize.height);r.name="ShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return s.texture.name="ShadowMap",s.texture.type=e.mapType,s.depthTexture=r,{shadowMap:s,depthTexture:r}}setupShadow(e){const{renderer:t,camera:r}=e,{light:s,shadow:i}=this,{depthTexture:n,shadowMap:a}=this.setupRenderTarget(i,e),o=t.shadowMap.type,u=t.hasCompatibility(E.TEXTURE_COMPARE);if(o!==Je&&o!==et||!u?(n.minFilter=B,n.magFilter=B):(n.minFilter=de,n.magFilter=de),i.camera.coordinateSystem=r.coordinateSystem,i.camera.updateProjectionMatrix(),o===tt&&!0!==i.isPointLightShadow){n.compareFunction=null,a.depth>1?(a._vsmShadowMapVertical||(a._vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapVertical.texture.name="VSMVertical"),this.vsmShadowMapVertical=a._vsmShadowMapVertical,a._vsmShadowMapHorizontal||(a._vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapHorizontal.texture.name="VSMHorizontal"),this.vsmShadowMapHorizontal=a._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}));let t=Ul(n);n.isArrayTexture&&(t=t.depth(this.depthLayer));let r=Ul(this.vsmShadowMapVertical.texture);n.isArrayTexture&&(r=r.depth(this.depthLayer));const s=Pc("blurSamples","float",i).setGroup(Ta),o=Pc("radius","float",i).setGroup(Ta),u=Pc("mapSize","vec2",i).setGroup(Ta);let l=this.vsmMaterialVertical||(this.vsmMaterialVertical=new yg);l.fragmentNode=H_({samples:s,radius:o,size:u,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMVertical",l=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new yg),l.fragmentNode=q_({samples:s,radius:o,size:u,shadowPass:r,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMHorizontal"}const l=Pc("intensity","float",i).setGroup(Ta),d=Pc("normalBias","float",i).setGroup(Ta),c=g_(s).mul(R_.add(hc.mul(d))),h=this.setupShadowCoord(e,c),p=i.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(null===p)throw new Error("THREE.WebGPURenderer: Shadow map type not supported yet.");const g=o===tt&&!0!==i.isPointLightShadow?this.vsmShadowMapHorizontal.texture:n,m=this.setupShadowFilter(e,{filterFn:p,shadowTexture:a.texture,depthTexture:g,shadowCoord:h,shadow:i,depthLayer:this.depthLayer});let f,y;!0===t.shadowMap.transmitted&&(a.texture.isCubeTexture?f=Bc(a.texture,h.xyz):(f=Ul(a.texture,h),n.isArrayTexture&&(f=f.depth(this.depthLayer)))),y=f?ou(1,m.rgb.mix(f,1),l.mul(f.a)).toVar():ou(1,m,l).toVar(),this.shadowMap=a,this.shadow.map=a;const b=`${this.light.type} Shadow [ ${this.light.name||"ID: "+this.light.id} ]`;return f&&y.toInspector(`${b} / Color`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture):Ul(this.shadowMap.texture)),y.toInspector(`${b} / Depth`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture).r.oneMinus():Il(this.shadowMap.depthTexture,Al().mul(Cl(Ul(this.shadowMap.depthTexture)))).r.oneMinus())}setup(e){if(!1!==e.renderer.shadowMap.enabled)return dn(()=>{const t=e.renderer.shadowMap.type;this._currentShadowType!==t&&(this._reset(),this._node=null);let r=this._node;return this.setupShadowPosition(e),null===r&&(this._node=r=this.setupShadow(e),this._currentShadowType=t),e.material.receivedShadowNode&&(r=e.material.receivedShadowNode(r)),r})()}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e;t.updateMatrices(s),r.setSize(t.mapSize.width,t.mapSize.height,r.depth);const a=n.name;n.name=`Shadow Map [ ${s.name||"ID: "+s.id} ]`,i.render(n,t.camera),n.name=a}updateShadow(e){const{shadowMap:t,light:r,shadow:s}=this,{renderer:i,scene:n,camera:a}=e,o=i.shadowMap.type,u=t.depthTexture.version;this._depthVersionCached=u;const l=s.camera.layers.mask;4294967294&s.camera.layers.mask||(s.camera.layers.mask=a.layers.mask);const d=i.getRenderObjectFunction(),c=i.getMRT(),h=!!c&&c.has("velocity");X_=F_(i,n,X_),n.overrideMaterial=k_(r),i.setRenderObjectFunction(W_(i,s,o,h)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(d),o===tt&&!0!==s.isPointLightShadow&&this.vsmPass(i),s.camera.layers.mask=l,L_(i,n,X_)}vsmPass(e){const{shadow:t}=this,r=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,r),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,r),e.setRenderTarget(this.vsmShadowMapVertical),K_.material=this.vsmMaterialVertical,K_.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),K_.material=this.vsmMaterialHorizontal,K_.render(e)}dispose(){this._reset(),super.dispose()}_reset(){this._currentShadowType=null,G_(this.light),this.shadowMap&&(this.shadowMap.dispose(),this.shadowMap=null),null!==this.vsmShadowMapVertical&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),null!==this.vsmShadowMapHorizontal&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null)}updateBefore(e){const{shadow:t}=this;let r=t.needsUpdate||t.autoUpdate;r&&(this._cameraFrameId[e.camera]===e.frameId&&(r=!1),this._cameraFrameId[e.camera]=e.frameId),r&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}}const Y_=(e,t)=>new Q_(e,t),Z_=new e,J_=new a,ev=new r,tv=new r,rv=[new r(1,0,0),new r(-1,0,0),new r(0,-1,0),new r(0,1,0),new r(0,0,1),new r(0,0,-1)],sv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,-1),new r(0,0,1),new r(0,-1,0),new r(0,-1,0)],iv=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],nv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],av=dn(({depthTexture:e,bd3D:t,dp:r})=>Bc(e,t).compare(r)),ov=dn(({depthTexture:e,bd3D:t,dp:r,shadow:s})=>{const i=Pc("radius","float",s).setGroup(Ta),n=Pc("mapSize","vec2",s).setGroup(Ta),a=i.div(n.x),o=Fo(t),u=So(Jo(t,o.x.greaterThan(o.z).select(Sn(0,1,0),Sn(1,0,0)))),l=Jo(t,u),d=yx(Yl.xy).mul(6.28318530718),c=bx(0,5,d),h=bx(1,5,d),p=bx(2,5,d),g=bx(3,5,d),m=bx(4,5,d);return Bc(e,t.add(u.mul(c.x).add(l.mul(c.y)).mul(a))).compare(r).add(Bc(e,t.add(u.mul(h.x).add(l.mul(h.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(p.x).add(l.mul(p.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(g.x).add(l.mul(g.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(m.x).add(l.mul(m.y)).mul(a))).compare(r)).mul(.2)}),uv=dn(({filterFn:e,depthTexture:t,shadowCoord:r,shadow:s},i)=>{const n=r.xyz.toConst(),a=n.abs().toConst(),o=a.x.max(a.y).max(a.z),u=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.near),l=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.far),d=Pc("bias","float",s).setGroup(Ta),c=fn(1).toVar();return pn(o.sub(l).lessThanEqual(0).and(o.sub(u).greaterThanEqual(0)),()=>{let r;i.renderer.reversedDepthBuffer?(r=Yp(o.negate(),u,l),r.subAssign(d)):(r=Qp(o.negate(),u,l),r.addAssign(d));const a=n.normalize();c.assign(e({depthTexture:t,bd3D:a,dp:r,shadow:s}))}),c});class lv extends Q_{static get type(){return"PointShadowNode"}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return e===rt?av:ov}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i}){return uv({filterFn:t,depthTexture:r,shadowCoord:s,shadow:i})}setupRenderTarget(e,t){const r=new st(e.mapSize.width);r.name="PointShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createCubeRenderTarget(e.mapSize.width);return s.texture.name="PointShadowMap",s.depthTexture=r,{shadowMap:s,depthTexture:r}}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e,a=t.camera,o=t.matrix,u=i.coordinateSystem===h,l=u?rv:iv,d=u?sv:nv;r.setSize(t.mapSize.width,t.mapSize.width);const c=i.autoClear,p=i.getClearColor(Z_),g=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha);for(let e=0;e<6;e++){i.setRenderTarget(r,e),i.clear();const u=s.distance||a.far;u!==a.far&&(a.far=u,a.updateProjectionMatrix()),ev.setFromMatrixPosition(s.matrixWorld),a.position.copy(ev),tv.copy(a.position),tv.add(l[e]),a.up.copy(d[e]),a.lookAt(tv),a.updateMatrixWorld(),o.makeTranslation(-ev.x,-ev.y,-ev.z),J_.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),t._frustum.setFromProjectionMatrix(J_,a.coordinateSystem,a.reversedDepth);const c=n.name;n.name=`Point Light Shadow [ ${s.name||"ID: "+s.id} ] - Face ${e+1}`,i.render(n,a),n.name=c}i.autoClear=c,i.setClearColor(p,g)}}const dv=(e,t)=>new lv(e,t);class cv extends Lp{static get type(){return"AnalyticLightNode"}constructor(t=null){super(),this.light=t,this.color=new e,this.colorNode=t&&t.colorNode||Na(this.color).setGroup(Ta),this.baseColorNode=null,this.shadowNode=null,this.shadowColorNode=null,this.isAnalyticLightNode=!0,this.updateType=ti.FRAME,t&&t.shadow&&(this._shadowDisposeListener=()=>{this.disposeShadow()},t.addEventListener("dispose",this._shadowDisposeListener))}dispose(){this._shadowDisposeListener&&this.light.removeEventListener("dispose",this._shadowDisposeListener),super.dispose()}disposeShadow(){null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null),this.shadowColorNode=null,null!==this.baseColorNode&&(this.colorNode=this.baseColorNode,this.baseColorNode=null)}getHash(){return this.light.uuid}getLightVector(e){return b_(this.light).sub(e.context.positionView||ec)}setupDirect(){}setupDirectRectArea(){}setupShadowNode(){return Y_(this.light)}setupShadow(e){const{renderer:t}=e;if(!1===t.shadowMap.enabled)return;let r=this.shadowColorNode;if(null===r){const e=this.light.shadow.shadowNode;let t;t=void 0!==e?en(e):this.setupShadowNode(),this.shadowNode=t,this.shadowColorNode=r=this.colorNode.mul(t),this.baseColorNode=this.colorNode}e.context.getShadow&&(r=e.context.getShadow(this,e)),this.colorNode=r}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null,this.shadowColorNode=null);const t=this.setupDirect(e),r=this.setupDirectRectArea(e);t&&e.lightsNode.setupDirectLight(e,this,t),r&&e.lightsNode.setupDirectRectAreaLight(e,this,r)}update(){const{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}}const hv=dn(({lightDistance:e,cutoffDistance:t,decayExponent:r})=>{const s=e.pow(r).max(.01).reciprocal();return t.greaterThan(0).select(s.mul(e.div(t).pow4().oneMinus().clamp().pow2()),s)}),pv=({color:e,lightVector:t,cutoffDistance:r,decayExponent:s})=>{const i=t.normalize(),n=t.length(),a=hv({lightDistance:n,cutoffDistance:r,decayExponent:s});return{lightDirection:i,lightColor:e.mul(a)}};class gv extends cv{static get type(){return"PointLightNode"}constructor(e=null){super(e),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(2).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setupShadowNode(){return dv(this.light)}setupDirect(e){return pv({color:this.colorNode,lightVector:this.getLightVector(e),cutoffDistance:this.cutoffDistanceNode,decayExponent:this.decayExponentNode})}}const mv=dn(([e=Al()])=>{const t=e.mul(2),r=t.x.floor(),s=t.y.floor();return r.add(s).mod(2).sign()}),fv=dn(([e=Al()],{renderer:t,material:r})=>{const s=au(e.mul(2).sub(1));let i;if(r.alphaToCoverage&&t.currentSamples>0){const e=fn(s.fwidth()).toVar();i=cu(e.oneMinus(),e.add(1),s).oneMinus()}else i=Tu(s.greaterThan(1),0,1);return i}),yv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=xn(e).toVar();return Tu(n,i,s)}).setLayout({name:"mx_select",type:"float",inputs:[{name:"b",type:"bool"},{name:"t",type:"float"},{name:"f",type:"float"}]}),bv=dn(([e,t])=>{const r=xn(t).toVar(),s=fn(e).toVar();return Tu(r,s.negate(),s)}).setLayout({name:"mx_negate_if",type:"float",inputs:[{name:"val",type:"float"},{name:"b",type:"bool"}]}),xv=dn(([e])=>{const t=fn(e).toVar();return yn(vo(t))}).setLayout({name:"mx_floor",type:"int",inputs:[{name:"x",type:"float"}]}),Tv=dn(([e,t])=>{const r=fn(e).toVar();return t.assign(xv(r)),r.sub(fn(t))}),_v=Db([dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=fn(s).toVar(),l=fn(r).toVar(),d=fn(t).toVar(),c=fn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"}]}),dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=Sn(s).toVar(),l=Sn(r).toVar(),d=Sn(t).toVar(),c=Sn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"}]})]),vv=Db([dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=fn(o).toVar(),m=fn(a).toVar(),f=fn(n).toVar(),y=fn(i).toVar(),b=fn(s).toVar(),x=fn(r).toVar(),T=fn(t).toVar(),_=fn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"v4",type:"float"},{name:"v5",type:"float"},{name:"v6",type:"float"},{name:"v7",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]}),dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=Sn(o).toVar(),m=Sn(a).toVar(),f=Sn(n).toVar(),y=Sn(i).toVar(),b=Sn(s).toVar(),x=Sn(r).toVar(),T=Sn(t).toVar(),_=Sn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"v4",type:"vec3"},{name:"v5",type:"vec3"},{name:"v6",type:"vec3"},{name:"v7",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]})]),Nv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=bn(e).toVar(),a=bn(n.bitAnd(bn(7))).toVar(),o=fn(yv(a.lessThan(bn(4)),i,s)).toVar(),u=fn(Pa(2,yv(a.lessThan(bn(4)),s,i))).toVar();return bv(o,xn(a.bitAnd(bn(1)))).add(bv(u,xn(a.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_0",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Sv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=bn(e).toVar(),u=bn(o.bitAnd(bn(15))).toVar(),l=fn(yv(u.lessThan(bn(8)),a,n)).toVar(),d=fn(yv(u.lessThan(bn(4)),n,yv(u.equal(bn(12)).or(u.equal(bn(14))),a,i))).toVar();return bv(l,xn(u.bitAnd(bn(1)))).add(bv(d,xn(u.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_1",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),Rv=Db([Nv,Sv]),Ev=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=En(e).toVar();return Sn(Rv(n.x,i,s),Rv(n.y,i,s),Rv(n.z,i,s))}).setLayout({name:"mx_gradient_vec3_0",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Av=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=En(e).toVar();return Sn(Rv(o.x,a,n,i),Rv(o.y,a,n,i),Rv(o.z,a,n,i))}).setLayout({name:"mx_gradient_vec3_1",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),wv=Db([Ev,Av]),Cv=dn(([e])=>{const t=fn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Mv=dn(([e])=>{const t=fn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Bv=Db([Cv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Fv=Db([Mv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Lv=dn(([e,t])=>{const r=yn(t).toVar(),s=bn(e).toVar();return s.shiftLeft(r).bitOr(s.shiftRight(yn(32).sub(r)))}).setLayout({name:"mx_rotl32",type:"uint",inputs:[{name:"x",type:"uint"},{name:"k",type:"int"}]}),Pv=dn(([e,t,r])=>{e.subAssign(r),e.bitXorAssign(Lv(r,yn(4))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(6))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(8))),t.addAssign(e),e.subAssign(r),e.bitXorAssign(Lv(r,yn(16))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(19))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(4))),t.addAssign(e)}),Dv=dn(([e,t,r])=>{const s=bn(r).toVar(),i=bn(t).toVar(),n=bn(e).toVar();return s.bitXorAssign(i),s.subAssign(Lv(i,yn(14))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(11))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(25))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(16))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(4))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(14))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(24))),s}).setLayout({name:"mx_bjfinal",type:"uint",inputs:[{name:"a",type:"uint"},{name:"b",type:"uint"},{name:"c",type:"uint"}]}),Uv=dn(([e])=>{const t=bn(e).toVar();return fn(t).div(fn(bn(yn(4294967295))))}).setLayout({name:"mx_bits_to_01",type:"float",inputs:[{name:"bits",type:"uint"}]}),Iv=dn(([e])=>{const t=fn(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:"mx_fade",type:"float",inputs:[{name:"t",type:"float"}]}),Ov=Db([dn(([e])=>{const t=yn(e).toVar(),r=bn(bn(1)).toVar(),s=bn(bn(yn(3735928559)).add(r.shiftLeft(bn(2))).add(bn(13))).toVar();return Dv(s.add(bn(t)),s,s)}).setLayout({name:"mx_hash_int_0",type:"uint",inputs:[{name:"x",type:"int"}]}),dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(bn(2)).toVar(),n=bn().toVar(),a=bn().toVar(),o=bn().toVar();return n.assign(a.assign(o.assign(bn(yn(3735928559)).add(i.shiftLeft(bn(2))).add(bn(13))))),n.addAssign(bn(s)),a.addAssign(bn(r)),Dv(n,a,o)}).setLayout({name:"mx_hash_int_1",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(bn(3)).toVar(),o=bn().toVar(),u=bn().toVar(),l=bn().toVar();return o.assign(u.assign(l.assign(bn(yn(3735928559)).add(a.shiftLeft(bn(2))).add(bn(13))))),o.addAssign(bn(n)),u.addAssign(bn(i)),l.addAssign(bn(s)),Dv(o,u,l)}).setLayout({name:"mx_hash_int_2",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]}),dn(([e,t,r,s])=>{const i=yn(s).toVar(),n=yn(r).toVar(),a=yn(t).toVar(),o=yn(e).toVar(),u=bn(bn(4)).toVar(),l=bn().toVar(),d=bn().toVar(),c=bn().toVar();return l.assign(d.assign(c.assign(bn(yn(3735928559)).add(u.shiftLeft(bn(2))).add(bn(13))))),l.addAssign(bn(o)),d.addAssign(bn(a)),c.addAssign(bn(n)),Pv(l,d,c),l.addAssign(bn(i)),Dv(l,d,c)}).setLayout({name:"mx_hash_int_3",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"}]}),dn(([e,t,r,s,i])=>{const n=yn(i).toVar(),a=yn(s).toVar(),o=yn(r).toVar(),u=yn(t).toVar(),l=yn(e).toVar(),d=bn(bn(5)).toVar(),c=bn().toVar(),h=bn().toVar(),p=bn().toVar();return c.assign(h.assign(p.assign(bn(yn(3735928559)).add(d.shiftLeft(bn(2))).add(bn(13))))),c.addAssign(bn(l)),h.addAssign(bn(u)),p.addAssign(bn(o)),Pv(c,h,p),c.addAssign(bn(a)),h.addAssign(bn(n)),Dv(c,h,p)}).setLayout({name:"mx_hash_int_4",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"},{name:"yy",type:"int"}]})]),Vv=Db([dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(Ov(s,r)).toVar(),n=En().toVar();return n.x.assign(i.bitAnd(yn(255))),n.y.assign(i.shiftRight(yn(8)).bitAnd(yn(255))),n.z.assign(i.shiftRight(yn(16)).bitAnd(yn(255))),n}).setLayout({name:"mx_hash_vec3_0",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(Ov(n,i,s)).toVar(),o=En().toVar();return o.x.assign(a.bitAnd(yn(255))),o.y.assign(a.shiftRight(yn(8)).bitAnd(yn(255))),o.z.assign(a.shiftRight(yn(16)).bitAnd(yn(255))),o}).setLayout({name:"mx_hash_vec3_1",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]})]),kv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=fn(_v(Rv(Ov(r,s),i,n),Rv(Ov(r.add(yn(1)),s),i.sub(1),n),Rv(Ov(r,s.add(yn(1))),i,n.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=fn(vv(Rv(Ov(r,s,i),n,a,o),Rv(Ov(r.add(yn(1)),s,i),n.sub(1),a,o),Rv(Ov(r,s.add(yn(1)),i),n,a.sub(1),o),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),Rv(Ov(r,s,i.add(yn(1))),n,a,o.sub(1)),Rv(Ov(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),Rv(Ov(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"}]})]),Gv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=Sn(_v(wv(Vv(r,s),i,n),wv(Vv(r.add(yn(1)),s),i.sub(1),n),wv(Vv(r,s.add(yn(1))),i,n.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=Sn(vv(wv(Vv(r,s,i),n,a,o),wv(Vv(r.add(yn(1)),s,i),n.sub(1),a,o),wv(Vv(r,s.add(yn(1)),i),n,a.sub(1),o),wv(Vv(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),wv(Vv(r,s,i.add(yn(1))),n,a,o.sub(1)),wv(Vv(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),wv(Vv(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"}]})]),$v=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Uv(Ov(r))}).setLayout({name:"mx_cell_noise_float_0",type:"float",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Uv(Ov(r,s))}).setLayout({name:"mx_cell_noise_float_1",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Uv(Ov(r,s,i))}).setLayout({name:"mx_cell_noise_float_2",type:"float",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Uv(Ov(r,s,i,n))}).setLayout({name:"mx_cell_noise_float_3",type:"float",inputs:[{name:"p",type:"vec4"}]})]),zv=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Sn(Uv(Ov(r,yn(0))),Uv(Ov(r,yn(1))),Uv(Ov(r,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Sn(Uv(Ov(r,s,yn(0))),Uv(Ov(r,s,yn(1))),Uv(Ov(r,s,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Sn(Uv(Ov(r,s,i,yn(0))),Uv(Ov(r,s,i,yn(1))),Uv(Ov(r,s,i,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_2",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Sn(Uv(Ov(r,s,i,n,yn(0))),Uv(Ov(r,s,i,n,yn(1))),Uv(Ov(r,s,i,n,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_3",type:"vec3",inputs:[{name:"p",type:"vec4"}]})]),Wv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=fn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(kv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_float",type:"float",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Hv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(Gv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_vec3",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),qv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar();return Tn(Wv(o,a,n,i),Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i))}).setLayout({name:"mx_fractal_noise_vec2",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),jv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(Hv(o,a,n,i)).toVar(),l=fn(Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i)).toVar();return wn(u,l)}).setLayout({name:"mx_fractal_noise_vec4",type:"vec4",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Xv=Db([dn(([e,t,r,s,i,n,a])=>{const o=yn(a).toVar(),u=fn(n).toVar(),l=yn(i).toVar(),d=yn(s).toVar(),c=yn(r).toVar(),h=yn(t).toVar(),p=Tn(e).toVar(),g=Sn(zv(Tn(h.add(d),c.add(l)))).toVar(),m=Tn(g.x,g.y).toVar();m.subAssign(.5),m.mulAssign(u),m.addAssign(.5);const f=Tn(Tn(fn(h),fn(c)).add(m)).toVar(),y=Tn(f.sub(p)).toVar();return pn(o.equal(yn(2)),()=>Fo(y.x).add(Fo(y.y))),pn(o.equal(yn(3)),()=>jo(Fo(y.x),Fo(y.y))),Zo(y,y)}).setLayout({name:"mx_worley_distance_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),dn(([e,t,r,s,i,n,a,o,u])=>{const l=yn(u).toVar(),d=fn(o).toVar(),c=yn(a).toVar(),h=yn(n).toVar(),p=yn(i).toVar(),g=yn(s).toVar(),m=yn(r).toVar(),f=yn(t).toVar(),y=Sn(e).toVar(),b=Sn(zv(Sn(f.add(p),m.add(h),g.add(c)))).toVar();b.subAssign(.5),b.mulAssign(d),b.addAssign(.5);const x=Sn(Sn(fn(f),fn(m),fn(g)).add(b)).toVar(),T=Sn(x.sub(y)).toVar();return pn(l.equal(yn(2)),()=>Fo(T.x).add(Fo(T.y)).add(Fo(T.z))),pn(l.equal(yn(3)),()=>jo(Fo(T.x),Fo(T.y),Fo(T.z))),Zo(T,T)}).setLayout({name:"mx_worley_distance_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"zoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Kv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();l.assign(qo(l,r))})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Qv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.y.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec2_0",type:"vec2",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Yv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(r)}).ElseIf(r.lessThan(l.z),()=>{l.z.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Zv=Db([Kv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();d.assign(qo(d,n))})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Jv=Db([Qv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.y.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec2_1",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),eN=Db([Yv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.z.assign(d.y),d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.z.assign(d.y),d.y.assign(n)}).ElseIf(n.lessThan(d.z),()=>{d.z.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),tN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Tn(t).toVar(),p=Tn(r).toVar(),g=Tn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(Sn(v,0),x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise2d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"texcoord",type:"vec2"},{name:"freq",type:"vec2"},{name:"offset",type:"vec2"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),rN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Sn(t).toVar(),p=Sn(r).toVar(),g=Sn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(v,x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise3d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"position",type:"vec3"},{name:"freq",type:"vec3"},{name:"offset",type:"vec3"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),sN=dn(([e])=>{const t=e.y,r=e.z,s=Sn().toVar();return pn(t.lessThan(1e-4),()=>{s.assign(Sn(r,r,r))}).Else(()=>{let i=e.x;i=i.sub(vo(i)).mul(6).toVar();const n=yn(Go(i)),a=i.sub(fn(n)),o=r.mul(t.oneMinus()),u=r.mul(t.mul(a).oneMinus()),l=r.mul(t.mul(a.oneMinus()).oneMinus());pn(n.equal(yn(0)),()=>{s.assign(Sn(r,l,o))}).ElseIf(n.equal(yn(1)),()=>{s.assign(Sn(u,r,o))}).ElseIf(n.equal(yn(2)),()=>{s.assign(Sn(o,r,l))}).ElseIf(n.equal(yn(3)),()=>{s.assign(Sn(o,u,r))}).ElseIf(n.equal(yn(4)),()=>{s.assign(Sn(l,o,r))}).Else(()=>{s.assign(Sn(r,o,u))})}),s}).setLayout({name:"mx_hsvtorgb",type:"vec3",inputs:[{name:"hsv",type:"vec3"}]}),iN=dn(([e])=>{const t=Sn(e).toVar(),r=fn(t.x).toVar(),s=fn(t.y).toVar(),i=fn(t.z).toVar(),n=fn(qo(r,qo(s,i))).toVar(),a=fn(jo(r,jo(s,i))).toVar(),o=fn(a.sub(n)).toVar(),u=fn().toVar(),l=fn().toVar(),d=fn().toVar();return d.assign(a),pn(a.greaterThan(0),()=>{l.assign(o.div(a))}).Else(()=>{l.assign(0)}),pn(l.lessThanEqual(0),()=>{u.assign(0)}).Else(()=>{pn(r.greaterThanEqual(a),()=>{u.assign(s.sub(i).div(o))}).ElseIf(s.greaterThanEqual(a),()=>{u.assign(Fa(2,i.sub(r).div(o)))}).Else(()=>{u.assign(Fa(4,r.sub(s).div(o)))}),u.mulAssign(1/6),pn(u.lessThan(0),()=>{u.addAssign(1)})}),Sn(u,l,d)}).setLayout({name:"mx_rgbtohsv",type:"vec3",inputs:[{name:"c",type:"vec3"}]}),nN=dn(([e])=>{const t=Sn(e).toVar(),r=An(ka(t,Sn(.04045))).toVar(),s=Sn(t.div(12.92)).toVar(),i=Sn(eu(jo(t.add(Sn(.055)),Sn(0)).div(1.055),Sn(2.4))).toVar();return ou(s,i,r)}).setLayout({name:"mx_srgb_texture_to_lin_rec709",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),aN=(e,t)=>{e=fn(e),t=fn(t);const r=Tn(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return cu(e.sub(r),e.add(r),t)},oN=(e,t,r,s)=>ou(e,t,r[s].clamp()),uN=(e,t,r,s,i)=>ou(e,t,aN(r,s[i])),lN=dn(([e,t,r])=>{const s=So(e).toVar(),i=La(fn(.5).mul(t.sub(r)),Zd).div(s).toVar(),n=La(fn(-.5).mul(t.sub(r)),Zd).div(s).toVar(),a=Sn().toVar();a.x=s.x.greaterThan(fn(0)).select(i.x,n.x),a.y=s.y.greaterThan(fn(0)).select(i.y,n.y),a.z=s.z.greaterThan(fn(0)).select(i.z,n.z);const o=qo(a.x,a.y,a.z).toVar();return Zd.add(s.mul(o)).toVar().sub(r)}),dN=dn(([e,t])=>{const r=e.x,s=e.y,i=e.z;let n=t.element(0).mul(.886227);return n=n.add(t.element(1).mul(1.023328).mul(s)),n=n.add(t.element(2).mul(1.023328).mul(i)),n=n.add(t.element(3).mul(1.023328).mul(r)),n=n.add(t.element(4).mul(.858086).mul(r).mul(s)),n=n.add(t.element(5).mul(.858086).mul(s).mul(i)),n=n.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),n=n.add(t.element(7).mul(.858086).mul(r).mul(i)),n=n.add(t.element(8).mul(.429043).mul(Pa(r,r).sub(Pa(s,s)))),n});var cN=Object.freeze({__proto__:null,BRDF_GGX:tm,BRDF_Lambert:kg,BasicPointShadowFilter:av,BasicShadowFilter:U_,Break:Ap,Const:Bu,Continue:()=>fl("continue").toStack(),DFGLUT:im,D_GGX:Zg,Discard:yl,EPSILON:no,F_Schlick:Vg,Fn:dn,HALF_PI:co,INFINITY:ao,If:pn,Loop:Ep,NodeAccess:si,NodeShaderStage:ei,NodeType:ri,NodeUpdateType:ti,OnBeforeMaterialUpdate:e=>_x(Tx.BEFORE_MATERIAL,e),OnBeforeObjectUpdate:e=>_x(Tx.BEFORE_OBJECT,e),OnMaterialUpdate:e=>_x(Tx.MATERIAL,e),OnObjectUpdate:e=>_x(Tx.OBJECT,e),PCFShadowFilter:I_,PCFSoftShadowFilter:O_,PI:oo,PI2:uo,PointShadowFilter:ov,Return:()=>fl("return").toStack(),Schlick_to_F0:om,ShaderNode:Ji,Stack:gn,Switch:(...e)=>Ni.Switch(...e),TBNViewMatrix:oh,TWO_PI:lo,VSMShadowFilter:V_,V_GGX_SmithCorrelated:Qg,Var:Mu,VarIntent:Fu,abs:Fo,acesFilmicToneMapping:oT,acos:Mo,add:Fa,addMethodChaining:Ri,addNodeElement:function(e){d("TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add",e)},agxToneMapping:cT,all:ho,alphaT:Zn,and:za,anisotropy:Jn,anisotropyB:ta,anisotropyT:ea,any:po,append:e=>(d("TSL: append() has been renamed to Stack().",new Us),gn(e)),array:Ra,arrayBuffer:e=>new _i(e,"ArrayBuffer"),asin:Co,assign:Aa,atan:Bo,atomicAdd:(e,t)=>VT(IT.ATOMIC_ADD,e,t),atomicAnd:(e,t)=>VT(IT.ATOMIC_AND,e,t),atomicFunc:VT,atomicLoad:e=>VT(IT.ATOMIC_LOAD,e,null),atomicMax:(e,t)=>VT(IT.ATOMIC_MAX,e,t),atomicMin:(e,t)=>VT(IT.ATOMIC_MIN,e,t),atomicOr:(e,t)=>VT(IT.ATOMIC_OR,e,t),atomicStore:(e,t)=>VT(IT.ATOMIC_STORE,e,t),atomicSub:(e,t)=>VT(IT.ATOMIC_SUB,e,t),atomicXor:(e,t)=>VT(IT.ATOMIC_XOR,e,t),attenuationColor:ga,attenuationDistance:pa,attribute:El,attributeArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new Nx(e,r,s);return up(i,t,e)},backgroundBlurriness:wx,backgroundIntensity:Cx,backgroundRotation:Mx,batch:_p,bentNormalView:lh,billboarding:Gb,bitAnd:ja,bitNot:Xa,bitOr:Ka,bitXor:Qa,bitangentGeometry:sh,bitangentLocal:ih,bitangentView:nh,bitangentWorld:ah,bitcast:pb,blendBurn:dg,blendColor:gg,blendDodge:cg,blendOverlay:pg,blendScreen:hg,blur:uf,bool:xn,buffer:Vl,bufferAttribute:tl,builtin:Wl,builtinAOContext:Eu,builtinShadowContext:Ru,bumpMap:yh,bvec2:Nn,bvec3:An,bvec4:Bn,bypass:cl,cache:ll,call:Ca,cameraFar:xd,cameraIndex:yd,cameraNear:bd,cameraNormalMatrix:Sd,cameraPosition:Rd,cameraProjectionMatrix:Td,cameraProjectionMatrixInverse:_d,cameraViewMatrix:vd,cameraViewport:Ed,cameraWorldMatrix:Nd,cbrt:nu,cdl:jx,ceil:No,checker:mv,cineonToneMapping:nT,clamp:uu,clearcoat:Hn,clearcoatNormalView:pc,clearcoatRoughness:qn,clipSpace:Xd,code:gT,color:mn,colorSpaceToWorking:zu,colorToDirection:e=>en(e).mul(2).sub(1),compute:al,computeKernel:nl,computeSkinning:(e,t=null)=>{const r=new Np(e);return r.positionNode=up(new j(e.geometry.getAttribute("position").array,3),"vec3").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinIndexNode=up(new j(new Uint32Array(e.geometry.getAttribute("skinIndex").array),4),"uvec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinWeightNode=up(new j(e.geometry.getAttribute("skinWeight").array,4),"vec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.bindMatrixNode=Na(e.bindMatrix,"mat4"),r.bindMatrixInverseNode=Na(e.bindMatrixInverse,"mat4"),r.boneMatricesNode=Vl(e.skeleton.boneMatrices,"mat4",e.skeleton.bones.length),r.toPositionNode=t,en(r)},context:vu,convert:Un,convertColorSpace:(e,t,r)=>new Gu(en(e),t,r),convertToTexture:(e,...t)=>e.isSampleNode||e.isTextureNode?e:e.isPassNode?e.getTextureNode():px(e,...t),cos:Ao,countLeadingZeros:bb,countOneBits:xb,countTrailingZeros:yb,cross:Jo,cubeTexture:Bc,cubeTextureBase:Mc,dFdx:Io,dFdy:Oo,dashSize:oa,debug:_l,decrement:ro,decrementBefore:eo,defaultBuildStages:ni,defaultShaderStages:ii,defined:Yi,degrees:mo,deltaTime:Ib,densityFogFactor:xT,depth:tg,depthPass:(e,t,r)=>new tT(tT.DEPTH,e,t,r),determinant:Wo,difference:Yo,diffuseColor:kn,diffuseContribution:Gn,directPointLight:pv,directionToColor:dh,directionToFaceDirection:nc,dispersion:ma,disposeShadowMaterial:G_,distance:Qo,div:Da,dot:Zo,drawIndex:mp,dynamicBufferAttribute:(e,t=null,r=0,s=0)=>el(e,t,r,s,x),element:Dn,emissive:$n,equal:Ia,equirectUV:Eg,exp:fo,exp2:yo,exponentialHeightFogFactor:TT,expression:fl,faceDirection:ic,faceForward:hu,faceforward:yu,float:fn,floatBitsToInt:e=>new hb(e,"int","float"),floatBitsToUint:gb,floor:vo,fog:_T,fract:Ro,frameGroup:xa,frameId:Ob,frontFacing:sc,fwidth:$o,gain:(e,t)=>e.lessThan(.5)?_b(e.mul(2),t).div(2):La(1,_b(Pa(La(1,e),2),t).div(2)),gapSize:ua,getConstNodeType:Zi,getCurrentStack:hn,getDirection:sf,getDistanceAttenuation:hv,getGeometryRoughness:Xg,getNormalFromDepth:fx,getParallaxCorrectNormal:lN,getRoughness:Kg,getScreenPosition:mx,getShIrradianceAt:dN,getShadowMaterial:k_,getShadowRenderObjectFunction:W_,getTextureIndex:lb,getViewPosition:gx,ggxConvolution:hf,globalId:MT,glsl:(e,t)=>gT(e,t,"glsl"),glslFn:(e,t)=>fT(e,t,"glsl"),grayscale:$x,greaterThan:ka,greaterThanEqual:$a,hash:Tb,highpModelNormalViewMatrix:jd,highpModelViewMatrix:qd,hue:Hx,increment:to,incrementBefore:Ja,inspector:Sl,instance:yp,instanceIndex:cp,instancedArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new vx(e,r,s);return up(i,t,i.count)},instancedBufferAttribute:rl,instancedDynamicBufferAttribute:sl,instancedMesh:xp,int:yn,intBitsToFloat:e=>new hb(e,"float","int"),interleavedGradientNoise:yx,inverse:Ho,inverseSqrt:_o,inversesqrt:bu,invocationLocalIndex:gp,invocationSubgroupIndex:pp,ior:da,iridescence:Kn,iridescenceIOR:Qn,iridescenceThickness:Yn,isolate:ul,ivec2:_n,ivec3:Rn,ivec4:Cn,js:(e,t)=>gT(e,t,"js"),label:Au,length:Po,lengthSq:au,lessThan:Va,lessThanEqual:Ga,lightPosition:f_,lightProjectionUV:m_,lightShadowMatrix:g_,lightTargetDirection:x_,lightTargetPosition:y_,lightViewPosition:b_,lightingContext:Up,lights:(e=[])=>(new N_).setLights(e),linearDepth:rg,linearToneMapping:sT,localId:BT,log:bo,log2:xo,logarithmicDepthToViewZ:(e,t,r)=>{const s=e.mul(bo(r.div(t)));return fn(Math.E).pow(s).mul(t).negate()},luminance:qx,mat2:Fn,mat3:Ln,mat4:Pn,matcapUV:Qf,materialAO:rp,materialAlphaTest:Th,materialAnisotropy:Vh,materialAnisotropyVector:sp,materialAttenuationColor:jh,materialAttenuationDistance:qh,materialClearcoat:Lh,materialClearcoatNormal:Dh,materialClearcoatRoughness:Ph,materialColor:_h,materialDispersion:ep,materialEmissive:Nh,materialEnvIntensity:vc,materialEnvRotation:Nc,materialIOR:Hh,materialIridescence:kh,materialIridescenceIOR:Gh,materialIridescenceThickness:$h,materialLightMap:tp,materialLineDashOffset:Zh,materialLineDashSize:Kh,materialLineGapSize:Qh,materialLineScale:Xh,materialLineWidth:Yh,materialMetalness:Bh,materialNormal:Fh,materialOpacity:Sh,materialPointSize:Jh,materialReference:Ic,materialReflectivity:Ch,materialRefractionRatio:_c,materialRotation:Uh,materialRoughness:Mh,materialSheen:Ih,materialSheenRoughness:Oh,materialShininess:vh,materialSpecular:Rh,materialSpecularColor:Ah,materialSpecularIntensity:Eh,materialSpecularStrength:wh,materialThickness:Wh,materialTransmission:zh,max:jo,maxMipLevel:Bl,mediumpModelViewMatrix:Hd,metalness:Wn,min:qo,mix:ou,mixElement:gu,mod:Ua,modInt:so,modelDirection:Ud,modelNormalMatrix:$d,modelPosition:Od,modelRadius:Gd,modelScale:Vd,modelViewMatrix:Wd,modelViewPosition:kd,modelViewProjection:ip,modelWorldMatrix:Id,modelWorldMatrixInverse:zd,morphReference:Fp,mrt:cb,mul:Pa,mx_aastep:aN,mx_add:(e,t=fn(0))=>Fa(e,t),mx_atan2:(e=fn(0),t=fn(1))=>Bo(e,t),mx_cell_noise_float:(e=Al())=>$v(e.convert("vec2|vec3")),mx_contrast:(e,t=1,r=.5)=>fn(e).sub(r).mul(t).add(r),mx_divide:(e,t=fn(1))=>Da(e,t),mx_fractal_noise_float:(e=Al(),t=3,r=2,s=.5,i=1)=>Wv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec2:(e=Al(),t=3,r=2,s=.5,i=1)=>qv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec3:(e=Al(),t=3,r=2,s=.5,i=1)=>Hv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec4:(e=Al(),t=3,r=2,s=.5,i=1)=>jv(e,yn(t),r,s).mul(i),mx_frame:()=>Ob,mx_heighttonormal:(e,t)=>(e=Sn(e),t=fn(t),yh(e,t)),mx_hsvtorgb:sN,mx_ifequal:(e,t,r,s)=>e.equal(t).mix(r,s),mx_ifgreater:(e,t,r,s)=>e.greaterThan(t).mix(r,s),mx_ifgreatereq:(e,t,r,s)=>e.greaterThanEqual(t).mix(r,s),mx_invert:(e,t=fn(1))=>La(t,e),mx_modulo:(e,t=fn(1))=>Ua(e,t),mx_multiply:(e,t=fn(1))=>Pa(e,t),mx_noise_float:(e=Al(),t=1,r=0)=>kv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec3:(e=Al(),t=1,r=0)=>Gv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec4:(e=Al(),t=1,r=0)=>{e=e.convert("vec2|vec3");return wn(Gv(e),kv(e.add(Tn(19,73)))).mul(t).add(r)},mx_place2d:(e,t=Tn(.5,.5),r=Tn(1,1),s=fn(0),i=Tn(0,0))=>{let n=e;if(t&&(n=n.sub(t)),r&&(n=n.mul(r)),s){const e=s.mul(Math.PI/180),t=e.cos(),r=e.sin();n=Tn(n.x.mul(t).sub(n.y.mul(r)),n.x.mul(r).add(n.y.mul(t)))}return t&&(n=n.add(t)),i&&(n=n.add(i)),n},mx_power:(e,t=fn(1))=>eu(e,t),mx_ramp4:(e,t,r,s,i=Al())=>{const n=i.x.clamp(),a=i.y.clamp(),o=ou(e,t,n),u=ou(r,s,n);return ou(o,u,a)},mx_ramplr:(e,t,r=Al())=>oN(e,t,r,"x"),mx_ramptb:(e,t,r=Al())=>oN(e,t,r,"y"),mx_rgbtohsv:iN,mx_rotate2d:(e,t)=>{e=Tn(e);const r=(t=fn(t)).mul(Math.PI/180);return ey(e,r)},mx_rotate3d:(e,t,r)=>{e=Sn(e),t=fn(t),r=Sn(r);const s=t.mul(Math.PI/180),i=r.normalize(),n=s.cos(),a=s.sin(),o=fn(1).sub(n);return e.mul(n).add(i.cross(e).mul(a)).add(i.mul(i.dot(e)).mul(o))},mx_safepower:(e,t=1)=>(e=fn(e)).abs().pow(t).mul(e.sign()),mx_separate:(e,t=null)=>{if("string"==typeof t){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3},s=t.replace(/^out/,"").toLowerCase();if(void 0!==r[s])return e.element(r[s])}if("number"==typeof t)return e.element(t);if("string"==typeof t&&1===t.length){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3};if(void 0!==r[t])return e.element(r[t])}return e},mx_splitlr:(e,t,r,s=Al())=>uN(e,t,r,s,"x"),mx_splittb:(e,t,r,s=Al())=>uN(e,t,r,s,"y"),mx_srgb_texture_to_lin_rec709:nN,mx_subtract:(e,t=fn(0))=>La(e,t),mx_timer:()=>Ub,mx_transform_uv:(e=1,t=0,r=Al())=>r.mul(e).add(t),mx_unifiednoise2d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>tN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_unifiednoise3d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>rN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_worley_noise_float:(e=Al(),t=1)=>Zv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec2:(e=Al(),t=1)=>Jv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec3:(e=Al(),t=1)=>eN(e.convert("vec2|vec3"),t,yn(1)),negate:Do,neutralToneMapping:hT,nodeArray:sn,nodeImmutable:an,nodeObject:en,nodeObjectIntent:tn,nodeObjects:rn,nodeProxy:nn,nodeProxyIntent:on,normalFlat:uc,normalGeometry:ac,normalLocal:oc,normalMap:ph,normalView:cc,normalViewGeometry:lc,normalWorld:hc,normalWorldGeometry:dc,normalize:So,not:Ha,notEqual:Oa,numWorkgroups:wT,objectDirection:Cd,objectGroup:_a,objectPosition:Bd,objectRadius:Pd,objectScale:Fd,objectViewPosition:Ld,objectWorldMatrix:Md,oneMinus:Uo,or:Wa,orthographicDepthToViewZ:Kp,oscSawtooth:(e=Ub)=>e.fract(),oscSine:(e=Ub)=>e.add(.75).mul(2*Math.PI).sin().mul(.5).add(.5),oscSquare:(e=Ub)=>e.fract().round(),oscTriangle:(e=Ub)=>e.add(.5).fract().mul(2).sub(1).abs(),output:aa,outputStruct:nb,overloadingFn:Db,packHalf2x16:Rb,packSnorm2x16:Nb,packUnorm2x16:Sb,parabola:_b,parallaxDirection:uh,parallaxUV:(e,t)=>e.sub(uh.mul(t)),parameter:(e,t)=>new Jy(e,t),pass:(e,t,r)=>new tT(tT.COLOR,e,t,r),passTexture:(e,t)=>new Jx(e,t),pcurve:(e,t,r)=>eu(Da(eu(e,t),Fa(eu(e,t),eu(La(1,e),r))),1/t),perspectiveDepthToViewZ:Zp,pmremTexture:Df,pointShadow:dv,pointUV:Rx,pointWidth:la,positionGeometry:Kd,positionLocal:Qd,positionPrevious:Yd,positionView:ec,positionViewDirection:tc,positionWorld:Zd,positionWorldDirection:Jd,posterize:Xx,pow:eu,pow2:tu,pow3:ru,pow4:su,premultiplyAlpha:mg,property:On,quadBroadcast:c_,quadSwapDiagonal:n_,quadSwapX:s_,quadSwapY:i_,radians:go,rand:pu,range:RT,rangeFogFactor:bT,reciprocal:ko,reference:Pc,referenceBuffer:Dc,reflect:Ko,reflectVector:Ec,reflectView:Sc,reflector:e=>new nx(e),refract:du,refractVector:Ac,refractView:Rc,reinhardToneMapping:iT,remap:pl,remapClamp:gl,renderGroup:Ta,renderOutput:xl,rendererReference:ju,replaceDefaultUV:function(e,t=null){return vu(t,{getUV:"function"==typeof e?e:()=>e})},rotate:ey,rotateUV:Vb,roughness:zn,round:Vo,rtt:px,sRGBTransferEOTF:Ou,sRGBTransferOETF:Vu,sample:(e,t=null)=>new xx(e,en(t)),sampler:e=>(!0===e.isNode?e:Ul(e)).convert("sampler"),samplerComparison:e=>(!0===e.isNode?e:Ul(e)).convert("samplerComparison"),saturate:lu,saturation:zx,screenCoordinate:Yl,screenDPR:Xl,screenSize:Ql,screenUV:Kl,select:Tu,setCurrentStack:cn,setName:Su,shaderStages:ai,shadow:Y_,shadowPositionWorld:R_,shapeCircle:fv,sharedUniformGroup:ba,sheen:jn,sheenRoughness:Xn,shiftLeft:Ya,shiftRight:Za,shininess:na,sign:Lo,sin:Eo,sinc:(e,t)=>Eo(oo.mul(t.mul(e).sub(1))).div(oo.mul(t.mul(e).sub(1))),skinning:Sp,smoothstep:cu,smoothstepElement:mu,specularColor:ra,specularColorBlended:sa,specularF90:ia,spherizeUV:kb,split:(e,t)=>new fi(en(e),t),spritesheetUV:zb,sqrt:To,stack:tb,step:Xo,stepElement:fu,storage:up,storageBarrier:()=>PT("storage").toStack(),storageTexture:Fx,string:(e="")=>new _i(e,"string"),struct:(e,t=null)=>{const r=new rb(e,t),s=(...t)=>{let s=null;if(t.length>0)if(t[0].isNode){s={};const r=Object.keys(e);for(let e=0;eDx(e,t).level(r),texture3DLoad:(...e)=>Dx(...e).setSampler(!1),textureBarrier:()=>PT("texture").toStack(),textureBicubic:Am,textureBicubicLevel:Em,textureCubeUV:nf,textureLevel:(e,t,r)=>Ul(e,t).level(r),textureLoad:Il,textureSize:Cl,textureStore:(e,t,r)=>{let s;return!0===e.isStorageTextureNode?(s=e.clone(),s.uvNode=t,s.storeNode=r):s=Fx(e,t,r),null!==r&&s.toStack(),s},thickness:ha,time:Ub,toneMapping:Ku,toneMappingExposure:Qu,toonOutlinePass:(t,r,s=new e(0,0,0),i=.003,n=1)=>new rT(t,r,en(s),en(i),en(n)),transformDirection:iu,transformNormal:gc,transformNormalToView:mc,transformedClearcoatNormalView:bc,transformedNormalView:fc,transformedNormalWorld:yc,transmission:ca,transpose:zo,triNoise3D:Fb,triplanarTexture:(...e)=>Wb(...e),triplanarTextures:Wb,trunc:Go,uint:bn,uintBitsToFloat:e=>new hb(e,"float","uint"),uniform:Na,uniformArray:$l,uniformCubeTexture:(e=wc)=>Mc(e),uniformFlow:Nu,uniformGroup:ya,uniformTexture:(e=Ll)=>Ul(e),unpackHalf2x16:Cb,unpackNormal:ch,unpackSnorm2x16:Ab,unpackUnorm2x16:wb,unpremultiplyAlpha:fg,userData:(e,t,r)=>new Ux(e,t,r),uv:Al,uvec2:vn,uvec3:En,uvec4:Mn,varying:Uu,varyingProperty:Vn,vec2:Tn,vec3:Sn,vec4:wn,vectorComponents:oi,velocity:Gx,vertexColor:lg,vertexIndex:dp,vertexStage:Iu,vibrance:Wx,viewZToLogarithmicDepth:Jp,viewZToOrthographicDepth:Xp,viewZToPerspectiveDepth:Qp,viewZToReversedOrthographicDepth:(e,t,r)=>e.add(r).div(r.sub(t)),viewZToReversedPerspectiveDepth:Yp,viewport:Zl,viewportCoordinate:ed,viewportDepthTexture:qp,viewportLinearDepth:sg,viewportMipTexture:Gp,viewportOpaqueMipTexture:zp,viewportResolution:rd,viewportSafeUV:$b,viewportSharedTexture:Yx,viewportSize:Jl,viewportTexture:kp,viewportUV:td,vogelDiskSample:bx,wgsl:(e,t)=>gT(e,t,"wgsl"),wgslFn:(e,t)=>fT(e,t,"wgsl"),workgroupArray:(e,t)=>new UT("Workgroup",e,t),workgroupBarrier:()=>PT("workgroup").toStack(),workgroupId:CT,workingToColorSpace:$u,xor:qa});const hN=new Zy;class pN extends _y{constructor(e,t){super(),this.renderer=e,this.nodes=t}update(e,t,r){const s=this.renderer,i=this.nodes.getBackgroundNode(e)||e.background;let n=!1;if(null===i)s._clearColor.getRGB(hN),hN.a=s._clearColor.a;else if(!0===i.isColor)i.getRGB(hN),hN.a=1,n=!0;else if(!0===i.isNode){const u=this.get(e),l=i;hN.copy(s._clearColor);let d=u.backgroundMesh;if(void 0===d){const h=wn(l).mul(Cx).context({getUV:()=>Mx.mul(dc),getTextureLevel:()=>wx}),p=Td.element(3).element(3).equal(1),g=Da(1,Td.element(1).element(1)).mul(3),m=p.select(Qd.mul(g),Qd),f=Wd.mul(wn(m,0));let y=Td.mul(wn(f.xyz,1));y=y.setZ(y.w);const b=new yg;function x(){i.removeEventListener("dispose",x),d.material.dispose(),d.geometry.dispose()}b.name="Background.material",b.side=L,b.depthTest=!1,b.depthWrite=!1,b.allowOverride=!1,b.fog=!1,b.lights=!1,b.vertexNode=y,b.colorNode=h,u.backgroundMeshNode=h,u.backgroundMesh=d=new ue(new it(1,32,32),b),d.frustumCulled=!1,d.name="Background.mesh",i.addEventListener("dispose",x)}const c=l.getCacheKey();u.backgroundCacheKey!==c&&(u.backgroundMeshNode.node=wn(l).mul(Cx),u.backgroundMeshNode.needsUpdate=!0,d.material.needsUpdate=!0,u.backgroundCacheKey=c),t.unshift(d,d.geometry,d.material,0,0,null,null)}else o("Renderer: Unsupported background configuration.",i);const a=s.xr.getEnvironmentBlendMode();if("additive"===a?hN.set(0,0,0,1):"alpha-blend"===a&&hN.set(0,0,0,0),!0===s.autoClear||!0===n){const T=r.clearColorValue;T.r=hN.r,T.g=hN.g,T.b=hN.b,T.a=hN.a,!0!==s.backend.isWebGLBackend&&!0!==s.alpha||(T.r*=T.a,T.g*=T.a,T.b*=T.a),r.depthClearValue=s.getClearDepth(),r.stencilClearValue=s.getClearStencil(),r.clearColor=!0===s.autoClearColor,r.clearDepth=!0===s.autoClearDepth,r.clearStencil=!0===s.autoClearStencil}else r.clearColor=!1,r.clearDepth=!1,r.clearStencil=!1}}let gN=0;class mN{constructor(e="",t=[],r=0){this.name=e,this.bindings=t,this.index=r,this.id=gN++}}class fN{constructor(e,t,r,s,i,n,a,o,u,l=[]){this.vertexShader=e,this.fragmentShader=t,this.computeShader=r,this.transforms=l,this.nodeAttributes=s,this.bindings=i,this.updateNodes=n,this.updateBeforeNodes=a,this.updateAfterNodes=o,this.observer=u,this.usedTimes=0}createBindings(){const e=[];for(const t of this.bindings){if(!0!==t.bindings[0].groupNode.shared){const r=new mN(t.name,[],t.index);e.push(r);for(const e of t.bindings)r.bindings.push(e.clone())}else e.push(t)}return e}}class yN{constructor(e,t,r=null){this.isNodeAttribute=!0,this.name=e,this.type=t,this.node=r}}class bN{constructor(e,t,r){this.isNodeUniform=!0,this.name=e,this.type=t,this.node=r}get value(){return this.node.value}set value(e){this.node.value=e}get id(){return this.node.id}get groupNode(){return this.node.groupNode}}class xN{constructor(e,t,r=!1,s=null){this.isNodeVar=!0,this.name=e,this.type=t,this.readOnly=r,this.count=s}}class TN extends xN{constructor(e,t,r=null,s=null){super(e,t),this.needsInterpolation=!1,this.isNodeVarying=!0,this.interpolationType=r,this.interpolationSampling=s}}class _N{constructor(e,t,r=""){this.name=e,this.type=t,this.code=r,Object.defineProperty(this,"isNodeCode",{value:!0})}}let vN=0;class NN{constructor(e=null){this.id=vN++,this.nodesData=new WeakMap,this.parent=e}getData(e){let t=this.nodesData.get(e);return void 0===t&&null!==this.parent&&(t=this.parent.getData(e)),t}setData(e,t){this.nodesData.set(e,t)}}class SN{constructor(e,t){this.name=e,this.members=t,this.output=!1}}class RN{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0,this.index=-1}setValue(e){this.value=e}getValue(){return this.value}}class EN extends RN{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}}class AN extends RN{constructor(e,r=new t){super(e,r),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}}class wN extends RN{constructor(e,t=new r){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}}class CN extends RN{constructor(e,t=new s){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}}class MN extends RN{constructor(t,r=new e){super(t,r),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}}class BN extends RN{constructor(e,t=new i){super(e,t),this.isMatrix2Uniform=!0,this.boundary=8,this.itemSize=4}}class FN extends RN{constructor(e,t=new n){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}}class LN extends RN{constructor(e,t=new a){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}}class PN extends EN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class DN extends AN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class UN extends wN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class IN extends CN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class ON extends MN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class VN extends BN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class kN extends FN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class GN extends LN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}let $N=0;const zN=new WeakMap,WN=new WeakMap,HN=new Map([[Int8Array,"int"],[Int16Array,"int"],[Int32Array,"int"],[Uint8Array,"uint"],[Uint16Array,"uint"],[Uint32Array,"uint"],[Float32Array,"float"]]),qN=e=>/e/g.test(e)?String(e).replace(/\+/g,""):(e=Number(e))+(e%1?"":".0");class jN{constructor(e,t,r){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=r,this.scene=null,this.camera=null,this.nodes=[],this.sequentialNodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.observer=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:"",fragment:"",compute:""},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.types={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.declarations={},this.flow={code:""},this.chaining=[],this.stack=tb(),this.stacks=[],this.tab="\t",this.currentFunctionNode=null,this.context={material:this.material},this.cache=new NN,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.subBuildLayers=[],this.activeStacks=[],this.subBuildFn=null,this.fnCall=null,Object.defineProperty(this,"id",{value:$N++})}isFlatShading(){return!0===this.material.flatShading||!1===this.geometry.hasAttribute("normal")}isOpaque(){const e=this.material;return!1===e.transparent&&e.blending===ze&&!1===e.alphaToCoverage}createRenderTarget(e,t,r){return new ae(e,t,r)}createCubeRenderTarget(e,t){return new Ag(e,t)}includes(e){return this.nodes.includes(e)}getOutputStructName(){}_getBindGroup(e,t){const r=t[0].groupNode;let s,i=r.shared;if(i)for(let e=1;ee.nodeUniform.node.id-t.nodeUniform.node.id);for(const t of e.uniforms)r+=t.nodeUniform.node.id}else r+=e.nodeUniform.id;const i=this.renderer._currentRenderContext||this.renderer;let n=zN.get(i);void 0===n&&(n=new Map,zN.set(i,n));const a=Os(r);s=n.get(a),void 0===s&&(s=new mN(e,t,this.bindingsIndexes[e].group),n.set(a,s))}else s=new mN(e,t,this.bindingsIndexes[e].group);return s}getBindGroupArray(e,t){const r=this.bindings[t];let s=r[e];return void 0===s&&(void 0===this.bindingsIndexes[e]&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),r[e]=s=[]),s}getBindings(){let e=this.bindGroups;if(null===e){const t={},r=this.bindings;for(const e of ai)for(const s in r[e]){const i=r[e][s],n=t[s]||(t[s]=[]);for(const e of i)!1===n.includes(e)&&n.push(e)}e=[];for(const r in t){const s=t[r],i=this._getBindGroup(r,s);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){const e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(n)}u`:"0u";if("bool"===i)return n?"true":"false";if("color"===i)return`${this.getType("vec3")}( ${qN(n.r)}, ${qN(n.g)}, ${qN(n.b)} )`;const a=this.getTypeLength(i),o=this.getComponentType(i),u=e=>this.generateConst(o,e);if(2===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)} )`;if(3===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)} )`;if(4===a&&"mat2"!==i)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)}, ${u(n.w)} )`;if(a>=4&&n&&(n.isMatrix2||n.isMatrix3||n.isMatrix4))return`${this.getType(i)}( ${n.elements.map(u).join(", ")} )`;if(a>4)return`${this.getType(i)}()`;throw new Error(`NodeBuilder: Type '${i}' not found in generate constant attempt.`)}getType(e){return"color"===e?"vec3":e}hasGeometryAttribute(e){return this.geometry&&void 0!==this.geometry.getAttribute(e)}getAttribute(e,t){const r=this.attributes;for(const t of r)if(t.name===e)return t;const s=new yN(e,t);return this.registerDeclaration(s),r.push(s),s}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return"void"===e||"property"===e||"sampler"===e||"samplerComparison"===e||"texture"===e||"cubeTexture"===e||"storageTexture"===e||"depthTexture"===e||"texture3D"===e}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){const t=e.type;if(e.isDataTexture){if(t===R)return"int";if(t===S)return"uint"}return"float"}getElementType(e){return"mat2"===e?"vec2":"mat3"===e?"vec3":"mat4"===e?"vec4":this.getComponentType(e)}getComponentType(e){if("float"===(e=this.getVectorType(e))||"bool"===e||"int"===e||"uint"===e)return e;const t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return null===t?null:"b"===t[1]?"bool":"i"===t[1]?"int":"u"===t[1]?"uint":"float"}getVectorType(e){return"color"===e?"vec3":"texture"===e||"cubeTexture"===e||"storageTexture"===e||"texture3D"===e?"vec4":e}getTypeFromLength(e,t="float"){if(1===e)return t;let r=zs(e);const s="float"===t?"":t[0];return!0===/mat2/.test(t)&&(r=r.replace("vec","mat")),s+r}getTypeFromArray(e){return HN.get(e.constructor)}isInteger(e){return/int|uint|(i|u)vec/.test(e)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);const r=t.array,s=e.itemSize,i=e.normalized;let n;return e instanceof ot||!0===i||(n=this.getTypeFromArray(r)),this.getTypeFromLength(s,n)}getTypeLength(e){const t=this.getVectorType(e),r=/vec([2-4])/.exec(t);return null!==r?Number(r[1]):"float"===t||"bool"===t||"int"===t||"uint"===t?1:!0===/mat2/.test(e)?4:!0===/mat3/.test(e)?9:!0===/mat4/.test(e)?16:0}getVectorFromMatrix(e){return e.replace("mat","vec")}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){const t=this.getComponentType(e);return"int"===t||"uint"===t?e:this.changeComponentType(e,"int")}setActiveStack(e){this.activeStacks.push(e)}removeActiveStack(e){if(this.activeStacks[this.activeStacks.length-1]!==e)throw new Error("NodeBuilder: Invalid active stack removal.");this.activeStacks.pop()}getActiveStack(){return this.activeStacks[this.activeStacks.length-1]}getBaseStack(){return this.activeStacks[0]}addStack(){this.stack=tb(this.stack);const e=hn();return this.stacks.push(e),cn(this.stack),this.stack}removeStack(){const e=this.stack;for(const t of e.nodes){this.getDataFromNode(t).stack=e}return this.stack=e.parent,cn(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,r=null){let s=(r=null===r?e.isGlobal(this)?this.globalCache:this.cache:r).getData(e);void 0===s&&(s={},r.setData(e,s)),void 0===s[t]&&(s[t]={});let i=s[t];const n=s.any?s.any.subBuilds:null,a=this.getClosestSubBuild(n);return a&&(void 0===i.subBuildsCache&&(i.subBuildsCache={}),i=i.subBuildsCache[a]||(i.subBuildsCache[a]={}),i.subBuilds=n),i}getNodeProperties(e,t="any"){const r=this.getDataFromNode(e,t);return r.properties||(r.properties={outputNode:null})}getBufferAttributeFromNode(e,t){const r=this.getDataFromNode(e,"vertex");let s=r.bufferAttribute;if(void 0===s){const i=this.uniforms.index++;s=new yN("nodeAttribute"+i,t,e),this.bufferAttributes.push(s),r.bufferAttribute=s}return s}getStructTypeNode(e,t=this.shaderStage){return this.types[t][e]||null}getStructTypeFromNode(e,t,r=null,s=this.shaderStage){const i=this.getDataFromNode(e,s,this.globalCache);let n=i.structType;if(void 0===n){const a=this.structs.index++;null===r&&(r="StructType"+a),n=new SN(r,t),this.structs[s].push(n),this.types[s][r]=e,i.structType=n}return n}getOutputStructTypeFromNode(e,t){const r=this.getStructTypeFromNode(e,t,"OutputType","fragment");return r.output=!0,r}getUniformFromNode(e,t,r=this.shaderStage,s=null){const i=this.getDataFromNode(e,r,this.globalCache);let n=i.uniform;if(void 0===n){const a=this.uniforms.index++;n=new bN(s||"nodeUniform"+a,t,e),this.uniforms[r].push(n),this.registerDeclaration(n),i.uniform=n}return n}getVarFromNode(e,t=null,r=e.getNodeType(this),s=this.shaderStage,i=!1){const n=this.getDataFromNode(e,s),a=this.getSubBuildProperty("variable",n.subBuilds);let o=n[a];if(void 0===o){const u=i?"_const":"_var",l=this.vars[s]||(this.vars[s]=[]),d=this.vars[u]||(this.vars[u]=0);null===t&&(t=(i?"nodeConst":"nodeVar")+d,this.vars[u]++),"variable"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds));const c=e.getArrayCount(this);o=new xN(t,r,i,c),i||l.push(o),this.registerDeclaration(o),n[a]=o}return o}isDeterministic(e){if(e.isMathNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode))&&(!e.cNode||this.isDeterministic(e.cNode));if(e.isOperatorNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode));if(e.isArrayNode){if(null!==e.values)for(const t of e.values)if(!this.isDeterministic(t))return!1;return!0}return!!e.isConstNode}getVaryingFromNode(e,t=null,r=e.getNodeType(this),s=null,i=null){const n=this.getDataFromNode(e,"any"),a=this.getSubBuildProperty("varying",n.subBuilds);let o=n[a];if(void 0===o){const e=this.varyings,u=e.length;null===t&&(t="nodeVarying"+u),"varying"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds)),o=new TN(t,r,s,i),e.push(o),this.registerDeclaration(o),n[a]=o}return o}registerDeclaration(e){const t=this.shaderStage,r=this.declarations[t]||(this.declarations[t]={}),s=this.getPropertyName(e);let i=1,n=s;for(;void 0!==r[n];)n=s+"_"+i++;i>1&&(e.name=n,d(`TSL: Declaration name '${s}' of '${e.type}' already in use. Renamed to '${n}'.`)),r[n]=e}getCodeFromNode(e,t,r=this.shaderStage){const s=this.getDataFromNode(e);let i=s.code;if(void 0===i){const e=this.codes[r]||(this.codes[r]=[]),n=e.length;i=new _N("nodeCode"+n,t),e.push(i),s.code=i}return i}addFlowCodeHierarchy(e,t){const{flowCodes:r,flowCodeBlock:s}=this.getDataFromNode(e);let i=!0,n=t;for(;n;){if(!0===s.get(n)){i=!1;break}n=this.getDataFromNode(n).parentNodeBlock}if(i)for(const e of r)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,r){const s=this.getDataFromNode(e),i=s.flowCodes||(s.flowCodes=[]),n=s.flowCodeBlock||(s.flowCodeBlock=new WeakMap);i.push(t),n.set(r,!0)}addLineFlowCode(e,t=null){return""===e||(null!==t&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=";\n"),this.flow.code+=e),this}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+="\t",this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){const t=e.getNodeType(this),r=this.flowChildNode(e,t);return this.flowsData.set(e,r),r}addInclude(e){null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(e)}buildFunctionNode(e){const t=new mT,r=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=r,t}flowShaderNode(e){const t=e.layout,r={[Symbol.iterator](){let e=0;const t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(const e of t.inputs)r[e.name]=new Jy(e.type,e.name);e.layout=null;const s=e.call(r),i=this.flowStagesNode(s,t.type);return e.layout=t,i}flowBuildStage(e,t,r=null){const s=this.getBuildStage();this.setBuildStage(t);const i=e.build(this,r);return this.setBuildStage(s),i}flowStagesNode(e,t=null){const r=this.flow,s=this.vars,i=this.declarations,n=this.cache,a=this.buildStage,o=this.stack,u={code:""};this.flow=u,this.vars={},this.declarations={},this.cache=new NN,this.stack=tb();for(const r of ni)this.setBuildStage(r),u.result=e.build(this,t);return u.vars=this.getVars(this.shaderStage),this.flow=r,this.vars=s,this.declarations=i,this.cache=n,this.stack=o,this.setBuildStage(a),u}getFunctionOperator(){return null}buildFunctionCode(){d("Abstract function.")}flowChildNode(e,t=null){const r=this.flow,s={code:""};return this.flow=s,s.result=e.build(this,t),this.flow=r,s}flowNodeFromShaderStage(e,t,r=null,s=null){const i=this.tab,n=this.cache,a=this.shaderStage,o=this.context;this.setShaderStage(e);const u={...this.context};delete u.nodeBlock,this.cache=this.globalCache,this.tab="\t",this.context=u;let l=null;if("generate"===this.buildStage){const i=this.flowChildNode(t,r);null!==s&&(i.code+=`${this.tab+s} = ${i.result};\n`),this.flowCode[e]=this.flowCode[e]+i.code,l=i}else l=t.build(this);return this.setShaderStage(a),this.cache=n,this.tab=i,this.context=o,l}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){d("Abstract function.")}getVaryings(){d("Abstract function.")}getVar(e,t,r=null){return`${null!==r?this.generateArrayDeclaration(e,r):this.getType(e)} ${t}`}getVars(e){let t="";const r=this.vars[e];if(void 0!==r)for(const e of r)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){d("Abstract function.")}getCodes(e){const t=this.codes[e];let r="";if(void 0!==t)for(const e of t)r+=e.code+"\n";return r}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){d("Abstract function.")}get subBuild(){return this.subBuildLayers[this.subBuildLayers.length-1]||null}addSubBuild(e){this.subBuildLayers.push(e)}removeSubBuild(){return this.subBuildLayers.pop()}getClosestSubBuild(e){let t;if(t=e&&e.isNode?e.isShaderCallNodeInternal?e.shaderNode.subBuilds:e.isStackNode?[e.subBuild]:this.getDataFromNode(e,"any").subBuilds:e instanceof Set?[...e]:e,!t)return null;const r=this.subBuildLayers;for(let e=t.length-1;e>=0;e--){const s=t[e];if(r.includes(s))return s}return null}getSubBuildOutput(e){return this.getSubBuildProperty("outputNode",e)}getSubBuildProperty(e="",t=null){let r,s;return r=null!==t?this.getClosestSubBuild(t):this.subBuildFn,s=r?e?r+"_"+e:r:e,s}build(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}async buildAsync(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this);await ut()}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getSharedDataFromNode(e){let t=WN.get(e);return void 0===t&&(t={}),t}getNodeUniform(e,t){const r=this.getSharedDataFromNode(e);let s=r.cache;if(void 0===s){if("float"===t||"int"===t||"uint"===t)s=new PN(e);else if("vec2"===t||"ivec2"===t||"uvec2"===t)s=new DN(e);else if("vec3"===t||"ivec3"===t||"uvec3"===t)s=new UN(e);else if("vec4"===t||"ivec4"===t||"uvec4"===t)s=new IN(e);else if("color"===t)s=new ON(e);else if("mat2"===t)s=new VN(e);else if("mat3"===t)s=new kN(e);else{if("mat4"!==t)throw new Error(`Uniform "${t}" not implemented.`);s=new GN(e)}r.cache=s}return s}format(e,t,r){if((t=this.getVectorType(t))===(r=this.getVectorType(r))||null===r||this.isReference(r))return e;const s=this.getTypeLength(t),i=this.getTypeLength(r);return 16===s&&9===i?`${this.getType(r)}( ${e}[ 0 ].xyz, ${e}[ 1 ].xyz, ${e}[ 2 ].xyz )`:9===s&&4===i?`${this.getType(r)}( ${e}[ 0 ].xy, ${e}[ 1 ].xy )`:s>4||i>4||0===i?e:s===i?`${this.getType(r)}( ${e} )`:s>i?(e="bool"===r?`all( ${e} )`:`${e}.${"xyz".slice(0,i)}`,this.format(e,this.getTypeFromLength(i,this.getComponentType(t)),r)):4===i&&s>1?`${this.getType(r)}( ${this.format(e,t,"vec3")}, 1.0 )`:2===s?`${this.getType(r)}( ${this.format(e,t,"vec2")}, 0.0 )`:(1===s&&i>1&&t!==this.getComponentType(r)&&(e=`${this.getType(this.getComponentType(r))}( ${e} )`),`${this.getType(r)}( ${e} )`)}getSignature(){return`// Three.js r${lt} - Node System\n`}needsPreviousData(){const e=this.renderer.getMRT();return e&&e.has("velocity")||!0===Qs(this.object).useVelocity}}class XN{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let r=e.get(t);return void 0===r&&(r={renderId:0,frameId:0},e.set(t,r)),r}updateBeforeNode(e){const t=e.getUpdateBeforeType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateBeforeMap,r);if(t.frameId!==this.frameId){const r=t.frameId;t.frameId=this.frameId,!1===e.updateBefore(this)&&(t.frameId=r)}}else if(t===ti.RENDER){const t=this._getMaps(this.updateBeforeMap,r);if(t.renderId!==this.renderId){const r=t.renderId;t.renderId=this.renderId,!1===e.updateBefore(this)&&(t.renderId=r)}}else t===ti.OBJECT&&e.updateBefore(this)}updateAfterNode(e){const t=e.getUpdateAfterType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateAfterMap,r);t.frameId!==this.frameId&&!1!==e.updateAfter(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateAfterMap,r);t.renderId!==this.renderId&&!1!==e.updateAfter(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.updateAfter(this)}updateNode(e){const t=e.getUpdateType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateMap,r);t.frameId!==this.frameId&&!1!==e.update(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateMap,r);t.renderId!==this.renderId&&!1!==e.update(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.update(this)}update(){this.frameId++,void 0===this.lastTime&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}}class KN{constructor(e,t,r=null,s="",i=!1){this.type=e,this.name=t,this.count=r,this.qualifier=s,this.isConst=i}}KN.isNodeFunctionInput=!0;class QN extends cv{static get type(){return"AmbientLightNode"}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}}class YN extends cv{static get type(){return"DirectionalLightNode"}constructor(e=null){super(e)}setupDirect(){const e=this.colorNode;return{lightDirection:x_(this.light),lightColor:e}}}class ZN extends cv{static get type(){return"HemisphereLightNode"}constructor(t=null){super(t),this.lightPositionNode=f_(t),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=Na(new e).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){const{colorNode:t,groundColorNode:r,lightDirectionNode:s}=this,i=hc.dot(s).mul(.5).add(.5),n=ou(r,t,i);e.context.irradiance.addAssign(n)}}class JN extends cv{static get type(){return"SpotLightNode"}constructor(e=null){super(e),this.coneCosNode=Na(0).setGroup(Ta),this.penumbraCosNode=Na(0).setGroup(Ta),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(0).setGroup(Ta),this.colorNode=Na(this.color).setGroup(Ta)}update(e){super.update(e);const{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e,t){const{coneCosNode:r,penumbraCosNode:s}=this;return cu(r,s,t)}getLightCoord(e){const t=e.getNodeProperties(this);let r=t.projectionUV;return void 0===r&&(r=m_(this.light,e.context.positionWorld),t.projectionUV=r),r}setupDirect(e){const{colorNode:t,cutoffDistanceNode:r,decayExponentNode:s,light:i}=this,n=this.getLightVector(e),a=n.normalize(),o=a.dot(x_(i)),u=this.getSpotAttenuation(e,o),l=n.length(),d=hv({lightDistance:l,cutoffDistance:r,decayExponent:s});let c,h,p=t.mul(u).mul(d);if(i.colorNode?(h=this.getLightCoord(e),c=i.colorNode(h)):i.map&&(h=this.getLightCoord(e),c=Ul(i.map,h.xy).onRenderUpdate(()=>i.map)),c){p=h.mul(2).sub(1).abs().lessThan(1).all().select(p.mul(c),p)}return{lightColor:p,lightDirection:a}}}class eS extends JN{static get type(){return"IESSpotLightNode"}getSpotAttenuation(e,t){const r=this.light.iesMap;let s=null;if(r&&!0===r.isTexture){const e=t.acos().mul(1/Math.PI);s=Ul(r,Tn(e,0),0).r}else s=super.getSpotAttenuation(t);return s}}class tS extends cv{static get type(){return"LightProbeNode"}constructor(e=null){super(e);const t=[];for(let e=0;e<9;e++)t.push(new r);this.lightProbe=$l(t)}update(e){const{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){const t=dN(hc,this.lightProbe);e.context.irradiance.addAssign(t)}}const rS=dn(([e,t])=>{const r=e.abs().sub(t);return Po(jo(r,0)).add(qo(jo(r.x,r.y),0))});class sS extends JN{static get type(){return"ProjectorLightNode"}update(e){super.update(e);const t=this.light;if(this.penumbraCosNode.value=Math.min(Math.cos(t.angle*(1-t.penumbra)),.99999),null===t.aspect){let e=1;null!==t.map&&(e=t.map.width/t.map.height),t.shadow.aspect=e}else t.shadow.aspect=t.aspect}getSpotAttenuation(e){const t=fn(0),r=this.penumbraCosNode,s=g_(this.light).mul(e.context.positionWorld||Zd);return pn(s.w.greaterThan(0),()=>{const e=s.xyz.div(s.w),i=rS(e.xy.sub(Tn(.5)),Tn(.5)),n=Da(-1,La(1,Mo(r)).sub(1));t.assign(lu(i.mul(-2).mul(n)))}),t}}const iS=new a,nS=new a;let aS=null;class oS extends cv{static get type(){return"RectAreaLightNode"}constructor(e=null){super(e),this.halfHeight=Na(new r).setGroup(Ta),this.halfWidth=Na(new r).setGroup(Ta),this.updateType=ti.RENDER}update(e){super.update(e);const{light:t}=this,r=e.camera.matrixWorldInverse;nS.identity(),iS.copy(t.matrixWorld),iS.premultiply(r),nS.extractRotation(iS),this.halfWidth.value.set(.5*t.width,0,0),this.halfHeight.value.set(0,.5*t.height,0),this.halfWidth.value.applyMatrix4(nS),this.halfHeight.value.applyMatrix4(nS)}setupDirectRectArea(e){let t,r;e.isAvailable("float32Filterable")?(t=Ul(aS.LTC_FLOAT_1),r=Ul(aS.LTC_FLOAT_2)):(t=Ul(aS.LTC_HALF_1),r=Ul(aS.LTC_HALF_2));const{colorNode:s,light:i}=this;return{lightColor:s,lightPosition:b_(i),halfWidth:this.halfWidth,halfHeight:this.halfHeight,ltc_1:t,ltc_2:r}}static setLTC(e){aS=e}}class uS{parseFunction(){d("Abstract function.")}}class lS{constructor(e,t,r="",s=""){this.type=e,this.inputs=t,this.name=r,this.precision=s}getCode(){d("Abstract function.")}}lS.isNodeFunction=!0;const dS=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,cS=/[a-z_0-9]+/gi,hS="#pragma main";class pS extends lS{constructor(e){const{type:t,inputs:r,name:s,precision:i,inputsCode:n,blockCode:a,headerCode:o}=(e=>{const t=(e=e.trim()).indexOf(hS),r=-1!==t?e.slice(t+12):e,s=r.match(dS);if(null!==s&&5===s.length){const i=s[4],n=[];let a=null;for(;null!==(a=cS.exec(i));)n.push(a);const o=[];let u=0;for(;u{let r=this._createNodeBuilder(e,e.material);try{t?await r.buildAsync():r.build()}catch(s){r=this._createNodeBuilder(e,new yg),t?await r.buildAsync():r.build(),o("TSL: "+s)}return r})().then(e=>(s=this._createNodeBuilderState(e),i.set(n,s),s.usedTimes++,r.nodeBuilderState=s,s));{let t=this._createNodeBuilder(e,e.material);try{t.build()}catch(r){t=this._createNodeBuilder(e,new yg),t.build();let s=r.stackTrace;!s&&r.stack&&(s=new Us(r.stack)),o("TSL: "+r,s)}s=this._createNodeBuilderState(t),i.set(n,s)}}s.usedTimes++,r.nodeBuilderState=s}return s}getForRenderAsync(e){const t=this.getForRender(e,!0);return t.then?t:Promise.resolve(t)}getForRenderDeferred(e){const t=this.get(e);if(void 0!==t.nodeBuilderState)return t.nodeBuilderState;const r=this.getForRenderCacheKey(e),s=this.nodeBuilderCache.get(r);return void 0!==s?(s.usedTimes++,t.nodeBuilderState=s,s):(!0!==t.pendingBuild&&(t.pendingBuild=!0,this._buildQueue.push(()=>this.getForRenderAsync(e).then(()=>{t.pendingBuild=!1})),this._processBuildQueue()),null)}_processBuildQueue(){if(this._buildInProgress||0===this._buildQueue.length)return;this._buildInProgress=!0;this._buildQueue.shift()().then(()=>{this._buildInProgress=!1,this._processBuildQueue()})}delete(e){if(e.isRenderObject){const t=this.get(e).nodeBuilderState;t.usedTimes--,0===t.usedTimes&&this.nodeBuilderCache.delete(this.getForRenderCacheKey(e))}return super.delete(e)}getForCompute(e){const t=this.get(e);let r=t.nodeBuilderState;if(void 0===r){const s=this.backend.createNodeBuilder(e,this.renderer);s.build(),r=this._createNodeBuilderState(s),t.nodeBuilderState=r}return r}_createNodeBuilderState(e){return new fN(e.vertexShader,e.fragmentShader,e.computeShader,e.getAttributesArray(),e.getBindings(),e.updateNodes,e.updateBeforeNodes,e.updateAfterNodes,e.observer,e.transforms)}getEnvironmentNode(e){this.updateEnvironment(e);let t=null;if(e.environmentNode&&e.environmentNode.isNode)t=e.environmentNode;else{const r=this.get(e);r.environmentNode&&(t=r.environmentNode)}return t}getBackgroundNode(e){this.updateBackground(e);let t=null;if(e.backgroundNode&&e.backgroundNode.isNode)t=e.backgroundNode;else{const r=this.get(e);r.backgroundNode&&(t=r.backgroundNode)}return t}getFogNode(e){return this.updateFog(e),e.fogNode||this.get(e).fogNode||null}getCacheKey(e,t){fS[0]=e,fS[1]=t;const r=this.renderer.info.calls,s=this.callHashCache.get(fS)||{};if(s.callId!==r){const i=this.getEnvironmentNode(e),n=this.getFogNode(e);t&&yS.push(t.getCacheKey(!0)),i&&yS.push(i.getCacheKey()),n&&yS.push(n.getCacheKey()),yS.push(this.renderer.getOutputRenderTarget()&&this.renderer.getOutputRenderTarget().multiview?1:0),yS.push(this.renderer.shadowMap.enabled?1:0),yS.push(this.renderer.shadowMap.type),s.callId=r,s.cacheKey=Vs(yS),this.callHashCache.set(fS,s),yS.length=0}return fS[0]=null,fS[1]=null,s.cacheKey}get isToneMappingState(){return!this.renderer.getRenderTarget()}updateBackground(e){const t=this.get(e),r=e.background;if(r){const s=0===e.backgroundBlurriness&&t.backgroundBlurriness>0||e.backgroundBlurriness>0&&0===t.backgroundBlurriness;if(t.background!==r||s){const i=this.getCacheNode("background",r,()=>{if(!0===r.isCubeTexture||r.mapping===he||r.mapping===pe||r.mapping===we){if(e.backgroundBlurriness>0||r.mapping===we)return Df(r);{let e;return e=!0===r.isCubeTexture?Bc(r):Ul(r),Fg(e)}}if(!0===r.isTexture)return Ul(r,Kl.flipY()).setUpdateMatrix(!0);!0!==r.isColor&&o("WebGPUNodes: Unsupported background configuration.",r)},s);t.backgroundNode=i,t.background=r,t.backgroundBlurriness=e.backgroundBlurriness}}else t.backgroundNode&&(delete t.backgroundNode,delete t.background)}getCacheNode(e,t,r,s=!1){const i=this.cacheLib[e]||(this.cacheLib[e]=new WeakMap);let n=i.get(t);return(void 0===n||s)&&(n=r(),i.set(t,n)),n}updateFog(e){const t=this.get(e),r=e.fog;if(r){if(t.fog!==r){const e=this.getCacheNode("fog",r,()=>{if(r.isFogExp2){const e=Pc("color","color",r).setGroup(Ta),t=Pc("density","float",r).setGroup(Ta);return _T(e,xT(t))}if(r.isFog){const e=Pc("color","color",r).setGroup(Ta),t=Pc("near","float",r).setGroup(Ta),s=Pc("far","float",r).setGroup(Ta);return _T(e,bT(t,s))}o("Renderer: Unsupported fog configuration.",r)});t.fogNode=e,t.fog=r}}else delete t.fogNode,delete t.fog}updateEnvironment(e){const t=this.get(e),r=e.environment;if(r){if(t.environment!==r){const e=this.getCacheNode("environment",r,()=>!0===r.isCubeTexture?Bc(r):!0===r.isTexture?Ul(r):void o("Nodes: Unsupported environment configuration.",r));t.environmentNode=e,t.environment=r}}else t.environmentNode&&(delete t.environmentNode,delete t.environment)}getNodeFrame(e=this.renderer,t=null,r=null,s=null,i=null){const n=this.nodeFrame;return n.renderer=e,n.scene=t,n.object=r,n.camera=s,n.material=i,n}getNodeFrameForRender(e){return this.getNodeFrame(e.renderer,e.scene,e.object,e.camera,e.material)}getOutputCacheKey(){const e=this.renderer;return e.toneMapping+","+e.currentColorSpace+","+e.xr.isPresenting}hasOutputChange(e){return mS.get(e)!==this.getOutputCacheKey()}getOutputNode(e){const t=this.renderer,r=this.getOutputCacheKey(),s=e.isArrayTexture?Dx(e,Sn(Kl,Wl("gl_ViewID_OVR"))).renderOutput(t.toneMapping,t.currentColorSpace):Ul(e,Kl).renderOutput(t.toneMapping,t.currentColorSpace);return mS.set(e,r),s}updateBefore(e){const t=e.getNodeBuilderState();for(const r of t.updateBeforeNodes)this.getNodeFrameForRender(e).updateBeforeNode(r)}updateAfter(e){const t=e.getNodeBuilderState();for(const r of t.updateAfterNodes)this.getNodeFrameForRender(e).updateAfterNode(r)}updateForCompute(e){const t=this.getNodeFrame(),r=this.getForCompute(e);for(const e of r.updateNodes)t.updateNode(e)}updateForRender(e){const t=this.getNodeFrameForRender(e),r=e.getNodeBuilderState();for(const e of r.updateNodes)t.updateNode(e)}needsRefresh(e){const t=this.getNodeFrameForRender(e);return e.getMonitor().needsRefresh(e,t)}dispose(){super.dispose(),this.nodeFrame=new XN,this.nodeBuilderCache=new Map,this.cacheLib={}}}const xS=new Xe;class TS{constructor(e=null){this.version=0,this.clipIntersection=null,this.cacheKey="",this.shadowPass=!1,this.viewNormalMatrix=new n,this.clippingGroupContexts=new WeakMap,this.intersectionPlanes=[],this.unionPlanes=[],this.parentVersion=null,null!==e&&(this.viewNormalMatrix=e.viewNormalMatrix,this.clippingGroupContexts=e.clippingGroupContexts,this.shadowPass=e.shadowPass,this.viewMatrix=e.viewMatrix)}projectPlanes(e,t,r){const s=e.length;for(let i=0;i0,alpha:!0,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:this.getFramebufferScaleFactor()},i=new XRWebGLLayer(e,s,r);this._glBaseLayer=i,e.updateRenderState({baseLayer:i}),t.setPixelRatio(1),t._setXRLayerSize(i.framebufferWidth,i.framebufferHeight),this._xrRenderTarget=new wS(i.framebufferWidth,i.framebufferHeight,{format:Ae,type:$e,colorSpace:t.outputColorSpace,stencilBuffer:t.stencil,resolveDepthBuffer:!1===i.ignoreDepthValues,resolveStencilBuffer:!1===i.ignoreDepthValues}),this._xrRenderTarget._isOpaqueFramebuffer=!0,this._referenceSpace=await e.requestReferenceSpace(this.getReferenceSpaceType())}this.setFoveation(this.getFoveation()),t._animation.setAnimationLoop(this._onAnimationFrame),t._animation.setContext(e),t._animation.start(),this.isPresenting=!0,this.dispatchEvent({type:"sessionstart"})}}updateCamera(e){const t=this._session;if(null===t)return;const r=e.near,s=e.far,i=this._cameraXR,n=this._cameraL,a=this._cameraR;i.near=a.near=n.near=r,i.far=a.far=n.far=s,i.isMultiViewCamera=this._useMultiview,this._currentDepthNear===i.near&&this._currentDepthFar===i.far||(t.updateRenderState({depthNear:i.near,depthFar:i.far}),this._currentDepthNear=i.near,this._currentDepthFar=i.far),i.layers.mask=6|e.layers.mask,n.layers.mask=-5&i.layers.mask,a.layers.mask=-3&i.layers.mask;const o=e.parent,u=i.cameras;FS(i,o);for(let e=0;e=0&&(r[n]=null,t[n].disconnect(i))}for(let s=0;s=r.length){r.push(i),n=e;break}if(null===r[e]){r[e]=i,n=e;break}}if(-1===n)break}const a=t[n];a&&a.connect(i)}}function US(e){return"quad"===e.type?this._glBinding.createQuadLayer({transform:new XRRigidTransform(e.translation,e.quaternion),width:e.width/2,height:e.height/2,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1}):this._glBinding.createCylinderLayer({transform:new XRRigidTransform(e.translation,e.quaternion),radius:e.radius,centralAngle:e.centralAngle,aspectRatio:e.aspectRatio,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1})}function IS(e,t){if(void 0===t)return;const r=this._cameraXR,i=this._renderer,n=i.backend,a=this._glBaseLayer,o=this.getReferenceSpace(),u=t.getViewerPose(o);if(this._xrFrame=t,null!==u){const e=u.views;null!==this._glBaseLayer&&n.setXRTarget(a.framebuffer);let t=!1;e.length!==r.cameras.length&&(r.cameras.length=0,t=!0);for(let i=0;i{await this.compileAsync(e,t);const s=this._renderLists.get(e,t),i=this._renderContexts.get(this._renderTarget,this._mrt),n=e.overrideMaterial||r.material,a=this._objects.get(r,n,e,t,s.lightsNode,i,i.clippingContext),{fragmentShader:o,vertexShader:u}=a.getNodeBuilderState();return{fragmentShader:o,vertexShader:u}}}}async init(){return null!==this._initPromise||(this._initPromise=new Promise(async(e,t)=>{let r=this.backend;try{await r.init(this)}catch(e){if(null===this._getFallback)return void t(e);try{this.backend=r=this._getFallback(e),await r.init(this)}catch(e){return void t(e)}}this._nodes=new bS(this,r),this._animation=new my(this,this._nodes,this.info),this._attributes=new Ay(r),this._background=new pN(this,this._nodes),this._geometries=new By(this._attributes,this.info),this._textures=new Yy(this,r,this.info),this._pipelines=new Oy(r,this._nodes),this._bindings=new Vy(r,this._nodes,this._textures,this._attributes,this._pipelines,this.info),this._objects=new Ty(this,this._nodes,this._geometries,this._pipelines,this._bindings,this.info),this._renderLists=new Hy(this.lighting),this._bundles=new NS,this._renderContexts=new Ky(this),this._animation.start(),this._initialized=!0,this._inspector.init(),e(this)})),this._initPromise}get domElement(){return this._canvasTarget.domElement}get coordinateSystem(){return this.backend.coordinateSystem}async compileAsync(e,t,r=null){if(!0===this._isDeviceLost)return;!1===this._initialized&&await this.init();const s=this._nodes.nodeFrame,i=s.renderId,n=this._currentRenderContext,a=this._currentRenderObjectFunction,o=this._handleObjectFunction,u=this._compilationPromises;null===r&&(r=e);const l=!0===e.isScene?e:!0===r.isScene?r:VS,d=this.needsFrameBufferTarget&&null===this._renderTarget?this._getFrameBufferTarget():this._renderTarget||this._outputRenderTarget,c=this._renderContexts.get(d,this._mrt),h=this._activeMipmapLevel,p=[];this._currentRenderContext=c,this._currentRenderObjectFunction=this.renderObject,this._handleObjectFunction=this._createObjectPipeline,this._compilationPromises=p,s.renderId++,s.update(),c.depth=this.depth,c.stencil=this.stencil,c.clippingContext||(c.clippingContext=new TS),c.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,d);const g=this._renderLists.get(l,t);if(g.begin(),this._projectObject(e,t,0,g,c.clippingContext),r!==e&&r.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&g.pushLight(e)}),g.finish(),null!==d){this._textures.updateRenderTarget(d,h);const e=this._textures.get(d);c.textures=e.textures,c.depthTexture=e.depthTexture}else c.textures=null,c.depthTexture=null;r!==e?this._background.update(r,g,c):this._background.update(l,g,c);const m=g.opaque,f=g.transparent,y=g.transparentDoublePass,b=g.lightsNode;!0===this.opaque&&m.length>0&&this._renderObjects(m,t,l,b),!0===this.transparent&&f.length>0&&this._renderTransparents(f,y,t,l,b),s.renderId=i,this._currentRenderContext=n,this._currentRenderObjectFunction=a,this._handleObjectFunction=o,this._compilationPromises=u;for(const e of p){const t=this._objects.get(e.object,e.material,e.scene,e.camera,e.lightsNode,e.renderContext,e.clippingContext,e.passId);t.drawRange=e.object.geometry.drawRange,t.group=e.group,this._geometries.updateForRender(t),await this._nodes.getForRenderAsync(t),this._nodes.updateBefore(t),this._nodes.updateForRender(t),this._bindings.updateForRender(t);const r=[];this._pipelines.getForRender(t,r),r.length>0&&await Promise.all(r),this._nodes.updateAfter(t),await ut()}}async renderAsync(e,t){v('Renderer: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.render(e,t)}async waitForGPU(){o("Renderer: waitForGPU() has been removed. Read https://github.com/mrdoob/three.js/issues/32012 for more information.")}set inspector(e){null!==this._inspector&&this._inspector.setRenderer(null),this._inspector=e,this._inspector.setRenderer(this)}get inspector(){return this._inspector}set highPrecision(e){const t=this.contextNode.value;!0===e?(t.modelViewMatrix=qd,t.modelNormalViewMatrix=jd):this.highPrecision&&(delete t.modelViewMatrix,delete t.modelNormalViewMatrix)}get highPrecision(){const e=this.contextNode.value;return e.modelViewMatrix===qd&&e.modelNormalViewMatrix===jd}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getOutputBufferType(){return this._outputBufferType}getColorBufferType(){return v('Renderer: ".getColorBufferType()" has been renamed to ".getOutputBufferType()".'),this.getOutputBufferType()}_onDeviceLost(e){let t=`THREE.WebGPURenderer: ${e.api} Device Lost:\n\nMessage: ${e.message}`;e.reason&&(t+=`\nReason: ${e.reason}`),o(t),this._isDeviceLost=!0}_renderBundle(e,t,r){const{bundleGroup:s,camera:i,renderList:n}=e,a=this._currentRenderContext,o=this._bundles.get(s,i),u=this.backend.get(o);void 0===u.renderContexts&&(u.renderContexts=new Set);const l=s.version!==u.version,d=!1===u.renderContexts.has(a)||l;if(u.renderContexts.add(a),d){this.backend.beginBundle(a),(void 0===u.renderObjects||l)&&(u.renderObjects=[]),this._currentRenderBundle=o;const{transparentDoublePass:e,transparent:d,opaque:c}=n;!0===this.opaque&&c.length>0&&this._renderObjects(c,i,t,r),!0===this.transparent&&d.length>0&&this._renderTransparents(d,e,i,t,r),this._currentRenderBundle=null,this.backend.finishBundle(a,o),u.version=s.version}else{const{renderObjects:e}=u;for(let t=0,r=e.length;t>=h,g.viewportValue.height>>=h,g.viewportValue.minDepth=T,g.viewportValue.maxDepth=_,g.viewport=!1===g.viewportValue.equals(GS),g.scissorValue.copy(b).multiplyScalar(x).floor(),g.scissor=f._scissorTest&&!1===g.scissorValue.equals(GS),g.scissorValue.width>>=h,g.scissorValue.height>>=h,g.clippingContext||(g.clippingContext=new TS),g.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,p);const v=t.isArrayCamera?zS:$S;t.isArrayCamera||(WS.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),v.setFromProjectionMatrix(WS,t.coordinateSystem,t.reversedDepth));const N=this._renderLists.get(e,t);if(N.begin(),this._projectObject(e,t,0,N,g.clippingContext),N.finish(),!0===this.sortObjects&&N.sort(this._opaqueSort,this._transparentSort),null!==p){this._textures.updateRenderTarget(p,h);const e=this._textures.get(p);g.textures=e.textures,g.depthTexture=e.depthTexture,g.width=e.width,g.height=e.height,g.renderTarget=p,g.depth=p.depthBuffer,g.stencil=p.stencilBuffer}else g.textures=null,g.depthTexture=null,g.width=kS.width,g.height=kS.height,g.depth=this.depth,g.stencil=this.stencil;g.width>>=h,g.height>>=h,g.activeCubeFace=c,g.activeMipmapLevel=h,g.occlusionQueryCount=N.occlusionQueryCount,g.scissorValue.max(HS.set(0,0,0,0)),g.scissorValue.x+g.scissorValue.width>g.width&&(g.scissorValue.width=Math.max(g.width-g.scissorValue.x,0)),g.scissorValue.y+g.scissorValue.height>g.height&&(g.scissorValue.height=Math.max(g.height-g.scissorValue.y,0)),this._background.update(l,N,g),g.camera=t,this.backend.beginRender(g);const{bundles:S,lightsNode:R,transparentDoublePass:E,transparent:A,opaque:w}=N;return S.length>0&&this._renderBundles(S,l,R),!0===this.opaque&&w.length>0&&this._renderObjects(w,t,l,R),!0===this.transparent&&A.length>0&&this._renderTransparents(A,E,t,l,R),this.backend.finishRender(g),i.renderId=n,this._currentRenderContext=a,this._currentRenderObjectFunction=o,this._handleObjectFunction=u,this._callDepth--,null!==s&&(this.setRenderTarget(d,c,h),this._renderOutput(p)),l.onAfterRender(this,e,t,p),this.inspector.finishRender(this.backend.getTimestampUID(g)),g}_setXRLayerSize(e,t){this._canvasTarget._width=e,this._canvasTarget._height=t,this.setViewport(0,0,e,t)}_renderOutput(e){const t=this._quad;this._nodes.hasOutputChange(e.texture)&&(t.material.fragmentNode=this._nodes.getOutputNode(e.texture),t.material.needsUpdate=!0);const r=this.autoClear,s=this.xr.enabled;this.autoClear=!1,this.xr.enabled=!1,this._renderScene(t,t.camera,!1),this.autoClear=r,this.xr.enabled=s}getMaxAnisotropy(){return this.backend.getMaxAnisotropy()}getActiveCubeFace(){return this._activeCubeFace}getActiveMipmapLevel(){return this._activeMipmapLevel}async setAnimationLoop(e){!1===this._initialized&&await this.init(),this._animation.setAnimationLoop(e)}getAnimationLoop(){return this._animation.getAnimationLoop()}async getArrayBufferAsync(e){return await this.backend.getArrayBufferAsync(e)}getContext(){return this.backend.getContext()}getPixelRatio(){return this._canvasTarget.getPixelRatio()}getDrawingBufferSize(e){return this._canvasTarget.getDrawingBufferSize(e)}getSize(e){return this._canvasTarget.getSize(e)}setPixelRatio(e=1){this._canvasTarget.setPixelRatio(e)}setDrawingBufferSize(e,t,r){this.xr&&this.xr.isPresenting||this._canvasTarget.setDrawingBufferSize(e,t,r)}setSize(e,t,r=!0){this.xr&&this.xr.isPresenting||this._canvasTarget.setSize(e,t,r)}setOpaqueSort(e){this._opaqueSort=e}setTransparentSort(e){this._transparentSort=e}getScissor(e){return this._canvasTarget.getScissor(e)}setScissor(e,t,r,s){this._canvasTarget.setScissor(e,t,r,s)}getScissorTest(){return this._canvasTarget.getScissorTest()}setScissorTest(e){this._canvasTarget.setScissorTest(e),this.backend.setScissorTest(e)}getViewport(e){return this._canvasTarget.getViewport(e)}setViewport(e,t,r,s,i=0,n=1){this._canvasTarget.setViewport(e,t,r,s,i,n)}getClearColor(e){return e.copy(this._clearColor)}setClearColor(e,t=1){this._clearColor.set(e),this._clearColor.a=t}getClearAlpha(){return this._clearColor.a}setClearAlpha(e){this._clearColor.a=e}getClearDepth(){return!0===this.reversedDepthBuffer?1-this._clearDepth:this._clearDepth}setClearDepth(e){this._clearDepth=e}getClearStencil(){return this._clearStencil}setClearStencil(e){this._clearStencil=e}isOccluded(e){const t=this._currentRenderContext;return t&&this.backend.isOccluded(t,e)}clear(e=!0,t=!0,r=!0){if(!1===this._initialized)throw new Error('Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.');const s=this._renderTarget||this._getFrameBufferTarget();let i=null;if(null!==s){this._textures.updateRenderTarget(s);const e=this._textures.get(s);i=this._renderContexts.get(s),i.textures=e.textures,i.depthTexture=e.depthTexture,i.width=e.width,i.height=e.height,i.renderTarget=s,i.depth=s.depthBuffer,i.stencil=s.stencilBuffer;const t=this.backend.getClearColor();i.clearColorValue.r=t.r,i.clearColorValue.g=t.g,i.clearColorValue.b=t.b,i.clearColorValue.a=t.a,i.clearDepthValue=this.getClearDepth(),i.clearStencilValue=this.getClearStencil(),i.activeCubeFace=this.getActiveCubeFace(),i.activeMipmapLevel=this.getActiveMipmapLevel()}this.backend.clear(e,t,r,i),null!==s&&null===this._renderTarget&&this._renderOutput(s)}clearColor(){this.clear(!0,!1,!1)}clearDepth(){this.clear(!1,!0,!1)}clearStencil(){this.clear(!1,!1,!0)}async clearAsync(e=!0,t=!0,r=!0){v('Renderer: "clearAsync()" has been deprecated. Use "clear()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.clear(e,t,r)}async clearColorAsync(){v('Renderer: "clearColorAsync()" has been deprecated. Use "clearColor()" and "await renderer.init();" when creating the renderer.'),this.clear(!0,!1,!1)}async clearDepthAsync(){v('Renderer: "clearDepthAsync()" has been deprecated. Use "clearDepth()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!0,!1)}async clearStencilAsync(){v('Renderer: "clearStencilAsync()" has been deprecated. Use "clearStencil()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!1,!0)}get needsFrameBufferTarget(){const e=this.currentToneMapping!==m,t=this.currentColorSpace!==p.workingColorSpace;return e||t}get samples(){return this._samples}get currentSamples(){let e=this._samples;return null!==this._renderTarget?e=this._renderTarget.samples:this.needsFrameBufferTarget&&(e=0),e}get currentToneMapping(){return this.isOutputTarget?this.toneMapping:m}get currentColorSpace(){return this.isOutputTarget?this.outputColorSpace:p.workingColorSpace}get isOutputTarget(){return this._renderTarget===this._outputRenderTarget||null===this._renderTarget}dispose(){!0===this._initialized&&(this.info.dispose(),this.backend.dispose(),this._animation.dispose(),this._objects.dispose(),this._geometries.dispose(),this._pipelines.dispose(),this._nodes.dispose(),this._bindings.dispose(),this._renderLists.dispose(),this._renderContexts.dispose(),this._textures.dispose(),null!==this._frameBufferTarget&&this._frameBufferTarget.dispose(),Object.values(this.backend.timestampQueryPool).forEach(e=>{null!==e&&e.dispose()})),this.setRenderTarget(null),this.setAnimationLoop(null)}setRenderTarget(e,t=0,r=0){this._renderTarget=e,this._activeCubeFace=t,this._activeMipmapLevel=r}getRenderTarget(){return this._renderTarget}setOutputRenderTarget(e){this._outputRenderTarget=e}getOutputRenderTarget(){return this._outputRenderTarget}setCanvasTarget(e){this._canvasTarget.removeEventListener("resize",this._onCanvasTargetResize),this._canvasTarget=e,this._canvasTarget.addEventListener("resize",this._onCanvasTargetResize)}getCanvasTarget(){return this._canvasTarget}_resetXRState(){this.backend.setXRTarget(null),this.setOutputRenderTarget(null),this.setRenderTarget(null),this._frameBufferTarget.dispose(),this._frameBufferTarget=null}setRenderObjectFunction(e){this._renderObjectFunction=e}getRenderObjectFunction(){return this._renderObjectFunction}compute(e,t=null){if(!0===this._isDeviceLost)return;if(!1===this._initialized)return d("Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead."),this.computeAsync(e,t);const r=this._nodes.nodeFrame,s=r.renderId;this.info.calls++,this.info.compute.calls++,this.info.compute.frameCalls++,r.renderId=this.info.calls,this.backend.updateTimeStampUID(e),this.inspector.beginCompute(this.backend.getTimestampUID(e),e);const i=this.backend,n=this._pipelines,a=this._bindings,o=this._nodes,u=Array.isArray(e)?e:[e];if(void 0===u[0]||!0!==u[0].isComputeNode)throw new Error("THREE.Renderer: .compute() expects a ComputeNode.");i.beginCompute(e);for(const r of u){if(!1===n.has(r)){const e=()=>{r.removeEventListener("dispose",e),n.delete(r),a.deleteForCompute(r),o.delete(r)};r.addEventListener("dispose",e);const t=r.onInitFunction;null!==t&&t.call(r,{renderer:this})}o.updateForCompute(r),a.updateForCompute(r);const s=a.getForCompute(r),u=n.getForCompute(r,s);i.compute(e,r,s,u,t)}i.finishCompute(e),r.renderId=s,this.inspector.finishCompute(this.backend.getTimestampUID(e))}async computeAsync(e,t=null){!1===this._initialized&&await this.init(),this.compute(e,t)}async hasFeatureAsync(e){return v('Renderer: "hasFeatureAsync()" has been deprecated. Use "hasFeature()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.hasFeature(e)}async resolveTimestampsAsync(e="render"){return!1===this._initialized&&await this.init(),this.backend.resolveTimestampsAsync(e)}hasFeature(e){if(!1===this._initialized)throw new Error('Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.');return this.backend.hasFeature(e)}hasInitialized(){return this._initialized}async initTextureAsync(e){v('Renderer: "initTextureAsync()" has been deprecated. Use "initTexture()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.initTexture(e)}initTexture(e){if(!1===this._initialized)throw new Error('Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateTexture(e)}initRenderTarget(e){if(!1===this._initialized)throw new Error('Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateRenderTarget(e);const t=this._textures.get(e),r=this._renderContexts.get(e);r.textures=t.textures,r.depthTexture=t.depthTexture,r.width=t.width,r.height=t.height,r.renderTarget=e,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,this.backend.initRenderTarget(r)}copyFramebufferToTexture(e,t=null){if(null!==t)if(t.isVector2)t=HS.set(t.x,t.y,e.image.width,e.image.height).floor();else{if(!t.isVector4)return void o("Renderer.copyFramebufferToTexture: Invalid rectangle.");t=HS.copy(t).floor()}else t=HS.set(0,0,e.image.width,e.image.height);let r,s=this._currentRenderContext;null!==s?r=s.renderTarget:(r=this._renderTarget||this._getFrameBufferTarget(),null!==r&&(this._textures.updateRenderTarget(r),s=this._textures.get(r))),this._textures.updateTexture(e,{renderTarget:r}),this.backend.copyFramebufferToTexture(e,s,t),this._inspector.copyFramebufferToTexture(e)}copyTextureToTexture(e,t,r=null,s=null,i=0,n=0){this._textures.updateTexture(e),this._textures.updateTexture(t),this.backend.copyTextureToTexture(e,t,r,s,i,n),this._inspector.copyTextureToTexture(e,t)}async readRenderTargetPixelsAsync(e,t,r,s,i,n=0,a=0){return this.backend.copyTextureToBuffer(e.textures[n],t,r,s,i,a)}_projectObject(e,t,r,s,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)r=e.renderOrder,e.isClippingGroup&&e.enabled&&(i=i.getGroupContext(e));else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)s.pushLight(e);else if(e.isSprite){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsSprite(e,t)){!0===this.sortObjects&&HS.setFromMatrixPosition(e.matrixWorld).applyMatrix4(WS);const{geometry:t,material:n}=e;n.visible&&s.push(e,t,n,r,HS.z,null,i)}}else if(e.isLineLoop)o("Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.");else if(e.isMesh||e.isLine||e.isPoints){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsObject(e,t)){const{geometry:t,material:n}=e;if(!0===this.sortObjects&&(null===t.boundingSphere&&t.computeBoundingSphere(),HS.copy(t.boundingSphere.center).applyMatrix4(e.matrixWorld).applyMatrix4(WS)),Array.isArray(n)){const a=t.groups;for(let o=0,u=a.length;o0){for(const{material:e}of t)e.side=L;this._renderObjects(t,r,s,i,"backSide");for(const{material:e}of t)e.side=ht;this._renderObjects(e,r,s,i);for(const{material:e}of t)e.side=P}else this._renderObjects(e,r,s,i)}_renderObjects(e,t,r,s,i=null){for(let n=0,a=e.length;n(t.not().discard(),e))(u)}}e.depthNode&&e.depthNode.isNode&&(l=e.depthNode),e.castShadowPositionNode&&e.castShadowPositionNode.isNode?o=e.castShadowPositionNode:e.positionNode&&e.positionNode.isNode&&(o=e.positionNode),r={version:t,colorNode:u,depthNode:l,positionNode:o},this._cacheShadowNodes.set(e,r)}return r}renderObject(e,t,r,s,i,n,a,o=null,u=null){let l,d,c,h,p=!1;if(e.onBeforeRender(this,t,r,s,i,n),!0===i.allowOverride&&null!==t.overrideMaterial){const e=t.overrideMaterial;if(p=!0,l=e.isNodeMaterial?e.colorNode:null,d=e.isNodeMaterial?e.depthNode:null,c=e.isNodeMaterial?e.positionNode:null,h=t.overrideMaterial.side,i.positionNode&&i.positionNode.isNode&&(e.positionNode=i.positionNode),e.alphaTest=i.alphaTest,e.alphaMap=i.alphaMap,e.transparent=i.transparent||i.transmission>0||i.transmissionNode&&i.transmissionNode.isNode||i.backdropNode&&i.backdropNode.isNode,e.isShadowPassMaterial){const{colorNode:t,depthNode:r,positionNode:s}=this._getShadowNodes(i);this.shadowMap.type===tt?e.side=null!==i.shadowSide?i.shadowSide:i.side:e.side=null!==i.shadowSide?i.shadowSide:qS[i.side],null!==t&&(e.colorNode=t),null!==r&&(e.depthNode=r),null!==s&&(e.positionNode=s)}i=e}!0===i.transparent&&i.side===P&&!1===i.forceSinglePass?(i.side=L,this._handleObjectFunction(e,i,t,r,a,n,o,"backSide"),i.side=ht,this._handleObjectFunction(e,i,t,r,a,n,o,u),i.side=P):this._handleObjectFunction(e,i,t,r,a,n,o,u),p&&(t.overrideMaterial.colorNode=l,t.overrideMaterial.depthNode=d,t.overrideMaterial.positionNode=c,t.overrideMaterial.side=h),e.onAfterRender(this,t,r,s,i,n)}hasCompatibility(e){return this.backend.hasCompatibility(e)}_renderObjectDirect(e,t,r,s,i,n,a,o){const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);if(u.drawRange=e.geometry.drawRange,u.group=n,null!==this._currentRenderBundle){this.backend.get(this._currentRenderBundle).renderObjects.push(u),u.bundle=this._currentRenderBundle.bundleGroup}const l=this._nodes.needsRefresh(u);l&&(this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u)),this._pipelines.updateForRender(u),this._pipelines.isReady(u)&&(this.backend.draw(u,this.info),l&&this._nodes.updateAfter(u))}_createObjectPipeline(e,t,r,s,i,n,a,o){if(null!==this._compilationPromises)return void this._compilationPromises.push({object:e,material:t,scene:r,camera:s,lightsNode:i,group:n,clippingContext:a,passId:o,renderContext:this._currentRenderContext});const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);u.drawRange=e.geometry.drawRange,u.group=n,this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u),this._pipelines.getForRender(u,this._compilationPromises),this._nodes.updateAfter(u)}_onCanvasTargetResize(){this._initialized&&this.backend.updateSize()}get compile(){return this.compileAsync}}class XS{constructor(e=""){this.name=e,this.visibility=0}setVisibility(e){this.visibility|=e}getVisibility(){return this.visibility}clone(){return Object.assign(new this.constructor,this)}}class KS extends XS{constructor(e,t=null){super(e),this.isBuffer=!0,this.bytesPerElement=Float32Array.BYTES_PER_ELEMENT,this._buffer=t,this._updateRanges=[]}get updateRanges(){return this._updateRanges}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}get byteLength(){return(e=this._buffer.byteLength)+(Ey-e%Ey)%Ey;var e}get buffer(){return this._buffer}update(){return!0}}class QS extends KS{constructor(e,t=null){super(e,t),this.isUniformBuffer=!0}}let YS=0;class ZS extends QS{constructor(e,t){super("UniformBuffer_"+YS++,e?e.value:null),this.nodeUniform=e,this.groupNode=t,this.isNodeUniformBuffer=!0}set updateRanges(e){this.nodeUniform.updateRanges=e}get updateRanges(){return this.nodeUniform.updateRanges}addUpdateRange(e,t){this.nodeUniform.addUpdateRange(e,t)}clearUpdateRanges(){this.nodeUniform.clearUpdateRanges()}get buffer(){return this.nodeUniform.value}}class JS extends QS{constructor(e){super(e),this.isUniformsGroup=!0,this._values=null,this.uniforms=[],this._updateRangeCache=new Map}addUniformUpdateRange(e){const t=e.index;if(!0!==this._updateRangeCache.has(t)){const r=this.updateRanges,s={start:e.offset,count:e.itemSize};r.push(s),this._updateRangeCache.set(t,s)}}clearUpdateRanges(){this._updateRangeCache.clear(),super.clearUpdateRanges()}addUniform(e){return this.uniforms.push(e),this}removeUniform(e){const t=this.uniforms.indexOf(e);return-1!==t&&this.uniforms.splice(t,1),this}get values(){return null===this._values&&(this._values=Array.from(this.buffer)),this._values}get buffer(){let e=this._buffer;if(null===e){const t=this.byteLength;e=new Float32Array(new ArrayBuffer(t)),this._buffer=e}return e}get byteLength(){const e=this.bytesPerElement;let t=0;for(let r=0,s=this.uniforms.length;r{this.generation=null,this.version=-1},this.texture=t,this.version=t?t.version:-1,this.generation=null,this.samplerKey="",this.isSampler=!0}set texture(e){this._texture!==e&&(this._texture&&this._texture.removeEventListener("dispose",this._onTextureDispose),this._texture=e,this.generation=null,this.version=-1,this._texture&&this._texture.addEventListener("dispose",this._onTextureDispose))}get texture(){return this._texture}update(){const{texture:e,version:t}=this;return t!==e.version&&(this.version=e.version,!0)}clone(){const e=super.clone();return e._texture=null,e._onTextureDispose=()=>{e.generation=null,e.version=-1},e.texture=this.texture,e}}let sR=0;class iR extends rR{constructor(e,t){super(e,t),this.id=sR++,this.store=!1,this.mipLevel=0,this.isSampledTexture=!0}}class nR extends iR{constructor(e,t,r,s=null){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r,this.access=s}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class aR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledCubeTexture=!0}}class oR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledTexture3D=!0}}const uR={bitcast_int_uint:new pT("uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }"),bitcast_uint_int:new pT("uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }")},lR={textureDimensions:"textureSize",equals:"equal",bitcast_float_int:"floatBitsToInt",bitcast_int_float:"intBitsToFloat",bitcast_uint_float:"uintBitsToFloat",bitcast_float_uint:"floatBitsToUint",bitcast_uint_int:"tsl_bitcast_uint_to_int",bitcast_int_uint:"tsl_bitcast_int_to_uint",floatpack_snorm_2x16:"packSnorm2x16",floatpack_unorm_2x16:"packUnorm2x16",floatpack_float16_2x16:"packHalf2x16",floatunpack_snorm_2x16:"unpackSnorm2x16",floatunpack_unorm_2x16:"unpackUnorm2x16",floatunpack_float16_2x16:"unpackHalf2x16"},dR={low:"lowp",medium:"mediump",high:"highp"},cR={swizzleAssign:!0,storageBuffer:!1},hR={perspective:"smooth",linear:"noperspective"},pR={centroid:"centroid"},gR="\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision highp sampler2DShadow;\nprecision highp sampler2DArrayShadow;\nprecision highp samplerCubeShadow;\n";class mR extends jN{constructor(e,t){super(e,t,new gS),this.uniformGroups={},this.transforms=[],this.extensions={},this.builtins={vertex:[],fragment:[],compute:[]}}needsToWorkingColorSpace(e){return!0===e.isVideoTexture&&e.colorSpace!==T}_include(e){const t=uR[e];return t.build(this),this.addInclude(t),t}getMethod(e){return void 0!==uR[e]&&this._include(e),lR[e]||e}getBitcastMethod(e,t){return this.getMethod(`bitcast_${t}_${e}`)}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`${e} ? ${t} : ${r}`}getOutputStructName(){return""}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(this.getType(e.type)+" "+e.name);return`${this.getType(t.type)} ${t.name}( ${s.join(", ")} ) {\n\n\t${r.vars}\n\n${r.code}\n\treturn ${r.result};\n\n}`}setupPBO(e){const t=e.value;if(void 0===t.pbo){const e=t.array,r=t.count*t.itemSize,{itemSize:s}=t,i=t.array.constructor.name.toLowerCase().includes("int");let n=i?_t:vt;2===s?n=i?Et:W:3===s?n=i?At:wt:4===s&&(n=i?Ct:Ae);const a={Float32Array:Q,Uint8Array:$e,Uint16Array:Rt,Uint32Array:S,Int8Array:St,Int16Array:Nt,Int32Array:R,Uint8ClampedArray:$e},o=Math.pow(2,Math.ceil(Math.log2(Math.sqrt(r/s))));let u=Math.ceil(r/s/o);o*u*s0?i:"";t=`${r.name} {\n\t${s} ${e.name}[${n}];\n};\n`}else{const t=e.groupNode.name;if(void 0===s[t]){const e=this.uniformGroups[t];if(void 0!==e){const r=[];for(const t of e.uniforms){const e=t.getType(),s=this.getVectorType(e),i=t.nodeUniform.node.precision;let n=`${s} ${t.name};`;null!==i&&(n=dR[i]+" "+n),r.push("\t"+n)}s[t]=r}}i=!0}if(!i){const s=e.node.precision;null!==s&&(t=dR[s]+" "+t),t="uniform "+t,r.push(t)}}let i="";for(const e in s){const t=s[e];i+=this._getGLSLUniformStruct(e,t.join("\n"))+"\n"}return i+=r.join("\n"),i}getTypeFromAttribute(e){let t=super.getTypeFromAttribute(e);if(/^[iu]/.test(t)&&e.gpuType!==R){let r=e;e.isInterleavedBufferAttribute&&(r=e.data);const s=r.array;!1==(s instanceof Uint32Array||s instanceof Int32Array)&&(t=t.slice(1))}return t}getAttributes(e){let t="";if("vertex"===e||"compute"===e){const e=this.getAttributesArray();let r=0;for(const s of e)t+=`layout( location = ${r++} ) in ${s.type} ${s.name};\n`}return t}getStructMembers(e){const t=[];for(const r of e.members)t.push(`\t${r.type} ${r.name};`);return t.join("\n")}getStructs(e){const t=[],r=this.structs[e],s=[];for(const e of r)if(e.output)for(const t of e.members)s.push(`layout( location = ${t.index} ) out ${t.type} ${t.name};`);else{let r="struct "+e.name+" {\n";r+=this.getStructMembers(e),r+="\n};\n",t.push(r)}return 0===s.length&&s.push("layout( location = 0 ) out vec4 fragColor;"),"\n"+s.join("\n")+"\n\n"+t.join("\n")}getVaryings(e){let t="";const r=this.varyings;if("vertex"===e||"compute"===e)for(const s of r){"compute"===e&&(s.needsInterpolation=!0);const r=this.getType(s.type);if(s.needsInterpolation)if(s.interpolationType){t+=`${hR[s.interpolationType]||s.interpolationType} ${pR[s.interpolationSampling]||""} out ${r} ${s.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}out ${r} ${s.name};\n`}else t+=`${r} ${s.name};\n`}else if("fragment"===e)for(const e of r)if(e.needsInterpolation){const r=this.getType(e.type);if(e.interpolationType){t+=`${hR[e.interpolationType]||e.interpolationType} ${pR[e.interpolationSampling]||""} in ${r} ${e.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}in ${r} ${e.name};\n`}}for(const r of this.builtins[e])t+=`${r};\n`;return t}getVertexIndex(){return"uint( gl_VertexID )"}getInstanceIndex(){return"uint( gl_InstanceID )"}getInvocationLocalIndex(){return`uint( gl_InstanceID ) % ${this.object.workgroupSize.reduce((e,t)=>e*t,1)}u`}getSubgroupSize(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node")}getInvocationSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node")}getSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node")}getDrawIndex(){return this.renderer.backend.extensions.has("WEBGL_multi_draw")?"uint( gl_DrawID )":null}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord.xy"}getFragDepth(){return"gl_FragDepth"}enableExtension(e,t,r=this.shaderStage){const s=this.extensions[r]||(this.extensions[r]=new Map);!1===s.has(e)&&s.set(e,{name:e,behavior:t})}getExtensions(e){const t=[];if("vertex"===e){const t=this.renderer.backend.extensions;this.object.isBatchedMesh&&t.has("WEBGL_multi_draw")&&this.enableExtension("GL_ANGLE_multi_draw","require",e)}const r=this.extensions[e];if(void 0!==r)for(const{name:e,behavior:s}of r.values())t.push(`#extension ${e} : ${s}`);return t.join("\n")}getClipDistance(){return"gl_ClipDistance"}isAvailable(e){let t=cR[e];if(void 0===t){let r;switch(t=!1,e){case"float32Filterable":r="OES_texture_float_linear";break;case"clipDistance":r="WEBGL_clip_cull_distance"}if(void 0!==r){const e=this.renderer.backend.extensions;e.has(r)&&(e.get(r),t=!0)}cR[e]=t}return t}isFlipY(){return!0}getUniformBufferLimit(){const e=this.renderer.backend.gl;return e.getParameter(e.MAX_UNIFORM_BLOCK_SIZE)}enableHardwareClipping(e){this.enableExtension("GL_ANGLE_clip_cull_distance","require"),this.builtins.vertex.push(`out float gl_ClipDistance[ ${e} ]`)}enableMultiview(){this.enableExtension("GL_OVR_multiview2","require","fragment"),this.enableExtension("GL_OVR_multiview2","require","vertex"),this.builtins.vertex.push("layout(num_views = 2) in")}registerTransform(e,t){this.transforms.push({varyingName:e,attributeNode:t})}getTransforms(){const e=this.transforms;let t="";for(let r=0;r0&&(r+="\n"),r+=`\t// flow -> ${n}\n\t`),r+=`${s.code}\n\t`,e===i&&"compute"!==t&&(r+="// result\n\t","vertex"===t?(r+="gl_Position = ",r+=`${s.result};`):"fragment"===t&&(e.outputNode.isOutputStructNode||(r+="fragColor = ",r+=`${s.result};`)))}const n=e[t];n.extensions=this.getExtensions(t),n.uniforms=this.getUniforms(t),n.attributes=this.getAttributes(t),n.varyings=this.getVaryings(t),n.vars=this.getVars(t),n.structs=this.getStructs(t),n.codes=this.getCodes(t),n.transforms=this.getTransforms(t),n.flow=r}null!==this.material?(this.vertexShader=this._getGLSLVertexCode(e.vertex),this.fragmentShader=this._getGLSLFragmentCode(e.fragment)):this.computeShader=this._getGLSLVertexCode(e.compute)}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);let a=n.uniformGPU;if(void 0===a){const s=e.groupNode,o=s.name,u=this.getBindGroupArray(o,r);if("texture"===t)a=new nR(i.name,i.node,s),u.push(a);else if("cubeTexture"===t||"cubeDepthTexture"===t)a=new aR(i.name,i.node,s),u.push(a);else if("texture3D"===t)a=new oR(i.name,i.node,s),u.push(a);else if("buffer"===t){i.name=`buffer${e.id}`;const t=this.getSharedDataFromNode(e);let r=t.buffer;void 0===r&&(e.name=`NodeBuffer_${e.id}`,r=new ZS(e,s),r.name=e.name,t.buffer=r),u.push(r),a=r}else{let e=this.uniformGroups[o];void 0===e?(e=new tR(o,s),this.uniformGroups[o]=e,u.push(e)):-1===u.indexOf(e)&&u.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}}let fR=null,yR=null;class bR{constructor(e={}){this.parameters=Object.assign({},e),this.data=new WeakMap,this.renderer=null,this.domElement=null,this.timestampQueryPool={[Mt.RENDER]:null,[Mt.COMPUTE]:null},this.trackTimestamp=!0===e.trackTimestamp}async init(e){this.renderer=e}get coordinateSystem(){}beginRender(){}finishRender(){}beginCompute(){}finishCompute(){}draw(){}compute(){}createProgram(){}destroyProgram(){}createBindings(){}updateBindings(){}updateBinding(){}createRenderPipeline(){}createComputePipeline(){}needsRenderUpdate(){}getRenderCacheKey(){}createNodeBuilder(){}updateSampler(){}createDefaultTexture(){}createTexture(){}updateTexture(){}generateMipmaps(){}destroyTexture(){}async copyTextureToBuffer(){}copyTextureToTexture(){}copyFramebufferToTexture(){}createAttribute(){}createIndexAttribute(){}createStorageAttribute(){}updateAttribute(){}destroyAttribute(){}getContext(){}updateSize(){}updateViewport(){}updateTimeStampUID(e){const t=this.get(e),r=this.renderer.info.frame;let s;s=!0===e.isComputeNode?"c:"+this.renderer.info.compute.frameCalls:"r:"+this.renderer.info.render.frameCalls,t.timestampUID=s+":"+e.id+":f"+r}getTimestampUID(e){return this.get(e).timestampUID}getTimestampFrames(e){const t=this.timestampQueryPool[e];return t?t.getTimestampFrames():[]}_getQueryPool(e){const t=e.startsWith("c:")?Mt.COMPUTE:Mt.RENDER;return this.timestampQueryPool[t]}getTimestamp(e){return this._getQueryPool(e).getTimestamp(e)}hasTimestamp(e){return this._getQueryPool(e).hasTimestamp(e)}isOccluded(){}async resolveTimestampsAsync(e="render"){if(!this.trackTimestamp)return void v("WebGPURenderer: Timestamp tracking is disabled.");const t=this.timestampQueryPool[e];if(!t)return;const r=await t.resolveQueriesAsync();return this.renderer.info[e].timestamp=r,r}async getArrayBufferAsync(){}async hasFeatureAsync(){}hasFeature(){}getMaxAnisotropy(){}getDrawingBufferSize(){return fR=fR||new t,this.renderer.getDrawingBufferSize(fR)}setScissorTest(){}getClearColor(){const e=this.renderer;return yR=yR||new Zy,e.getClearColor(yR),yR.getRGB(yR),yR}getDomElement(){let e=this.domElement;return null===e&&(e=void 0!==this.parameters.canvas?this.parameters.canvas:Bt(),"setAttribute"in e&&e.setAttribute("data-engine",`three.js r${lt} webgpu`),this.domElement=e),e}hasCompatibility(){return!1}initRenderTarget(){}set(e,t){this.data.set(e,t)}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}has(e){return this.data.has(e)}delete(e){this.data.delete(e)}deleteBindGroupData(){}dispose(){}}let xR,TR,_R=0;class vR{constructor(e,t){this.buffers=[e.bufferGPU,t],this.type=e.type,this.bufferType=e.bufferType,this.pbo=e.pbo,this.byteLength=e.byteLength,this.bytesPerElement=e.BYTES_PER_ELEMENT,this.version=e.version,this.isInteger=e.isInteger,this.activeBufferIndex=0,this.baseId=e.id}get id(){return`${this.baseId}|${this.activeBufferIndex}`}get bufferGPU(){return this.buffers[this.activeBufferIndex]}get transformBuffer(){return this.buffers[1^this.activeBufferIndex]}switchBuffers(){this.activeBufferIndex^=1}}class NR{constructor(e){this.backend=e}createAttribute(e,t){const r=this.backend,{gl:s}=r,i=e.array,n=e.usage||s.STATIC_DRAW,a=e.isInterleavedBufferAttribute?e.data:e,o=r.get(a);let u,l=o.bufferGPU;if(void 0===l&&(l=this._createBuffer(s,t,i,n),o.bufferGPU=l,o.bufferType=t,o.version=a.version),i instanceof Float32Array)u=s.FLOAT;else if("undefined"!=typeof Float16Array&&i instanceof Float16Array)u=s.HALF_FLOAT;else if(i instanceof Uint16Array)u=e.isFloat16BufferAttribute?s.HALF_FLOAT:s.UNSIGNED_SHORT;else if(i instanceof Int16Array)u=s.SHORT;else if(i instanceof Uint32Array)u=s.UNSIGNED_INT;else if(i instanceof Int32Array)u=s.INT;else if(i instanceof Int8Array)u=s.BYTE;else if(i instanceof Uint8Array)u=s.UNSIGNED_BYTE;else{if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLBackend: Unsupported buffer data format: "+i);u=s.UNSIGNED_BYTE}let d={bufferGPU:l,bufferType:t,type:u,byteLength:i.byteLength,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,pbo:e.pbo,isInteger:u===s.INT||u===s.UNSIGNED_INT||e.gpuType===R,id:_R++};if(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute){const e=this._createBuffer(s,t,i,n);d=new vR(d,e)}r.set(e,d)}updateAttribute(e){const t=this.backend,{gl:r}=t,s=e.array,i=e.isInterleavedBufferAttribute?e.data:e,n=t.get(i),a=n.bufferType,o=e.isInterleavedBufferAttribute?e.data.updateRanges:e.updateRanges;if(r.bindBuffer(a,n.bufferGPU),0===o.length)r.bufferSubData(a,0,s);else{for(let e=0,t=o.length;e0?this.enable(s.SAMPLE_ALPHA_TO_COVERAGE):this.disable(s.SAMPLE_ALPHA_TO_COVERAGE),r>0&&this.currentClippingPlanes!==r){const e=12288;for(let t=0;t<8;t++)t{!function i(){const n=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(n===e.WAIT_FAILED)return e.deleteSync(t),void s();n!==e.TIMEOUT_EXPIRED?(e.deleteSync(t),r()):requestAnimationFrame(i)}()})}}let ER,AR,wR,CR=!1;class MR{constructor(e){this.backend=e,this.gl=e.gl,this.extensions=e.extensions,this.defaultTextures={},this._srcFramebuffer=null,this._dstFramebuffer=null,!1===CR&&(this._init(),CR=!0)}_init(){const e=this.gl;ER={[Gr]:e.REPEAT,[ve]:e.CLAMP_TO_EDGE,[kr]:e.MIRRORED_REPEAT},AR={[B]:e.NEAREST,[$r]:e.NEAREST_MIPMAP_NEAREST,[at]:e.NEAREST_MIPMAP_LINEAR,[de]:e.LINEAR,[nt]:e.LINEAR_MIPMAP_NEAREST,[Z]:e.LINEAR_MIPMAP_LINEAR},wR={[qr]:e.NEVER,[Hr]:e.ALWAYS,[A]:e.LESS,[w]:e.LEQUAL,[Wr]:e.EQUAL,[M]:e.GEQUAL,[C]:e.GREATER,[zr]:e.NOTEQUAL}}getGLTextureType(e){const{gl:t}=this;let r;return r=!0===e.isCubeTexture?t.TEXTURE_CUBE_MAP:!0===e.isArrayTexture||!0===e.isDataArrayTexture||!0===e.isCompressedArrayTexture?t.TEXTURE_2D_ARRAY:!0===e.isData3DTexture?t.TEXTURE_3D:t.TEXTURE_2D,r}getInternalFormat(e,t,r,s,i=!1){const{gl:n,extensions:a}=this;if(null!==e){if(void 0!==n[e])return n[e];d("WebGLBackend: Attempt to use non-existing WebGL internal format '"+e+"'")}let o=t;if(t===n.RED&&(r===n.FLOAT&&(o=n.R32F),r===n.HALF_FLOAT&&(o=n.R16F),r===n.UNSIGNED_BYTE&&(o=n.R8),r===n.UNSIGNED_SHORT&&(o=n.R16),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RED_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.R8UI),r===n.UNSIGNED_SHORT&&(o=n.R16UI),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RG&&(r===n.FLOAT&&(o=n.RG32F),r===n.HALF_FLOAT&&(o=n.RG16F),r===n.UNSIGNED_BYTE&&(o=n.RG8),r===n.UNSIGNED_SHORT&&(o=n.RG16),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RG_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RG8UI),r===n.UNSIGNED_SHORT&&(o=n.RG16UI),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RGB){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGB32F),r===n.HALF_FLOAT&&(o=n.RGB16F),r===n.UNSIGNED_BYTE&&(o=n.RGB8),r===n.UNSIGNED_SHORT&&(o=n.RGB16),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8:n.RGB8),r===n.UNSIGNED_SHORT_5_6_5&&(o=n.RGB565),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGB4),r===n.UNSIGNED_INT_5_9_9_9_REV&&(o=n.RGB9_E5),r===n.UNSIGNED_INT_10F_11F_11F_REV&&(o=n.R11F_G11F_B10F)}if(t===n.RGB_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGB8UI),r===n.UNSIGNED_SHORT&&(o=n.RGB16UI),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I)),t===n.RGBA){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGBA32F),r===n.HALF_FLOAT&&(o=n.RGBA16F),r===n.UNSIGNED_BYTE&&(o=n.RGBA8),r===n.UNSIGNED_SHORT&&(o=n.RGBA16),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8_ALPHA8:n.RGBA8),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGBA4),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1)}return t===n.RGBA_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGBA8UI),r===n.UNSIGNED_SHORT&&(o=n.RGBA16UI),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I)),t===n.DEPTH_COMPONENT&&(r===n.UNSIGNED_SHORT&&(o=n.DEPTH_COMPONENT16),r===n.UNSIGNED_INT&&(o=n.DEPTH_COMPONENT24),r===n.FLOAT&&(o=n.DEPTH_COMPONENT32F)),t===n.DEPTH_STENCIL&&r===n.UNSIGNED_INT_24_8&&(o=n.DEPTH24_STENCIL8),o!==n.R16F&&o!==n.R32F&&o!==n.RG16F&&o!==n.RG32F&&o!==n.RGBA16F&&o!==n.RGBA32F||a.get("EXT_color_buffer_float"),o}setTextureParameters(e,t){const{gl:r,extensions:s,backend:i}=this,n=p.getPrimaries(p.workingColorSpace),a=t.colorSpace===T?null:p.getPrimaries(t.colorSpace),o=t.colorSpace===T||n===a?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,t.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,t.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,o),r.texParameteri(e,r.TEXTURE_WRAP_S,ER[t.wrapS]),r.texParameteri(e,r.TEXTURE_WRAP_T,ER[t.wrapT]),e!==r.TEXTURE_3D&&e!==r.TEXTURE_2D_ARRAY||t.isArrayTexture||r.texParameteri(e,r.TEXTURE_WRAP_R,ER[t.wrapR]),r.texParameteri(e,r.TEXTURE_MAG_FILTER,AR[t.magFilter]);const u=void 0!==t.mipmaps&&t.mipmaps.length>0,l=t.minFilter===de&&u?Z:t.minFilter;if(r.texParameteri(e,r.TEXTURE_MIN_FILTER,AR[l]),t.compareFunction&&(r.texParameteri(e,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(e,r.TEXTURE_COMPARE_FUNC,wR[t.compareFunction])),!0===s.has("EXT_texture_filter_anisotropic")){if(t.magFilter===B)return;if(t.minFilter!==at&&t.minFilter!==Z)return;if(t.type===Q&&!1===s.has("OES_texture_float_linear"))return;if(t.anisotropy>1){const n=s.get("EXT_texture_filter_anisotropic");r.texParameterf(e,n.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,i.getMaxAnisotropy()))}}}createDefaultTexture(e){const{gl:t,backend:r,defaultTextures:s}=this,i=this.getGLTextureType(e);let n=s[i];void 0===n&&(n=t.createTexture(),r.state.bindTexture(i,n),t.texParameteri(i,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(i,t.TEXTURE_MAG_FILTER,t.NEAREST),s[i]=n),r.set(e,{textureGPU:n,glTextureType:i})}createTexture(e,t){const{gl:r,backend:s}=this,{levels:i,width:n,height:a,depth:o}=t,u=s.utils.convert(e.format,e.colorSpace),l=s.utils.convert(e.type),d=this.getInternalFormat(e.internalFormat,u,l,e.colorSpace,e.isVideoTexture),c=r.createTexture(),h=this.getGLTextureType(e);s.state.bindTexture(h,c),this.setTextureParameters(h,e),e.isArrayTexture||e.isDataArrayTexture||e.isCompressedArrayTexture?r.texStorage3D(r.TEXTURE_2D_ARRAY,i,d,n,a,o):e.isData3DTexture?r.texStorage3D(r.TEXTURE_3D,i,d,n,a,o):e.isVideoTexture||r.texStorage2D(h,i,d,n,a),s.set(e,{textureGPU:c,glTextureType:h,glFormat:u,glType:l,glInternalFormat:d})}copyBufferToTexture(e,t){const{gl:r,backend:s}=this,{textureGPU:i,glTextureType:n,glFormat:a,glType:o}=s.get(t),{width:u,height:l}=t.source.data;r.bindBuffer(r.PIXEL_UNPACK_BUFFER,e),s.state.bindTexture(n,i),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.texSubImage2D(n,0,0,0,u,l,a,o,0),r.bindBuffer(r.PIXEL_UNPACK_BUFFER,null),s.state.unbindTexture()}updateTexture(e,t){const{gl:r}=this,{width:s,height:i}=t,{textureGPU:n,glTextureType:a,glFormat:o,glType:u,glInternalFormat:l}=this.backend.get(e);if(!e.isRenderTargetTexture&&void 0!==n)if(this.backend.state.bindTexture(a,n),this.setTextureParameters(a,e),e.isCompressedTexture){const s=e.mipmaps,i=t.image;for(let t=0;t0){const t=Xr(s.width,s.height,e.format,e.type);for(const i of e.layerUpdates){const e=s.data.subarray(i*t/s.data.BYTES_PER_ELEMENT,(i+1)*t/s.data.BYTES_PER_ELEMENT);r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,i,s.width,s.height,1,o,u,e)}e.clearLayerUpdates()}else r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,s.width,s.height,s.depth,o,u,s.data)}else if(e.isData3DTexture){const e=t.image;r.texSubImage3D(r.TEXTURE_3D,0,0,0,0,e.width,e.height,e.depth,o,u,e.data)}else if(e.isVideoTexture)e.update(),r.texImage2D(a,0,l,o,u,t.image);else{const n=e.mipmaps;if(n.length>0)for(let e=0,t=n.length;e0,c=t.renderTarget?t.renderTarget.height:this.backend.getDrawingBufferSize().y;if(d){const r=0!==a||0!==o;let d,h;if(!0===e.isDepthTexture?(d=s.DEPTH_BUFFER_BIT,h=s.DEPTH_ATTACHMENT,t.stencil&&(d|=s.STENCIL_BUFFER_BIT)):(d=s.COLOR_BUFFER_BIT,h=s.COLOR_ATTACHMENT0),r){const e=this.backend.get(t.renderTarget),r=e.framebuffers[t.getCacheKey()],h=e.msaaFrameBuffer;i.bindFramebuffer(s.DRAW_FRAMEBUFFER,r),i.bindFramebuffer(s.READ_FRAMEBUFFER,h);const p=c-o-l;s.blitFramebuffer(a,p,a+u,p+l,a,p,a+u,p+l,d,s.NEAREST),i.bindFramebuffer(s.READ_FRAMEBUFFER,r),i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,p,u,l),i.unbindTexture()}else{const e=s.createFramebuffer();i.bindFramebuffer(s.DRAW_FRAMEBUFFER,e),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,h,s.TEXTURE_2D,n,0),s.blitFramebuffer(0,0,u,l,0,0,u,l,d,s.NEAREST),s.deleteFramebuffer(e)}}else i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,c-l-o,u,l),i.unbindTexture();e.generateMipmaps&&this.generateMipmaps(e),this.backend._setFramebuffer(t)}setupRenderBufferStorage(e,t,r,s=!1){const{gl:i}=this,n=t.renderTarget,{depthTexture:a,depthBuffer:o,stencilBuffer:u,width:l,height:d}=n;if(i.bindRenderbuffer(i.RENDERBUFFER,e),o&&!u){let t=i.DEPTH_COMPONENT24;if(!0===s){this.extensions.get("WEBGL_multisampled_render_to_texture").renderbufferStorageMultisampleEXT(i.RENDERBUFFER,n.samples,t,l,d)}else r>0?(a&&a.isDepthTexture&&a.type===i.FLOAT&&(t=i.DEPTH_COMPONENT32F),i.renderbufferStorageMultisample(i.RENDERBUFFER,r,t,l,d)):i.renderbufferStorage(i.RENDERBUFFER,t,l,d);i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.RENDERBUFFER,e)}else o&&u&&(r>0?i.renderbufferStorageMultisample(i.RENDERBUFFER,r,i.DEPTH24_STENCIL8,l,d):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,l,d),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,e));i.bindRenderbuffer(i.RENDERBUFFER,null)}async copyTextureToBuffer(e,t,r,s,i,n){const{backend:a,gl:o}=this,{textureGPU:u,glFormat:l,glType:d}=this.backend.get(e),c=o.createFramebuffer();a.state.bindFramebuffer(o.READ_FRAMEBUFFER,c);const h=e.isCubeTexture?o.TEXTURE_CUBE_MAP_POSITIVE_X+n:o.TEXTURE_2D;o.framebufferTexture2D(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,h,u,0);const p=this._getTypedArrayType(d),g=s*i*this._getBytesPerTexel(d,l),m=o.createBuffer();o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.bufferData(o.PIXEL_PACK_BUFFER,g,o.STREAM_READ),o.readPixels(t,r,s,i,l,d,0),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),await a.utils._clientWaitAsync();const f=new p(g/p.BYTES_PER_ELEMENT);return o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,f),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),a.state.bindFramebuffer(o.READ_FRAMEBUFFER,null),o.deleteFramebuffer(c),f}_getTypedArrayType(e){const{gl:t}=this;if(e===t.UNSIGNED_BYTE)return Uint8Array;if(e===t.UNSIGNED_SHORT_4_4_4_4)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_5_5_1)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_6_5)return Uint16Array;if(e===t.UNSIGNED_SHORT)return Uint16Array;if(e===t.UNSIGNED_INT)return Uint32Array;if(e===t.HALF_FLOAT)return Uint16Array;if(e===t.FLOAT)return Float32Array;throw new Error(`Unsupported WebGL type: ${e}`)}_getBytesPerTexel(e,t){const{gl:r}=this;let s=0;return e===r.UNSIGNED_BYTE&&(s=1),e!==r.UNSIGNED_SHORT_4_4_4_4&&e!==r.UNSIGNED_SHORT_5_5_5_1&&e!==r.UNSIGNED_SHORT_5_6_5&&e!==r.UNSIGNED_SHORT&&e!==r.HALF_FLOAT||(s=2),e!==r.UNSIGNED_INT&&e!==r.FLOAT||(s=4),t===r.RGBA?4*s:t===r.RGB?3*s:t===r.ALPHA?s:void 0}dispose(){const{gl:e}=this;null!==this._srcFramebuffer&&e.deleteFramebuffer(this._srcFramebuffer),null!==this._dstFramebuffer&&e.deleteFramebuffer(this._dstFramebuffer)}}function BR(e){return e.isDataTexture?e.image.data:"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e:e.data}class FR{constructor(e){this.backend=e,this.gl=this.backend.gl,this.availableExtensions=this.gl.getSupportedExtensions(),this.extensions={}}get(e){let t=this.extensions[e];return void 0===t&&(t=this.gl.getExtension(e),this.extensions[e]=t),t}has(e){return this.availableExtensions.includes(e)}}class LR{constructor(e){this.backend=e,this.maxAnisotropy=null}getMaxAnisotropy(){if(null!==this.maxAnisotropy)return this.maxAnisotropy;const e=this.backend.gl,t=this.backend.extensions;if(!0===t.has("EXT_texture_filter_anisotropic")){const r=t.get("EXT_texture_filter_anisotropic");this.maxAnisotropy=e.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else this.maxAnisotropy=0;return this.maxAnisotropy}}const PR={WEBGL_multi_draw:"WEBGL_multi_draw",WEBGL_compressed_texture_astc:"texture-compression-astc",WEBGL_compressed_texture_etc:"texture-compression-etc2",WEBGL_compressed_texture_etc1:"texture-compression-etc1",WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBGL_compressed_texture_s3tc:"texture-compression-s3tc",EXT_texture_compression_bptc:"texture-compression-bc",EXT_disjoint_timer_query_webgl2:"timestamp-query",OVR_multiview2:"OVR_multiview2"};class DR{constructor(e){this.gl=e.gl,this.extensions=e.extensions,this.info=e.renderer.info,this.mode=null,this.index=0,this.type=null,this.object=null}render(e,t){const{gl:r,mode:s,object:i,type:n,info:a,index:o}=this;0!==o?r.drawElements(s,t,n,e):r.drawArrays(s,e,t),a.update(i,t,1)}renderInstances(e,t,r){const{gl:s,mode:i,type:n,index:a,object:o,info:u}=this;0!==r&&(0!==a?s.drawElementsInstanced(i,t,n,e,r):s.drawArraysInstanced(i,e,t,r),u.update(o,t,r))}renderMultiDraw(e,t,r){const{extensions:s,mode:i,object:n,info:a}=this;if(0===r)return;const o=s.get("WEBGL_multi_draw");if(null===o)for(let s=0;sthis.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryStates.set(t,"inactive"),this.queryOffsets.set(e,t),t}beginQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null==t)return;if(null!==this.activeQuery)return;const r=this.queries[t];if(r)try{"inactive"===this.queryStates.get(t)&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,r),this.activeQuery=t,this.queryStates.set(t,"started"))}catch(e){o("Error in beginQuery:",e),this.activeQuery=null,this.queryStates.set(t,"inactive")}}endQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null!=t&&this.activeQuery===t)try{this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.queryStates.set(t,"ended"),this.activeQuery=null}catch(e){o("Error in endQuery:",e),this.queryStates.set(t,"inactive"),this.activeQuery=null}}async resolveQueriesAsync(){if(!this.trackTimestamp||this.pendingResolve)return this.lastValue;this.pendingResolve=!0;try{const e=new Map;for(const[t,r]of this.queryOffsets){if("ended"===this.queryStates.get(r)){const s=this.queries[r];e.set(t,this.resolveQuery(s))}}if(0===e.size)return this.lastValue;const t={},r=[];for(const[s,i]of e){const e=s.match(/^(.*):f(\d+)$/),n=parseInt(e[2]);!1===r.includes(n)&&r.push(n),void 0===t[n]&&(t[n]=0);const a=await i;this.timestamps.set(s,a),t[n]+=a}const s=t[r[r.length-1]];return this.lastValue=s,this.frames=r,this.currentQueryIndex=0,this.queryOffsets.clear(),this.queryStates.clear(),this.activeQuery=null,s}catch(e){return o("Error resolving queries:",e),this.lastValue}finally{this.pendingResolve=!1}}async resolveQuery(e){return new Promise(t=>{if(this.isDisposed)return void t(this.lastValue);let r,s=!1;const i=e=>{s||(s=!0,r&&(clearTimeout(r),r=null),t(e))},n=()=>{if(this.isDisposed)i(this.lastValue);else try{if(this.gl.getParameter(this.ext.GPU_DISJOINT_EXT))return void i(this.lastValue);if(!this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE))return void(r=setTimeout(n,1));const s=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);t(Number(s)/1e6)}catch(e){o("Error checking query:",e),t(this.lastValue)}};n()})}dispose(){if(!this.isDisposed&&(this.isDisposed=!0,this.trackTimestamp)){for(const e of this.queries)this.gl.deleteQuery(e);this.queries=[],this.queryStates.clear(),this.queryOffsets.clear(),this.lastValue=0,this.activeQuery=null}}}class OR extends bR{constructor(e={}){super(e),this.isWebGLBackend=!0,this.attributeUtils=null,this.extensions=null,this.capabilities=null,this.textureUtils=null,this.bufferRenderer=null,this.gl=null,this.state=null,this.utils=null,this.vaoCache={},this.transformFeedbackCache={},this.discard=!1,this.disjoint=null,this.parallel=null,this._currentContext=null,this._knownBindings=new WeakSet,this._supportsInvalidateFramebuffer="undefined"!=typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),this._xrFramebuffer=null}init(e){super.init(e);const t=this.parameters,r={antialias:e.currentSamples>0,alpha:!0,depth:e.depth,stencil:e.stencil},s=void 0!==t.context?t.context:e.domElement.getContext("webgl2",r);function i(t){t.preventDefault();const r={api:"WebGL",message:t.statusMessage||"Unknown reason",reason:null,originalEvent:t};e.onDeviceLost(r)}this._onContextLost=i,e.domElement.addEventListener("webglcontextlost",i,!1),this.gl=s,this.extensions=new FR(this),this.capabilities=new LR(this),this.attributeUtils=new NR(this),this.textureUtils=new MR(this),this.bufferRenderer=new DR(this),this.state=new SR(this),this.utils=new RR(this),this.extensions.get("EXT_color_buffer_float"),this.extensions.get("WEBGL_clip_cull_distance"),this.extensions.get("OES_texture_float_linear"),this.extensions.get("EXT_color_buffer_half_float"),this.extensions.get("WEBGL_multisampled_render_to_texture"),this.extensions.get("WEBGL_render_shared_exponent"),this.extensions.get("WEBGL_multi_draw"),this.extensions.get("OVR_multiview2"),this.extensions.get("EXT_clip_control"),this.disjoint=this.extensions.get("EXT_disjoint_timer_query_webgl2"),this.parallel=this.extensions.get("KHR_parallel_shader_compile"),this.drawBuffersIndexedExt=this.extensions.get("OES_draw_buffers_indexed"),!0===t.reversedDepthBuffer&&this.extensions.has("EXT_clip_control")&&this.state.setReversedDepth(!0)}get coordinateSystem(){return c}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}async makeXRCompatible(){!0!==this.gl.getContextAttributes().xrCompatible&&await this.gl.makeXRCompatible()}setXRTarget(e){this._xrFramebuffer=e}setXRRenderTargetTextures(e,t,r=null){const s=this.gl;if(this.set(e.texture,{textureGPU:t,glInternalFormat:s.RGBA8}),null!==r){const t=e.stencilBuffer?s.DEPTH24_STENCIL8:s.DEPTH_COMPONENT24;this.set(e.depthTexture,{textureGPU:r,glInternalFormat:t}),!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!0===e._autoAllocateDepthBuffer&&!1===e.multiview&&d("WebGLBackend: Render-to-texture extension was disabled because an external texture was provided"),e._autoAllocateDepthBuffer=!1}}initTimestampQuery(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e]||(this.timestampQueryPool[e]=new IR(this.gl,e,2048));const r=this.timestampQueryPool[e];null!==r.allocateQueriesForContext(t)&&r.beginQuery(t)}prepareTimestampBuffer(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e].endQuery(t)}getContext(){return this.gl}beginRender(e){const{state:t}=this,r=this.get(e);if(e.viewport)this.updateViewport(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.viewport(0,0,e,r)}if(e.scissor)this.updateScissor(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.scissor(0,0,e,r)}this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e)),r.previousContext=this._currentContext,this._currentContext=e,this._setFramebuffer(e),this.clear(e.clearColor,e.clearDepth,e.clearStencil,e,!1);const s=e.occlusionQueryCount;s>0&&(r.currentOcclusionQueries=r.occlusionQueries,r.currentOcclusionQueryObjects=r.occlusionQueryObjects,r.lastOcclusionObject=null,r.occlusionQueries=new Array(s),r.occlusionQueryObjects=new Array(s),r.occlusionQueryIndex=0)}finishRender(e){const{gl:t,state:r}=this,s=this.get(e),i=s.previousContext;r.resetVertexState();const n=e.occlusionQueryCount;n>0&&(n>s.occlusionQueryIndex&&t.endQuery(t.ANY_SAMPLES_PASSED),this.resolveOccludedAsync(e));const a=e.textures;if(null!==a)for(let e=0;e{let a=0;for(let t=0;t{t.isBatchedMesh?null!==t._multiDrawInstances?(v("WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),b.renderMultiDrawInstances(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount,t._multiDrawInstances)):this.hasFeature("WEBGL_multi_draw")?b.renderMultiDraw(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount):v("WebGLBackend: WEBGL_multi_draw not supported."):T>1?b.renderInstances(_,x,T):b.render(_,x)};if(!0===e.camera.isArrayCamera&&e.camera.cameras.length>0&&!1===e.camera.isMultiViewCamera){const r=this.get(e.camera),s=e.camera.cameras,i=e.getBindingGroup("cameraIndex").bindings[0];if(void 0===r.indexesGPU||r.indexesGPU.length!==s.length){const e=new Uint32Array([0,0,0,0]),t=[];for(let r=0,i=s.length;r{const i=this.parallel,n=()=>{r.getProgramParameter(a,i.COMPLETION_STATUS_KHR)?(this._completeCompile(e,s),t()):requestAnimationFrame(n)};n()});return void t.push(i)}this._completeCompile(e,s)}_handleSource(e,t){const r=e.split("\n"),s=[],i=Math.max(t-6,0),n=Math.min(t+6,r.length);for(let e=i;e":" "} ${i}: ${r[e]}`)}return s.join("\n")}_getShaderErrors(e,t,r){const s=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||"").trim();if(s&&""===i)return"";const n=/ERROR: 0:(\d+)/.exec(i);if(n){const s=parseInt(n[1]);return r.toUpperCase()+"\n\n"+i+"\n\n"+this._handleSource(e.getShaderSource(t),s)}return i}_logProgramError(e,t,r){if(this.renderer.debug.checkShaderErrors){const s=this.gl,i=(s.getProgramInfoLog(e)||"").trim();if(!1===s.getProgramParameter(e,s.LINK_STATUS))if("function"==typeof this.renderer.debug.onShaderError)this.renderer.debug.onShaderError(s,e,r,t);else{const n=this._getShaderErrors(s,r,"vertex"),a=this._getShaderErrors(s,t,"fragment");o("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(e,s.VALIDATE_STATUS)+"\n\nProgram Info Log: "+i+"\n"+n+"\n"+a)}else""!==i&&d("WebGLProgram: Program Info Log:",i)}}_completeCompile(e,t){const{state:r,gl:s}=this,i=this.get(t),{programGPU:n,fragmentShader:a,vertexShader:o}=i;!1===s.getProgramParameter(n,s.LINK_STATUS)&&this._logProgramError(n,a,o),r.useProgram(n);const u=e.getBindings();this._setupBindings(u,n),this.set(t,{programGPU:n,pipeline:n})}createComputePipeline(e,t){const{state:r,gl:s}=this,i={stage:"fragment",code:"#version 300 es\nprecision highp float;\nvoid main() {}"};this.createProgram(i);const{computeProgram:n}=e,a=s.createProgram(),o=this.get(i).shaderGPU,u=this.get(n).shaderGPU,l=n.transforms,d=[],c=[];for(let e=0;ePR[t]===e),r=this.extensions;for(let e=0;e1,h=!0===i.isXRRenderTarget,p=!0===h&&!0===i._hasExternalTextures;let g=n.msaaFrameBuffer,m=n.depthRenderbuffer;const f=this.extensions.get("WEBGL_multisampled_render_to_texture"),y=this.extensions.get("OVR_multiview2"),b=this._useMultisampledExtension(i),x=Xy(e);let T;if(l?(n.cubeFramebuffers||(n.cubeFramebuffers={}),T=n.cubeFramebuffers[x]):h&&!1===p?T=this._xrFramebuffer:(n.framebuffers||(n.framebuffers={}),T=n.framebuffers[x]),void 0===T){T=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,T);const s=e.textures,o=[];if(l){n.cubeFramebuffers[x]=T;const{textureGPU:e}=this.get(s[0]),r=this.renderer._activeCubeFace,i=this.renderer._activeMipmapLevel;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,e,i)}else{n.framebuffers[x]=T;for(let r=0;r0&&!1===b&&!i.multiview){if(void 0===g){const s=[];g=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,g);const i=[],l=e.textures;for(let r=0;r0&&!1===this._useMultisampledExtension(s)){const n=i.framebuffers[e.getCacheKey()];let a=t.COLOR_BUFFER_BIT;s.resolveDepthBuffer&&(s.depthBuffer&&(a|=t.DEPTH_BUFFER_BIT),s.stencilBuffer&&s.resolveStencilBuffer&&(a|=t.STENCIL_BUFFER_BIT));const o=i.msaaFrameBuffer,u=i.msaaRenderbuffers,l=e.textures,d=l.length>1;if(r.bindFramebuffer(t.READ_FRAMEBUFFER,o),r.bindFramebuffer(t.DRAW_FRAMEBUFFER,n),d)for(let e=0;e0&&!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!1!==e._autoAllocateDepthBuffer}dispose(){null!==this.textureUtils&&this.textureUtils.dispose();const e=this.extensions.get("WEBGL_lose_context");e&&e.loseContext(),this.renderer.domElement.removeEventListener("webglcontextlost",this._onContextLost)}}const VR="point-list",kR="line-list",GR="line-strip",$R="triangle-list",zR="undefined"!=typeof self&&self.GPUShaderStage?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4},WR="never",HR="less",qR="equal",jR="less-equal",XR="greater",KR="not-equal",QR="greater-equal",YR="always",ZR="store",JR="load",eE="clear",tE="ccw",rE="cw",sE="none",iE="back",nE="uint16",aE="uint32",oE="r8unorm",uE="r8snorm",lE="r8uint",dE="r8sint",cE="r16uint",hE="r16sint",pE="r16float",gE="rg8unorm",mE="rg8snorm",fE="rg8uint",yE="rg8sint",bE="r32uint",xE="r32sint",TE="r32float",_E="rg16uint",vE="rg16sint",NE="rg16float",SE="rgba8unorm",RE="rgba8unorm-srgb",EE="rgba8snorm",AE="rgba8uint",wE="rgba8sint",CE="bgra8unorm",ME="bgra8unorm-srgb",BE="rgb9e5ufloat",FE="rgb10a2unorm",LE="rg11b10ufloat",PE="rg32uint",DE="rg32sint",UE="rg32float",IE="rgba16uint",OE="rgba16sint",VE="rgba16float",kE="rgba32uint",GE="rgba32sint",$E="rgba32float",zE="depth16unorm",WE="depth24plus",HE="depth24plus-stencil8",qE="depth32float",jE="depth32float-stencil8",XE="bc1-rgba-unorm",KE="bc1-rgba-unorm-srgb",QE="bc2-rgba-unorm",YE="bc2-rgba-unorm-srgb",ZE="bc3-rgba-unorm",JE="bc3-rgba-unorm-srgb",eA="bc4-r-unorm",tA="bc4-r-snorm",rA="bc5-rg-unorm",sA="bc5-rg-snorm",iA="bc6h-rgb-ufloat",nA="bc6h-rgb-float",aA="bc7-rgba-unorm",oA="bc7-rgba-unorm-srgb",uA="etc2-rgb8unorm",lA="etc2-rgb8unorm-srgb",dA="etc2-rgb8a1unorm",cA="etc2-rgb8a1unorm-srgb",hA="etc2-rgba8unorm",pA="etc2-rgba8unorm-srgb",gA="eac-r11unorm",mA="eac-r11snorm",fA="eac-rg11unorm",yA="eac-rg11snorm",bA="astc-4x4-unorm",xA="astc-4x4-unorm-srgb",TA="astc-5x4-unorm",_A="astc-5x4-unorm-srgb",vA="astc-5x5-unorm",NA="astc-5x5-unorm-srgb",SA="astc-6x5-unorm",RA="astc-6x5-unorm-srgb",EA="astc-6x6-unorm",AA="astc-6x6-unorm-srgb",wA="astc-8x5-unorm",CA="astc-8x5-unorm-srgb",MA="astc-8x6-unorm",BA="astc-8x6-unorm-srgb",FA="astc-8x8-unorm",LA="astc-8x8-unorm-srgb",PA="astc-10x5-unorm",DA="astc-10x5-unorm-srgb",UA="astc-10x6-unorm",IA="astc-10x6-unorm-srgb",OA="astc-10x8-unorm",VA="astc-10x8-unorm-srgb",kA="astc-10x10-unorm",GA="astc-10x10-unorm-srgb",$A="astc-12x10-unorm",zA="astc-12x10-unorm-srgb",WA="astc-12x12-unorm",HA="astc-12x12-unorm-srgb",qA="clamp-to-edge",jA="repeat",XA="mirror-repeat",KA="linear",QA="nearest",YA="zero",ZA="one",JA="src",ew="one-minus-src",tw="src-alpha",rw="one-minus-src-alpha",sw="dst",iw="one-minus-dst",nw="dst-alpha",aw="one-minus-dst-alpha",ow="src-alpha-saturated",uw="constant",lw="one-minus-constant",dw="add",cw="subtract",hw="reverse-subtract",pw="min",gw="max",mw=0,fw=15,yw="keep",bw="zero",xw="replace",Tw="invert",_w="increment-clamp",vw="decrement-clamp",Nw="increment-wrap",Sw="decrement-wrap",Rw="storage",Ew="read-only-storage",Aw="write-only",ww="read-only",Cw="read-write",Mw="non-filtering",Bw="comparison",Fw="float",Lw="unfilterable-float",Pw="depth",Dw="sint",Uw="uint",Iw="2d",Ow="3d",Vw="2d",kw="2d-array",Gw="cube",$w="3d",zw="all",Ww="vertex",Hw="instance",qw={CoreFeaturesAndLimits:"core-features-and-limits",DepthClipControl:"depth-clip-control",Depth32FloatStencil8:"depth32float-stencil8",TextureCompressionBC:"texture-compression-bc",TextureCompressionBCSliced3D:"texture-compression-bc-sliced-3d",TextureCompressionETC2:"texture-compression-etc2",TextureCompressionASTC:"texture-compression-astc",TextureCompressionASTCSliced3D:"texture-compression-astc-sliced-3d",TimestampQuery:"timestamp-query",IndirectFirstInstance:"indirect-first-instance",ShaderF16:"shader-f16",RG11B10UFloat:"rg11b10ufloat-renderable",BGRA8UNormStorage:"bgra8unorm-storage",Float32Filterable:"float32-filterable",Float32Blendable:"float32-blendable",ClipDistances:"clip-distances",DualSourceBlending:"dual-source-blending",Subgroups:"subgroups",TextureFormatsTier1:"texture-formats-tier1",TextureFormatsTier2:"texture-formats-tier2"},jw={"texture-compression-s3tc":"texture-compression-bc","texture-compression-etc1":"texture-compression-etc2"};class Xw extends rR{constructor(e,t,r){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class Kw extends KS{constructor(e,t){super(e,t?t.array:null),this._attribute=t,this.isStorageBuffer=!0}get attribute(){return this._attribute}}let Qw=0;class Yw extends Kw{constructor(e,t){super("StorageBuffer_"+Qw++,e?e.value:null),this.nodeUniform=e,this.access=e?e.access:si.READ_WRITE,this.groupNode=t}get attribute(){return this.nodeUniform.value}get buffer(){return this.nodeUniform.value.array}}class Zw extends _y{constructor(e){super(),this.device=e;this.mipmapSampler=e.createSampler({minFilter:KA}),this.flipYSampler=e.createSampler({minFilter:QA}),this.flipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(this.flipUniformBuffer,0,new Uint32Array([1])),this.noFlipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM}),this.transferPipelines={},this.mipmapShaderModule=e.createShaderModule({label:"mipmap",code:"\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4f,\n\t@location( 0 ) vTex : vec2f,\n\t@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,\n};\n\n@group( 0 ) @binding ( 2 )\nvar flipY: u32;\n\n@vertex\nfn mainVS(\n\t\t@builtin( vertex_index ) vertexIndex : u32,\n\t\t@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array(\n\t\tvec2f( -1, -1 ),\n\t\tvec2f( -1, 3 ),\n\t\tvec2f( 3, -1 ),\n\t);\n\n\tlet p = pos[ vertexIndex ];\n\tlet mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );\n\tVarys.vTex = p * mult + vec2f( 0.5 );\n\tVarys.Position = vec4f( p, 0, 1 );\n\tVarys.vBaseArrayLayer = instanceIndex;\n\n\treturn Varys;\n\n}\n\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img2d : texture_2d;\n\n@fragment\nfn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2d, imgSampler, Varys.vTex );\n\n}\n\n@group( 0 ) @binding( 1 )\nvar img2dArray : texture_2d_array;\n\n@fragment\nfn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );\n\n}\n\nconst faceMat = array(\n mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1 ), // pos-x\n mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1 ), // neg-x\n mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1 ), // pos-y\n mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1 ), // neg-y\n mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1 ), // pos-z\n mat3x3f( -2, 0, 0, 0, -2, 0, 1, 1, -1 ), // neg-z\n);\n\n@group( 0 ) @binding( 1 )\nvar imgCube : texture_cube;\n\n@fragment\nfn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );\n\n}\n"})}getTransferPipeline(e,t){const r=`${e}-${t=t||"2d-array"}`;let s=this.transferPipelines[r];return void 0===s&&(s=this.device.createRenderPipeline({label:`mipmap-${e}-${t}`,vertex:{module:this.mipmapShaderModule},fragment:{module:this.mipmapShaderModule,entryPoint:`main_${t.replace("-","_")}`,targets:[{format:e}]},layout:"auto"}),this.transferPipelines[r]=s),s}flipY(e,t,r=0){const s=t.format,{width:i,height:n}=t.size,a=this.device.createTexture({size:{width:i,height:n},format:s,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}),o=this.getTransferPipeline(s,e.textureBindingViewDimension),u=this.getTransferPipeline(s,a.textureBindingViewDimension),l=this.device.createCommandEncoder({}),d=(e,t,r,s,i,n)=>{const a=e.getBindGroupLayout(0),o=this.device.createBindGroup({layout:a,entries:[{binding:0,resource:this.flipYSampler},{binding:1,resource:t.createView({dimension:t.textureBindingViewDimension||"2d-array",baseMipLevel:0,mipLevelCount:1})},{binding:2,resource:{buffer:n?this.flipUniformBuffer:this.noFlipUniformBuffer}}]}),u=l.beginRenderPass({colorAttachments:[{view:s.createView({dimension:"2d",baseMipLevel:0,mipLevelCount:1,baseArrayLayer:i,arrayLayerCount:1}),loadOp:eE,storeOp:ZR}]});u.setPipeline(e),u.setBindGroup(0,o),u.draw(3,1,0,r),u.end()};d(o,e,r,a,0,!1),d(u,a,0,e,r,!0),this.device.queue.submit([l.finish()]),a.destroy()}generateMipmaps(e,t=null){const r=this.get(e),s=r.layers||this._mipmapCreateBundles(e),i=t||this.device.createCommandEncoder({label:"mipmapEncoder"});this._mipmapRunBundles(i,s),null===t&&this.device.queue.submit([i.finish()]),r.layers=s}_mipmapCreateBundles(e){const t=e.textureBindingViewDimension||"2d-array",r=this.getTransferPipeline(e.format,t),s=r.getBindGroupLayout(0),i=[];for(let n=1;n0)for(let t=0,n=s.length;t0)for(let t=0,n=s.length;t0?e.width:r.size.width,l=a>0?e.height:r.size.height;try{o.queue.copyExternalImageToTexture({source:e,flipY:i},{texture:t,mipLevel:a,origin:{x:0,y:0,z:s},premultipliedAlpha:n},{width:u,height:l,depthOrArrayLayers:1})}catch(e){}}_getPassUtils(){let e=this._passUtils;return null===e&&(this._passUtils=e=new Zw(this.backend.device)),e}_generateMipmaps(e,t=null){this._getPassUtils().generateMipmaps(e,t)}_flipY(e,t,r=0){this._getPassUtils().flipY(e,t,r)}_copyBufferToTexture(e,t,r,s,i,n=0,a=0){const o=this.backend.device,u=e.data,l=this._getBytesPerTexel(r.format),d=e.width*l;o.queue.writeTexture({texture:t,mipLevel:a,origin:{x:0,y:0,z:s}},u,{offset:e.width*e.height*l*n,bytesPerRow:d},{width:e.width,height:e.height,depthOrArrayLayers:1}),!0===i&&this._flipY(t,r,s)}_copyCompressedBufferToTexture(e,t,r){const s=this.backend.device,i=this._getBlockData(r.format),n=r.size.depthOrArrayLayers>1;for(let a=0;a]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i,iC=/([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi,nC={f32:"float",i32:"int",u32:"uint",bool:"bool","vec2":"vec2","vec2":"ivec2","vec2":"uvec2","vec2":"bvec2",vec2f:"vec2",vec2i:"ivec2",vec2u:"uvec2",vec2b:"bvec2","vec3":"vec3","vec3":"ivec3","vec3":"uvec3","vec3":"bvec3",vec3f:"vec3",vec3i:"ivec3",vec3u:"uvec3",vec3b:"bvec3","vec4":"vec4","vec4":"ivec4","vec4":"uvec4","vec4":"bvec4",vec4f:"vec4",vec4i:"ivec4",vec4u:"uvec4",vec4b:"bvec4","mat2x2":"mat2",mat2x2f:"mat2","mat3x3":"mat3",mat3x3f:"mat3","mat4x4":"mat4",mat4x4f:"mat4",sampler:"sampler",texture_1d:"texture",texture_2d:"texture",texture_2d_array:"texture",texture_multisampled_2d:"cubeTexture",texture_depth_2d:"depthTexture",texture_depth_2d_array:"depthTexture",texture_depth_multisampled_2d:"depthTexture",texture_depth_cube:"depthTexture",texture_depth_cube_array:"depthTexture",texture_3d:"texture3D",texture_cube:"cubeTexture",texture_cube_array:"cubeTexture",texture_storage_1d:"storageTexture",texture_storage_2d:"storageTexture",texture_storage_2d_array:"storageTexture",texture_storage_3d:"storageTexture"};class aC extends lS{constructor(e){const{type:t,inputs:r,name:s,inputsCode:i,blockCode:n,outputType:a}=(e=>{const t=(e=e.trim()).match(sC);if(null!==t&&4===t.length){const r=t[2],s=[];let i=null;for(;null!==(i=iC.exec(r));)s.push({name:i[1],type:i[2]});const n=[];for(let e=0;e "+this.outputType:"";return`fn ${e} ( ${this.inputsCode.trim()} ) ${t}`+this.blockCode}}class oC extends uS{parseFunction(e){return new aC(e)}}const uC={[si.READ_ONLY]:"read",[si.WRITE_ONLY]:"write",[si.READ_WRITE]:"read_write"},lC={[Gr]:"repeat",[ve]:"clamp",[kr]:"mirror"},dC={vertex:zR.VERTEX,fragment:zR.FRAGMENT,compute:zR.COMPUTE},cC={instance:!0,swizzleAssign:!1,storageBuffer:!0},hC={"^^":"tsl_xor"},pC={float:"f32",int:"i32",uint:"u32",bool:"bool",color:"vec3",vec2:"vec2",ivec2:"vec2",uvec2:"vec2",bvec2:"vec2",vec3:"vec3",ivec3:"vec3",uvec3:"vec3",bvec3:"vec3",vec4:"vec4",ivec4:"vec4",uvec4:"vec4",bvec4:"vec4",mat2:"mat2x2",mat3:"mat3x3",mat4:"mat4x4"},gC={},mC={tsl_xor:new pT("fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }"),mod_float:new pT("fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }"),mod_vec2:new pT("fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }"),mod_vec3:new pT("fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }"),mod_vec4:new pT("fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }"),equals_bool:new pT("fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }"),equals_bvec2:new pT("fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }"),equals_bvec3:new pT("fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }"),equals_bvec4:new pT("fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }"),repeatWrapping_float:new pT("fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }"),mirrorWrapping_float:new pT("fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }"),clampWrapping_float:new pT("fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }"),biquadraticTexture:new pT("\nfn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n"),biquadraticTextureArray:new pT("\nfn tsl_biquadraticTexture_array( map : texture_2d_array, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n")},fC={dFdx:"dpdx",dFdy:"- dpdy",mod_float:"tsl_mod_float",mod_vec2:"tsl_mod_vec2",mod_vec3:"tsl_mod_vec3",mod_vec4:"tsl_mod_vec4",equals_bool:"tsl_equals_bool",equals_bvec2:"tsl_equals_bvec2",equals_bvec3:"tsl_equals_bvec3",equals_bvec4:"tsl_equals_bvec4",inversesqrt:"inverseSqrt",bitcast:"bitcast",floatpack_snorm_2x16:"pack2x16snorm",floatpack_unorm_2x16:"pack2x16unorm",floatpack_float16_2x16:"pack2x16float",floatunpack_snorm_2x16:"unpack2x16snorm",floatunpack_unorm_2x16:"unpack2x16unorm",floatunpack_float16_2x16:"unpack2x16float"};let yC="";!0!==("undefined"!=typeof navigator&&/Firefox|Deno/g.test(navigator.userAgent))&&(yC+="diagnostic( off, derivative_uniformity );\n");class bC extends jN{constructor(e,t){super(e,t,new oC),this.uniformGroups={},this.uniformGroupsBindings={},this.builtins={},this.directives={},this.scopedArrays=new Map}_generateTextureSample(e,t,r,s,i,n=this.shaderStage){return"fragment"===n?s?i?`textureSample( ${t}, ${t}_sampler, ${r}, ${s}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r}, ${s} )`:i?`textureSample( ${t}, ${t}_sampler, ${r}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r} )`:this.generateTextureSampleLevel(e,t,r,"0",s)}generateTextureSampleLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateWrapFunction(e){const t=`tsl_coord_${lC[e.wrapS]}S_${lC[e.wrapT]}_${e.is3DTexture||e.isData3DTexture?"3d":"2d"}T`;let r=gC[t];if(void 0===r){const s=[],i=e.is3DTexture||e.isData3DTexture?"vec3f":"vec2f";let n=`fn ${t}( coord : ${i} ) -> ${i} {\n\n\treturn ${i}(\n`;const a=(e,t)=>{e===Gr?(s.push(mC.repeatWrapping_float),n+=`\t\ttsl_repeatWrapping_float( coord.${t} )`):e===ve?(s.push(mC.clampWrapping_float),n+=`\t\ttsl_clampWrapping_float( coord.${t} )`):e===kr?(s.push(mC.mirrorWrapping_float),n+=`\t\ttsl_mirrorWrapping_float( coord.${t} )`):(n+=`\t\tcoord.${t}`,d(`WebGPURenderer: Unsupported texture wrap type "${e}" for vertex shader.`))};a(e.wrapS,"x"),n+=",\n",a(e.wrapT,"y"),(e.is3DTexture||e.isData3DTexture)&&(n+=",\n",a(e.wrapR,"z")),n+="\n\t);\n\n}\n",gC[t]=r=new pT(n,s)}return r.build(this),t}generateArrayDeclaration(e,t){return`array< ${this.getType(e)}, ${t} >`}generateTextureDimension(e,t,r){const s=this.getDataFromNode(e,this.shaderStage,this.globalCache);void 0===s.dimensionsSnippet&&(s.dimensionsSnippet={});let i=s.dimensionsSnippet[r];if(void 0===s.dimensionsSnippet[r]){let n,a;const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(e),u=o>1;a=e.is3DTexture||e.isData3DTexture?"vec3":"vec2",n=u||e.isStorageTexture?t:`${t}${r?`, u32( ${r} )`:""}`,i=new wu(new ml(`textureDimensions( ${n} )`,a)),s.dimensionsSnippet[r]=i,(e.isArrayTexture||e.isDataArrayTexture||e.is3DTexture||e.isData3DTexture)&&(s.arrayLayerCount=new wu(new ml(`textureNumLayers(${t})`,"u32"))),e.isTextureCube&&(s.cubeFaceCount=new wu(new ml("6u","u32")))}return i.build(this)}generateFilteredTexture(e,t,r,s,i="0u",n){const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,i);return s&&(r=`${r} + vec2(${s}) / ${o}`),n?(this._include("biquadraticTextureArray"),`tsl_biquadraticTexture_array( ${t}, ${a}( ${r} ), ${o}, u32( ${n} ), u32( ${i} ) )`):(this._include("biquadraticTexture"),`tsl_biquadraticTexture( ${t}, ${a}( ${r} ), ${o}, u32( ${i} ) )`)}generateTextureLod(e,t,r,s,i,n="0u"){if(!0===e.isCubeTexture){i&&(r=`${r} + vec3(${i})`);return`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${e.isDepthTexture?"u32":"f32"}( ${n} ) )`}const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,n),u=e.is3DTexture||e.isData3DTexture?"vec3":"vec2";i&&(r=`${r} + ${u}(${i}) / ${u}( ${o} )`);return r=`${u}( clamp( floor( ${a}( ${r} ) * ${u}( ${o} ) ), ${`${u}( 0 )`}, ${`${u}( ${o} - ${"vec3"===u?"vec3( 1, 1, 1 )":"vec2( 1, 1 )"} )`} ) )`,this.generateTextureLoad(e,t,r,n,s,null)}generateStorageTextureLoad(e,t,r,s,i,n){let a;return n&&(r=`${r} + ${n}`),a=i?`textureLoad( ${t}, ${r}, ${i} )`:`textureLoad( ${t}, ${r} )`,a}generateTextureLoad(e,t,r,s,i,n){let a;return null===s&&(s="0u"),n&&(r=`${r} + ${n}`),i?a=`textureLoad( ${t}, ${r}, ${i}, u32( ${s} ) )`:(a=`textureLoad( ${t}, ${r}, u32( ${s} ) )`,this.renderer.backend.compatibilityMode&&e.isDepthTexture&&(a+=".x")),a}generateTextureStore(e,t,r,s,i){let n;return n=s?`textureStore( ${t}, ${r}, ${s}, ${i} )`:`textureStore( ${t}, ${r}, ${i} )`,n}isSampleCompare(e){return!0===e.isDepthTexture&&null!==e.compareFunction&&this.renderer.hasCompatibility(E.TEXTURE_COMPARE)}isUnfilterable(e){return"float"!==this.getComponentTypeFromTexture(e)||!this.isAvailable("float32Filterable")&&!0===e.isDataTexture&&e.type===Q||!1===this.isSampleCompare(e)&&e.minFilter===B&&e.magFilter===B||this.renderer.backend.utils.getTextureSampleData(e).primarySamples>1}generateTexture(e,t,r,s,i,n=this.shaderStage){let a=null;return a=this.isUnfilterable(e)?this.generateTextureLod(e,t,r,s,i,"0",n):this._generateTextureSample(e,t,r,s,i,n),a}generateTextureGrad(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]} )`:n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]} )`;o(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${a} shader.`)}generateTextureCompare(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return!0===e.isDepthTexture&&!0===e.isArrayTexture?n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${a} shader.`)}generateTextureLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateTextureBias(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${a} shader.`)}getPropertyName(e,t=this.shaderStage){if(!0===e.isNodeVarying&&!0===e.needsInterpolation){if("vertex"===t)return`varyings.${e.name}`}else if(!0===e.isNodeUniform){const t=e.name,r=e.type;return"texture"===r||"cubeTexture"===r||"cubeDepthTexture"===r||"storageTexture"===r||"texture3D"===r?t:"buffer"===r||"storageBuffer"===r||"indirectStorageBuffer"===r?this.isCustomStruct(e)?t:t+".value":e.groupNode.name+"."+t}return super.getPropertyName(e)}getOutputStructName(){return"output"}getFunctionOperator(e){const t=hC[e];return void 0!==t?(this._include(t),t):null}getNodeAccess(e,t){return"compute"!==t?!0===e.isAtomic?(d("WebGPURenderer: Atomic operations are only supported in compute shaders."),si.READ_WRITE):si.READ_ONLY:e.access}getStorageAccess(e,t){return uC[this.getNodeAccess(e,t)]}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);if(void 0===n.uniformGPU){let a;const o=e.groupNode,u=o.name,l=this.getBindGroupArray(u,r);if("texture"===t||"cubeTexture"===t||"cubeDepthTexture"===t||"storageTexture"===t||"texture3D"===t){let s=null;const n=this.getNodeAccess(e,r);"texture"===t||"storageTexture"===t?s=!0===e.value.is3DTexture?new oR(i.name,i.node,o,n):new nR(i.name,i.node,o,n):"cubeTexture"===t||"cubeDepthTexture"===t?s=new aR(i.name,i.node,o,n):"texture3D"===t&&(s=new oR(i.name,i.node,o,n)),s.store=!0===e.isStorageTextureNode,s.mipLevel=s.store?e.mipLevel:0,s.setVisibility(dC[r]);if(!0===e.value.isCubeTexture||!1===this.isUnfilterable(e.value)&&!1===s.store){const e=new Xw(`${i.name}_sampler`,i.node,o);e.setVisibility(dC[r]),l.push(e,s),a=[e,s]}else l.push(s),a=[s]}else if("buffer"===t||"storageBuffer"===t||"indirectStorageBuffer"===t){const n=this.getSharedDataFromNode(e);let u=n.buffer;if(void 0===u){u=new("buffer"===t?ZS:Yw)(e,o),n.buffer=u}u.setVisibility(u.getVisibility()|dC[r]),l.push(u),a=u,i.name=s||"NodeBuffer_"+i.id}else{let e=this.uniformGroups[u];void 0===e&&(e=new tR(u,o),e.setVisibility(zR.VERTEX|zR.FRAGMENT|zR.COMPUTE),this.uniformGroups[u]=e),-1===l.indexOf(e)&&l.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}getBuiltin(e,t,r,s=this.shaderStage){const i=this.builtins[s]||(this.builtins[s]=new Map);return!1===i.has(e)&&i.set(e,{name:e,property:t,type:r}),t}hasBuiltin(e,t=this.shaderStage){return void 0!==this.builtins[t]&&this.builtins[t].has(e)}getVertexIndex(){return"vertex"===this.shaderStage?this.getBuiltin("vertex_index","vertexIndex","u32","attribute"):"vertexIndex"}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(e.name+" : "+this.getType(e.type));let i=`fn ${t.name}( ${s.join(", ")} ) -> ${this.getType(t.type)} {\n${r.vars}\n${r.code}\n`;return r.result&&(i+=`\treturn ${r.result};\n`),i+="\n}\n",i}getInstanceIndex(){return"vertex"===this.shaderStage?this.getBuiltin("instance_index","instanceIndex","u32","attribute"):"instanceIndex"}getInvocationLocalIndex(){return this.getBuiltin("local_invocation_index","invocationLocalIndex","u32","attribute")}getSubgroupSize(){return this.enableSubGroups(),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute")}getInvocationSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_invocation_id","invocationSubgroupIndex","u32","attribute")}getSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_id","subgroupIndex","u32","attribute")}getDrawIndex(){return null}getFrontFacing(){return this.getBuiltin("front_facing","isFront","bool")}getFragCoord(){return this.getBuiltin("position","fragCoord","vec4")+".xy"}getFragDepth(){return"output."+this.getBuiltin("frag_depth","depth","f32","output")}getClipDistance(){return"varyings.hw_clip_distances"}isFlipY(){return!1}enableDirective(e,t=this.shaderStage){(this.directives[t]||(this.directives[t]=new Set)).add(e)}getDirectives(e){const t=[],r=this.directives[e];if(void 0!==r)for(const e of r)t.push(`enable ${e};`);return t.join("\n")}enableSubGroups(){this.enableDirective("subgroups")}enableSubgroupsF16(){this.enableDirective("subgroups-f16")}enableClipDistances(){this.enableDirective("clip_distances")}enableShaderF16(){this.enableDirective("f16")}enableDualSourceBlending(){this.enableDirective("dual_source_blending")}enableHardwareClipping(e){this.enableClipDistances(),this.getBuiltin("clip_distances","hw_clip_distances",`array`,"vertex")}getBuiltins(e){const t=[],r=this.builtins[e];if(void 0!==r)for(const{name:e,property:s,type:i}of r.values())t.push(`@builtin( ${e} ) ${s} : ${i}`);return t.join(",\n\t")}getScopedArray(e,t,r,s){return!1===this.scopedArrays.has(e)&&this.scopedArrays.set(e,{name:e,scope:t,bufferType:r,bufferCount:s}),e}getScopedArrays(e){if("compute"!==e)return;const t=[];for(const{name:e,scope:r,bufferType:s,bufferCount:i}of this.scopedArrays.values()){const n=this.getType(s);t.push(`var<${r}> ${e}: array< ${n}, ${i} >;`)}return t.join("\n")}getAttributes(e){const t=[];if("compute"===e&&(this.getBuiltin("global_invocation_id","globalId","vec3","attribute"),this.getBuiltin("workgroup_id","workgroupId","vec3","attribute"),this.getBuiltin("local_invocation_id","localId","vec3","attribute"),this.getBuiltin("num_workgroups","numWorkgroups","vec3","attribute"),this.renderer.hasFeature("subgroups")&&(this.enableDirective("subgroups",e),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute"))),"vertex"===e||"compute"===e){const e=this.getBuiltins("attribute");e&&t.push(e);const r=this.getAttributesArray();for(let e=0,s=r.length;e"),t.push(`\t${s+r.name} : ${i}`)}return e.output&&t.push(`\t${this.getBuiltins("output")}`),t.join(",\n")}getStructs(e){let t="";const r=this.structs[e];if(r.length>0){const e=[];for(const t of r){let r=`struct ${t.name} {\n`;r+=this.getStructMembers(t),r+="\n};",e.push(r)}t="\n"+e.join("\n\n")+"\n"}return t}getVar(e,t,r=null){let s=`var ${t} : `;return s+=null!==r?this.generateArrayDeclaration(e,r):this.getType(e),s}getVars(e){const t=[],r=this.vars[e];if(void 0!==r)for(const e of r)t.push(`\t${this.getVar(e.type,e.name,e.count)};`);return`\n${t.join("\n")}\n`}getVaryings(e){const t=[];if("vertex"===e&&this.getBuiltin("position","builtinClipSpace","vec4","vertex"),"vertex"===e||"fragment"===e){const r=this.varyings,s=this.vars[e];for(let i=0;ir.value.itemSize;return s&&!i}getUniforms(e){const t=this.uniforms[e],r=[],s=[],i=[],n={};for(const i of t){const t=i.groupNode.name,a=this.bindingsIndexes[t];if("texture"===i.type||"cubeTexture"===i.type||"cubeDepthTexture"===i.type||"storageTexture"===i.type||"texture3D"===i.type){const t=i.node.value;let s;(!0===t.isCubeTexture||!1===this.isUnfilterable(t)&&!0!==i.node.isStorageTextureNode)&&(this.isSampleCompare(t)?r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler_comparison;`):r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler;`));let n="";const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(t);if(o>1&&(n="_multisampled"),!0===t.isCubeTexture&&!0===t.isDepthTexture)s="texture_depth_cube";else if(!0===t.isCubeTexture)s="texture_cube";else if(!0===t.isDepthTexture)s=this.renderer.backend.compatibilityMode&&null===t.compareFunction?`texture${n}_2d`:`texture_depth${n}_2d${!0===t.isArrayTexture?"_array":""}`;else if(!0===i.node.isStorageTextureNode){const r=rC(t),n=this.getStorageAccess(i.node,e),a=i.node.value.is3DTexture,o=i.node.value.isArrayTexture;s=`texture_storage_${a?"3d":"2d"+(o?"_array":"")}<${r}, ${n}>`}else if(!0===t.isArrayTexture||!0===t.isDataArrayTexture||!0===t.isCompressedArrayTexture)s="texture_2d_array";else if(!0===t.is3DTexture||!0===t.isData3DTexture)s="texture_3d";else{s=`texture${n}_2d<${this.getComponentTypeFromTexture(t).charAt(0)}32>`}r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name} : ${s};`)}else if("buffer"===i.type||"storageBuffer"===i.type||"indirectStorageBuffer"===i.type){const t=i.node,r=this.getType(t.getNodeType(this)),n=t.bufferCount,o=n>0&&"buffer"===i.type?", "+n:"",u=t.isStorageBufferNode?`storage, ${this.getStorageAccess(t,e)}`:"uniform";if(this.isCustomStruct(i))s.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var<${u}> ${i.name} : ${r};`);else{const e=`\tvalue : array< ${t.isAtomic?`atomic<${r}>`:`${r}`}${o} >`;s.push(this._getWGSLStructBinding(i.name,e,u,a.binding++,a.group))}}else{const e=i.groupNode.name;if(void 0===n[e]){const t=this.uniformGroups[e];if(void 0!==t){const r=[];for(const e of t.uniforms){const t=e.getType(),s=this.getType(this.getVectorType(t));r.push(`\t${e.name} : ${s}`)}let s=this.uniformGroupsBindings[e];void 0===s&&(s={index:a.binding++,id:a.group},this.uniformGroupsBindings[e]=s),n[e]={index:s.index,id:s.id,snippets:r}}}}}for(const e in n){const t=n[e];i.push(this._getWGSLStructBinding(e,t.snippets.join(",\n"),"uniform",t.index,t.id))}return[...r,...s,...i].join("\n")}buildCode(){const e=null!==this.material?{fragment:{},vertex:{}}:{compute:{}};this.sortBindingGroups();for(const t in e){this.shaderStage=t;const r=e[t];r.uniforms=this.getUniforms(t),r.attributes=this.getAttributes(t),r.varyings=this.getVaryings(t),r.structs=this.getStructs(t),r.vars=this.getVars(t),r.codes=this.getCodes(t),r.directives=this.getDirectives(t),r.scopedArrays=this.getScopedArrays(t);let s="// code\n\n";s+=this.flowCode[t];const i=this.flowNodes[t],n=i[i.length-1],a=n.outputNode,o=void 0!==a&&!0===a.isOutputStructNode;for(const e of i){const i=this.getFlowData(e),u=e.name;if(u&&(s.length>0&&(s+="\n"),s+=`\t// flow -> ${u}\n`),s+=`${i.code}\n\t`,e===n&&"compute"!==t)if(s+="// result\n\n\t","vertex"===t)s+=`varyings.builtinClipSpace = ${i.result};`;else if("fragment"===t)if(o)r.returnType=a.getNodeType(this),r.structs+="var output : "+r.returnType+";",s+=`return ${i.result};`;else{let e="\t@location(0) color: vec4";const t=this.getBuiltins("output");t&&(e+=",\n\t"+t),r.returnType="OutputStruct",r.structs+=this._getWGSLStruct("OutputStruct",e),r.structs+="\nvar output : OutputStruct;",s+=`output.color = ${i.result};\n\n\treturn output;`}}r.flow=s}if(this.shaderStage=null,null!==this.material)this.vertexShader=this._getWGSLVertexCode(e.vertex),this.fragmentShader=this._getWGSLFragmentCode(e.fragment);else{const t=this.object.workgroupSize;this.computeShader=this._getWGSLComputeCode(e.compute,t)}}getMethod(e,t=null){let r;return null!==t&&(r=this._getWGSLMethod(e+"_"+t)),void 0===r&&(r=this._getWGSLMethod(e)),r||e}getBitcastMethod(e){return`bitcast<${this.getType(e)}>`}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`select( ${r}, ${t}, ${e} )`}getType(e){return pC[e]||e}isAvailable(e){let t=cC[e];return void 0===t&&("float32Filterable"===e?t=this.renderer.hasFeature("float32-filterable"):"clipDistance"===e&&(t=this.renderer.hasFeature("clip-distances")),cC[e]=t),t}getUniformBufferLimit(){return this.renderer.backend.device.limits.maxUniformBufferBindingSize}_getWGSLMethod(e){return void 0!==mC[e]&&this._include(e),fC[e]}_include(e){const t=mC[e];return t.build(this),this.addInclude(t),t}_getWGSLVertexCode(e){return`${this.getSignature()}\n// directives\n${e.directives}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// varyings\n${e.varyings}\nvar varyings : VaryingsStruct;\n\n// codes\n${e.codes}\n\n@vertex\nfn main( ${e.attributes} ) -> VaryingsStruct {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n\treturn varyings;\n\n}\n`}_getWGSLFragmentCode(e){return`${this.getSignature()}\n// global\n${yC}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@fragment\nfn main( ${e.varyings} ) -> ${e.returnType} {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLComputeCode(e,t){const[r,s,i]=t;return`${this.getSignature()}\n// directives\n${e.directives}\n\n// system\nvar instanceIndex : u32;\n\n// locals\n${e.scopedArrays}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@compute @workgroup_size( ${r}, ${s}, ${i} )\nfn main( ${e.attributes} ) {\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${r} * numWorkgroups.x )\n\t\t+ globalId.z * ( ${r} * numWorkgroups.x ) * ( ${s} * numWorkgroups.y );\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLStruct(e,t){return`\nstruct ${e} {\n${t}\n};`}_getWGSLStructBinding(e,t,r,s=0,i=0){const n=e+"Struct";return`${this._getWGSLStruct(n,t)}\n@binding( ${s} ) @group( ${i} )\nvar<${r}> ${e} : ${n};`}}class xC{constructor(e){this.backend=e}getCurrentDepthStencilFormat(e){let t;return e.depth&&(t=null!==e.depthTexture?this.getTextureFormatGPU(e.depthTexture):e.stencil?HE:WE),t}getTextureFormatGPU(e){return this.backend.get(e).format}getTextureSampleData(e){let t;if(e.isFramebufferTexture)t=1;else if(e.isDepthTexture&&!e.renderTarget){const e=this.backend.renderer,r=e.getRenderTarget();t=r?r.samples:e.currentSamples}else e.renderTarget&&(t=e.renderTarget.samples);t=t||1;const r=t>1&&null!==e.renderTarget&&!0!==e.isDepthTexture&&!0!==e.isFramebufferTexture;return{samples:t,primarySamples:r?1:t,isMSAA:r}}getCurrentColorFormat(e){let t;return t=null!==e.textures?this.getTextureFormatGPU(e.textures[0]):this.getPreferredCanvasFormat(),t}getCurrentColorFormats(e){return null!==e.textures?e.textures.map(e=>this.getTextureFormatGPU(e)):[this.getPreferredCanvasFormat()]}getCurrentColorSpace(e){return null!==e.textures?e.textures[0].colorSpace:this.backend.renderer.outputColorSpace}getPrimitiveTopology(e,t){return e.isPoints?VR:e.isLineSegments||e.isMesh&&!0===t.wireframe?kR:e.isLine?GR:e.isMesh?$R:void 0}getSampleCount(e){return e>=4?4:1}getSampleCountRenderContext(e){return null!==e.textures?this.getSampleCount(e.sampleCount):this.getSampleCount(this.backend.renderer.currentSamples)}getPreferredCanvasFormat(){const e=this.backend.parameters.outputType;if(void 0===e)return navigator.gpu.getPreferredCanvasFormat();if(e===$e)return CE;if(e===_e)return VE;throw new Error("Unsupported output buffer type.")}}const TC=new Map([[Int8Array,["sint8","snorm8"]],[Uint8Array,["uint8","unorm8"]],[Int16Array,["sint16","snorm16"]],[Uint16Array,["uint16","unorm16"]],[Int32Array,["sint32","snorm32"]],[Uint32Array,["uint32","unorm32"]],[Float32Array,["float32"]]]);"undefined"!=typeof Float16Array&&TC.set(Float16Array,["float16"]);const _C=new Map([[ot,["float16"]]]),vC=new Map([[Int32Array,"sint32"],[Int16Array,"sint32"],[Uint32Array,"uint32"],[Uint16Array,"uint32"],[Float32Array,"float32"]]);class NC{constructor(e){this.backend=e}createAttribute(e,t){const r=this._getBufferAttribute(e),s=this.backend,i=s.get(r);let n=i.buffer;if(void 0===n){const a=s.device;let o=r.array;if(!1===e.normalized)if(o.constructor===Int16Array||o.constructor===Int8Array)o=new Int32Array(o);else if((o.constructor===Uint16Array||o.constructor===Uint8Array)&&(o=new Uint32Array(o),t&GPUBufferUsage.INDEX))for(let e=0;e0&&(void 0===n.groups&&(n.groups=[],n.versions=[]),n.versions[r]===s&&(o=n.groups[r])),void 0===o&&(o=this.createBindGroup(e,a),r>0&&(n.groups[r]=o,n.versions[r]=s)),n.group=o}updateBinding(e){const t=this.backend,r=t.device,s=e.buffer,i=t.get(e).buffer,n=e.updateRanges;if(0===n.length)r.queue.writeBuffer(i,0,s,0);else{const e=Kr(s),t=e?1:s.BYTES_PER_ELEMENT;for(let a=0,o=n.length;a1&&(i+=`-${e.texture.depthOrArrayLayers}`),i+=`-${r}-${s}`,a=e[i],void 0===a){const n=zw;let o;o=t.isSampledCubeTexture?Gw:t.isSampledTexture3D?$w:t.texture.isArrayTexture||t.texture.isDataArrayTexture||t.texture.isCompressedArrayTexture?kw:Vw,a=e[i]=e.texture.createView({aspect:n,dimension:o,mipLevelCount:r,baseMipLevel:s})}}n.push({binding:i,resource:a})}else if(t.isSampler){const e=r.get(t.texture);n.push({binding:i,resource:e.sampler})}i++}return s.createBindGroup({label:"bindGroup_"+e.name,layout:t,entries:n})}_createLayoutEntries(e){const t=[];let r=0;for(const s of e.bindings){const e=this.backend,i={binding:r,visibility:s.visibility};if(s.isUniformBuffer||s.isStorageBuffer){const e={};s.isStorageBuffer&&(s.visibility&zR.COMPUTE&&(s.access===si.READ_WRITE||s.access===si.WRITE_ONLY)?e.type=Rw:e.type=Ew),i.buffer=e}else if(s.isSampledTexture&&s.store){const e={};e.format=this.backend.get(s.texture).texture.format;const t=s.access;e.access=t===si.READ_WRITE?Cw:t===si.WRITE_ONLY?Aw:ww,s.texture.isArrayTexture?e.viewDimension=kw:s.texture.is3DTexture&&(e.viewDimension=$w),i.storageTexture=e}else if(s.isSampledTexture){const t={},{primarySamples:r}=e.utils.getTextureSampleData(s.texture);if(r>1&&(t.multisampled=!0,s.texture.isDepthTexture||(t.sampleType=Lw)),s.texture.isDepthTexture)e.compatibilityMode&&null===s.texture.compareFunction?t.sampleType=Lw:t.sampleType=Pw;else if(s.texture.isDataTexture||s.texture.isDataArrayTexture||s.texture.isData3DTexture){const e=s.texture.type;e===R?t.sampleType=Dw:e===S?t.sampleType=Uw:e===Q&&(this.backend.hasFeature("float32-filterable")?t.sampleType=Fw:t.sampleType=Lw)}s.isSampledCubeTexture?t.viewDimension=Gw:s.texture.isArrayTexture||s.texture.isDataArrayTexture||s.texture.isCompressedArrayTexture?t.viewDimension=kw:s.isSampledTexture3D&&(t.viewDimension=$w),i.texture=t}else if(s.isSampler){const t={};s.texture.isDepthTexture&&(null!==s.texture.compareFunction&&e.hasCompatibility(E.TEXTURE_COMPARE)?t.type=Bw:t.type=Mw),i.sampler=t}else o(`WebGPUBindingUtils: Unsupported binding "${s}".`);t.push(i),r++}return t}deleteBindGroupData(e){const{backend:t}=this,r=t.get(e);r.layout&&(r.layout.usedTimes--,0===r.layout.usedTimes&&this._bindGroupLayoutCache.delete(r.layoutKey),r.layout=void 0,r.layoutKey=void 0)}dispose(){this._bindGroupLayoutCache.clear()}}class EC{constructor(e){this.backend=e,this._activePipelines=new WeakMap}setPipeline(e,t){this._activePipelines.get(e)!==t&&(e.setPipeline(t),this._activePipelines.set(e,t))}_getSampleCount(e){return this.backend.utils.getSampleCountRenderContext(e)}createRenderPipeline(e,t){const{object:r,material:s,geometry:i,pipeline:n}=e,{vertexProgram:a,fragmentProgram:u}=n,l=this.backend,d=l.device,c=l.utils,h=l.get(n),p=[];for(const t of e.getBindings()){const e=l.get(t),{layoutGPU:r}=e.layout;p.push(r)}const g=l.attributeUtils.createShaderVertexBuffers(e);let m;s.blending===se||s.blending===ze&&!1===s.transparent||(m=this._getBlending(s));let f={};!0===s.stencilWrite&&(f={compare:this._getStencilCompare(s),failOp:this._getStencilOperation(s.stencilFail),depthFailOp:this._getStencilOperation(s.stencilZFail),passOp:this._getStencilOperation(s.stencilZPass)});const y=this._getColorWriteMask(s),b=[];if(null!==e.context.textures){const t=e.context.textures,r=e.context.mrt;for(let e=0;e1},layout:d.createPipelineLayout({bindGroupLayouts:p})},A={},w=e.context.depth,C=e.context.stencil;if(!0!==w&&!0!==C||(!0===w&&(A.format=S,A.depthWriteEnabled=s.depthWrite,A.depthCompare=N),!0===C&&(A.stencilFront=f,A.stencilBack=f,A.stencilReadMask=s.stencilFuncMask,A.stencilWriteMask=s.stencilWriteMask),!0===s.polygonOffset&&(A.depthBias=s.polygonOffsetUnits,A.depthBiasSlopeScale=s.polygonOffsetFactor,A.depthBiasClamp=0),E.depthStencil=A),d.pushErrorScope("validation"),null===t)h.pipeline=d.createRenderPipeline(E),d.popErrorScope().then(e=>{null!==e&&(h.error=!0,o(e.message))});else{const e=new Promise(async e=>{try{h.pipeline=await d.createRenderPipelineAsync(E)}catch(e){}const t=await d.popErrorScope();null!==t&&(h.error=!0,o(t.message)),e()});t.push(e)}}createBundleEncoder(e,t="renderBundleEncoder"){const r=this.backend,{utils:s,device:i}=r,n=s.getCurrentDepthStencilFormat(e),a={label:t,colorFormats:s.getCurrentColorFormats(e),depthStencilFormat:n,sampleCount:this._getSampleCount(e)};return i.createRenderBundleEncoder(a)}createComputePipeline(e,t){const r=this.backend,s=r.device,i=r.get(e.computeProgram).module,n=r.get(e),a=[];for(const e of t){const t=r.get(e),{layoutGPU:s}=t.layout;a.push(s)}n.pipeline=s.createComputePipeline({compute:i,layout:s.createPipelineLayout({bindGroupLayouts:a})})}_getBlending(e){let t,r;const s=e.blending,i=e.blendSrc,n=e.blendDst,a=e.blendEquation;if(s===pt){const s=null!==e.blendSrcAlpha?e.blendSrcAlpha:i,o=null!==e.blendDstAlpha?e.blendDstAlpha:n,u=null!==e.blendEquationAlpha?e.blendEquationAlpha:a;t={srcFactor:this._getBlendFactor(i),dstFactor:this._getBlendFactor(n),operation:this._getBlendOperation(a)},r={srcFactor:this._getBlendFactor(s),dstFactor:this._getBlendFactor(o),operation:this._getBlendOperation(u)}}else{const i=(e,s,i,n)=>{t={srcFactor:e,dstFactor:s,operation:dw},r={srcFactor:i,dstFactor:n,operation:dw}};if(e.premultipliedAlpha)switch(s){case ze:i(ZA,rw,ZA,rw);break;case jt:i(ZA,ZA,ZA,ZA);break;case qt:i(YA,ew,YA,ZA);break;case Ht:i(sw,rw,YA,ZA)}else switch(s){case ze:i(tw,rw,ZA,rw);break;case jt:i(tw,ZA,ZA,ZA);break;case qt:o(`WebGPURenderer: "SubtractiveBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`);break;case Ht:o(`WebGPURenderer: "MultiplyBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`)}}if(void 0!==t&&void 0!==r)return{color:t,alpha:r};o("WebGPURenderer: Invalid blending: ",s)}_getBlendFactor(e){let t;switch(e){case gt:t=YA;break;case Gt:t=ZA;break;case kt:t=JA;break;case Ut:t=ew;break;case We:t=tw;break;case He:t=rw;break;case Ot:t=sw;break;case Dt:t=iw;break;case It:t=nw;break;case Pt:t=aw;break;case Vt:t=ow;break;case 211:t=uw;break;case 212:t=lw;break;default:o("WebGPURenderer: Blend factor not supported.",e)}return t}_getStencilCompare(e){let t;const r=e.stencilFunc;switch(r){case ss:t=WR;break;case rs:t=YR;break;case ts:t=HR;break;case es:t=jR;break;case Jr:t=qR;break;case Zr:t=QR;break;case Yr:t=XR;break;case Qr:t=KR;break;default:o("WebGPURenderer: Invalid stencil function.",r)}return t}_getStencilOperation(e){let t;switch(e){case cs:t=yw;break;case ds:t=bw;break;case ls:t=xw;break;case us:t=Tw;break;case os:t=_w;break;case as:t=vw;break;case ns:t=Nw;break;case is:t=Sw;break;default:o("WebGPURenderer: Invalid stencil operation.",t)}return t}_getBlendOperation(e){let t;switch(e){case qe:t=dw;break;case Lt:t=cw;break;case Ft:t=hw;break;case ps:t=pw;break;case hs:t=gw;break;default:o("WebGPUPipelineUtils: Blend equation not supported.",e)}return t}_getPrimitiveState(e,t,r){const s={},i=this.backend.utils;s.topology=i.getPrimitiveTopology(e,r),null!==t.index&&!0===e.isLine&&!0!==e.isLineSegments&&(s.stripIndexFormat=t.index.array instanceof Uint16Array?nE:aE);let n=r.side===L;return e.isMesh&&e.matrixWorld.determinant()<0&&(n=!n),s.frontFace=!0===n?rE:tE,s.cullMode=r.side===P?sE:iE,s}_getColorWriteMask(e){return!0===e.colorWrite?fw:mw}_getDepthCompare(e){let t;if(!1===e.depthTest)t=YR;else{const r=this.backend.parameters.reversedDepthBuffer?rr[e.depthFunc]:e.depthFunc;switch(r){case tr:t=WR;break;case er:t=YR;break;case Jt:t=HR;break;case Zt:t=jR;break;case Yt:t=qR;break;case Qt:t=QR;break;case Kt:t=XR;break;case Xt:t=KR;break;default:o("WebGPUPipelineUtils: Invalid depth function.",r)}}return t}}class AC extends UR{constructor(e,t,r=2048){super(r),this.device=e,this.type=t,this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxQueries,label:`queryset_global_timestamp_${t}`});const s=8*this.maxQueries;this.resolveBuffer=this.device.createBuffer({label:`buffer_timestamp_resolve_${t}`,size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.resultBuffer=this.device.createBuffer({label:`buffer_timestamp_result_${t}`,size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})}allocateQueriesForContext(e){if(!this.trackTimestamp||this.isDisposed)return null;if(this.currentQueryIndex+2>this.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryOffsets.set(e,t),t}async resolveQueriesAsync(){if(!this.trackTimestamp||0===this.currentQueryIndex||this.isDisposed)return this.lastValue;if(this.pendingResolve)return this.pendingResolve;this.pendingResolve=this._resolveQueries();try{return await this.pendingResolve}finally{this.pendingResolve=null}}async _resolveQueries(){if(this.isDisposed)return this.lastValue;try{if("unmapped"!==this.resultBuffer.mapState)return this.lastValue;const e=new Map(this.queryOffsets),t=this.currentQueryIndex,r=8*t;this.currentQueryIndex=0,this.queryOffsets.clear();const s=this.device.createCommandEncoder();s.resolveQuerySet(this.querySet,0,t,this.resolveBuffer,0),s.copyBufferToBuffer(this.resolveBuffer,0,this.resultBuffer,0,r);const i=s.finish();if(this.device.queue.submit([i]),"unmapped"!==this.resultBuffer.mapState)return this.lastValue;if(await this.resultBuffer.mapAsync(GPUMapMode.READ,0,r),this.isDisposed)return"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue;const n=new BigUint64Array(this.resultBuffer.getMappedRange(0,r)),a={},o=[];for(const[t,r]of e){const e=t.match(/^(.*):f(\d+)$/),s=parseInt(e[2]);!1===o.includes(s)&&o.push(s),void 0===a[s]&&(a[s]=0);const i=n[r],u=n[r+1],l=Number(u-i)/1e6;this.timestamps.set(t,l),a[s]+=l}const u=a[o[o.length-1]];return this.resultBuffer.unmap(),this.lastValue=u,this.frames=o,u}catch(e){return o("Error resolving queries:",e),"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue}}async dispose(){if(!this.isDisposed){if(this.isDisposed=!0,this.pendingResolve)try{await this.pendingResolve}catch(e){o("Error waiting for pending resolve:",e)}if(this.resultBuffer&&"mapped"===this.resultBuffer.mapState)try{this.resultBuffer.unmap()}catch(e){o("Error unmapping buffer:",e)}this.querySet&&(this.querySet.destroy(),this.querySet=null),this.resolveBuffer&&(this.resolveBuffer.destroy(),this.resolveBuffer=null),this.resultBuffer&&(this.resultBuffer.destroy(),this.resultBuffer=null),this.queryOffsets.clear(),this.pendingResolve=null}}}class wC extends bR{constructor(e={}){super(e),this.isWebGPUBackend=!0,this.parameters.alpha=void 0===e.alpha||e.alpha,this.parameters.requiredLimits=void 0===e.requiredLimits?{}:e.requiredLimits,this.compatibilityMode=null,this.device=null,this.defaultRenderPassdescriptor=null,this.utils=new xC(this),this.attributeUtils=new NC(this),this.bindingUtils=new RC(this),this.pipelineUtils=new EC(this),this.textureUtils=new tC(this),this.occludedResolveCache=new Map;const t="undefined"==typeof navigator||!1===/Android/.test(navigator.userAgent);this._compatibility={[E.TEXTURE_COMPARE]:t}}async init(e){await super.init(e);const t=this.parameters;let r;if(void 0===t.device){const e={powerPreference:t.powerPreference,featureLevel:"compatibility"},s="undefined"!=typeof navigator?await navigator.gpu.requestAdapter(e):null;if(null===s)throw new Error("WebGPUBackend: Unable to create WebGPU adapter.");const i=Object.values(qw),n=[];for(const e of i)s.features.has(e)&&n.push(e);const a={requiredFeatures:n,requiredLimits:t.requiredLimits};r=await s.requestDevice(a)}else r=t.device;this.compatibilityMode=!r.features.has("core-features-and-limits"),this.compatibilityMode&&(e._samples=0),r.lost.then(t=>{if("destroyed"===t.reason)return;const r={api:"WebGPU",message:t.message||"Unknown reason",reason:t.reason||null,originalEvent:t};e.onDeviceLost(r)}),this.device=r,this.trackTimestamp=this.trackTimestamp&&this.hasFeature(qw.TimestampQuery),this.updateSize()}get context(){const e=this.renderer.getCanvasTarget(),t=this.get(e);let r=t.context;if(void 0===r){const s=this.parameters;r=!0===e.isDefaultCanvasTarget&&void 0!==s.context?s.context:e.domElement.getContext("webgpu"),"setAttribute"in e.domElement&&e.domElement.setAttribute("data-engine",`three.js r${lt} webgpu`);const i=s.alpha?"premultiplied":"opaque",n=s.outputType===_e?"extended":"standard";r.configure({device:this.device,format:this.utils.getPreferredCanvasFormat(),usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,alphaMode:i,toneMapping:{mode:n}}),t.context=r}return r}get coordinateSystem(){return h}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}getContext(){return this.context}_getDefaultRenderPassDescriptor(){const e=this.renderer,t=e.getCanvasTarget(),r=this.get(t),s=e.currentSamples;let i=r.descriptor;if(void 0===i||r.samples!==s){i={colorAttachments:[{view:null}]},!0!==e.depth&&!0!==e.stencil||(i.depthStencilAttachment={view:this.textureUtils.getDepthBuffer(e.depth,e.stencil).createView()});const t=i.colorAttachments[0];s>0?t.view=this.textureUtils.getColorBuffer().createView():t.resolveTarget=void 0,r.descriptor=i,r.samples=s}const n=i.colorAttachments[0];return s>0?n.resolveTarget=this.context.getCurrentTexture().createView():n.view=this.context.getCurrentTexture().createView(),i}_isRenderCameraDepthArray(e){return e.depthTexture&&e.depthTexture.image.depth>1&&e.camera.isArrayCamera}_getRenderPassDescriptor(e,t={}){const r=e.renderTarget,s=this.get(r);let i=s.descriptors;void 0!==i&&s.width===r.width&&s.height===r.height&&s.samples===r.samples||(i={},s.descriptors=i);const n=e.getCacheKey();let a=i[n];if(void 0===a){const t=e.textures,o=[];let u;const l=this._isRenderCameraDepthArray(e);for(let s=0;s1)if(!0===l){const t=e.camera.cameras;for(let e=0;e0&&(t.currentOcclusionQuerySet&&t.currentOcclusionQuerySet.destroy(),t.currentOcclusionQueryBuffer&&t.currentOcclusionQueryBuffer.destroy(),t.currentOcclusionQuerySet=t.occlusionQuerySet,t.currentOcclusionQueryBuffer=t.occlusionQueryBuffer,t.currentOcclusionQueryObjects=t.occlusionQueryObjects,i=r.createQuerySet({type:"occlusion",count:s,label:`occlusionQuerySet_${e.id}`}),t.occlusionQuerySet=i,t.occlusionQueryIndex=0,t.occlusionQueryObjects=new Array(s),t.lastOcclusionObject=null),n=null===e.textures?this._getDefaultRenderPassDescriptor():this._getRenderPassDescriptor(e,{loadOp:JR}),this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e),n),n.occlusionQuerySet=i;const a=n.depthStencilAttachment;if(null!==e.textures){const t=n.colorAttachments;for(let r=0;r0&&t.currentPass.executeBundles(t.renderBundles),r>t.occlusionQueryIndex&&t.currentPass.endOcclusionQuery();const s=t.encoder;if(!0===this._isRenderCameraDepthArray(e)){const r=[];for(let e=0;e0){const s=8*r;let i=this.occludedResolveCache.get(s);void 0===i&&(i=this.device.createBuffer({size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.occludedResolveCache.set(s,i));const n=this.device.createBuffer({size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});t.encoder.resolveQuerySet(t.occlusionQuerySet,0,r,i,0),t.encoder.copyBufferToBuffer(i,0,n,0,s),t.occlusionQueryBuffer=n,this.resolveOccludedAsync(e)}if(this.device.queue.submit([t.encoder.finish()]),null!==e.textures){const t=e.textures;for(let e=0;eo&&(i[0]=Math.min(a,o),i[1]=Math.ceil(a/o)),n.dispatchSize=i}i=n.dispatchSize}a.dispatchWorkgroups(i[0],i[1]||1,i[2]||1)}finishCompute(e){const t=this.get(e);t.passEncoderGPU.end(),this.device.queue.submit([t.cmdEncoderGPU.finish()])}draw(e,t){const{object:r,material:s,context:i,pipeline:n}=e,a=e.getBindings(),o=this.get(i),u=this.get(n),l=u.pipeline;if(!0===u.error)return;const d=e.getIndex(),c=null!==d,h=e.getDrawParameters();if(null===h)return;const p=(t,r)=>{this.pipelineUtils.setPipeline(t,l),r.pipeline=l;const n=r.bindingGroups;for(let e=0,r=a.length;e{if(p(i,n),!0===r.isBatchedMesh){const e=r._multiDrawStarts,n=r._multiDrawCounts,a=r._multiDrawCount,o=r._multiDrawInstances;null!==o&&v("WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.");let u=!0===c?d.array.BYTES_PER_ELEMENT:1;s.wireframe&&(u=r.geometry.attributes.position.count>65535?4:2);for(let s=0;s1?0:s;!0===c?i.drawIndexed(n[s],a,e[s]/u,0,l):i.draw(n[s],a,e[s],l),t.update(r,n[s],a)}}else if(!0===c){const{vertexCount:s,instanceCount:n,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const t=this.get(o).buffer,r=e.getIndirectOffset(),s=Array.isArray(r)?r:[r];for(let e=0;e0){const t=this.get(e.camera),s=e.camera.cameras,n=e.getBindingGroup("cameraIndex");if(void 0===t.indexesGPU||t.indexesGPU.length!==s.length){const e=this.get(n),r=[],i=new Uint32Array([0,0,0,0]);for(let t=0,n=s.length;t(d("WebGPURenderer: WebGPU is not available, running under WebGL2 backend."),new OR(e)));super(new t(e),e),this.library=new BC,this.isWebGPURenderer=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}}class LC extends As{constructor(){super(),this.isBundleGroup=!0,this.type="BundleGroup",this.static=!0,this.version=0}set needsUpdate(e){!0===e&&this.version++}}class PC{constructor(e,t=wn(0,0,1,1)){this.renderer=e,this.outputNode=t,this.outputColorTransform=!0,this.needsUpdate=!0;const r=new yg;r.name="RenderPipeline",this._quadMesh=new dx(r),this._quadMesh.name="Render Pipeline",this._context=null}render(){const e=this.renderer;this._update(),null!==this._context.onBeforeRenderPipeline&&this._context.onBeforeRenderPipeline();const t=e.toneMapping,r=e.outputColorSpace;e.toneMapping=m,e.outputColorSpace=p.workingColorSpace;const s=e.xr.enabled;e.xr.enabled=!1,this._quadMesh.render(e),e.xr.enabled=s,e.toneMapping=t,e.outputColorSpace=r,null!==this._context.onAfterRenderPipeline&&this._context.onAfterRenderPipeline()}get context(){return this._context}dispose(){this._quadMesh.material.dispose()}_update(){if(!0===this.needsUpdate){const e=this.renderer,t=e.toneMapping,r=e.outputColorSpace,s={renderPipeline:this,onBeforeRenderPipeline:null,onAfterRenderPipeline:null};let i=this.outputNode;!0===this.outputColorTransform?(i=i.context(s),i=xl(i,t,r)):(s.toneMapping=t,s.outputColorSpace=r,i=i.context(s)),this._context=s,this._quadMesh.material.fragmentNode=i,this._quadMesh.material.needsUpdate=!0,this.needsUpdate=!1}}async renderAsync(){v('RenderPipeline: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.renderer.init(),this.render()}}class DC extends PC{constructor(e,t){v('PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.'),super(e,t)}}class UC extends N{constructor(e=1,t=1){super(),this.image={width:e,height:t},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0,this.mipmapsAutoUpdate=!0}setSize(e,t){this.image.width===e&&this.image.height===t||(this.image.width=e,this.image.height=t,this.dispose())}}class IC extends N{constructor(e=1,t=1,r=1){super(),this.isArrayTexture=!1,this.image={width:e,height:t,depth:r},this.magFilter=de,this.minFilter=de,this.wrapR=ve,this.isStorageTexture=!0,this.is3DTexture=!0}setSize(e,t,r){this.image.width===e&&this.image.height===t&&this.image.depth===r||(this.image.width=e,this.image.height=t,this.image.depth=r,this.dispose())}}class OC extends N{constructor(e=1,t=1,r=1){super(),this.isArrayTexture=!0,this.image={width:e,height:t,depth:r},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0}setSize(e,t,r){this.image.width===e&&this.image.height===t&&this.image.depth===r||(this.image.width=e,this.image.height=t,this.image.depth=r,this.dispose())}}class VC extends Nx{constructor(e,t){super(e,t,Uint32Array),this.isIndirectStorageBufferAttribute=!0}}class kC extends ws{constructor(e){super(e),this.textures={},this.nodes={}}load(e,t,r,s){const i=new Cs(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,r=>{try{t(this.parse(JSON.parse(r)))}catch(t){s?s(t):o(t),this.manager.itemError(e)}},r,s)}parseNodes(e){const t={};if(void 0!==e){for(const r of e){const{uuid:e,type:s}=r;t[e]=this.createNodeFromType(s),t[e].uuid=e}const r={nodes:t,textures:this.textures};for(const s of e){s.meta=r;t[s.uuid].deserialize(s),delete s.meta}}return t}parse(e){const t=this.createNodeFromType(e.type);t.uuid=e.uuid;const r={nodes:this.parseNodes(e.nodes),textures:this.textures};return e.meta=r,t.deserialize(e),delete e.meta,t}setTextures(e){return this.textures=e,this}setNodes(e){return this.nodes=e,this}createNodeFromType(e){return void 0===this.nodes[e]?(o("NodeLoader: Node type not found:",e),fn()):new this.nodes[e]}}class GC extends Ms{constructor(e){super(e),this.nodes={},this.nodeMaterials={}}parse(e){const t=super.parse(e),r=this.nodes,s=e.inputNodes;for(const e in s){const i=s[e];t[e]=r[i]}return t}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}createMaterialFromType(e){const t=this.nodeMaterials[e];return void 0!==t?new t:super.createMaterialFromType(e)}}class $C extends Bs{constructor(e){super(e),this.nodes={},this.nodeMaterials={},this._nodesJSON=null}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}parse(e,t){this._nodesJSON=e.nodes;const r=super.parse(e,t);return this._nodesJSON=null,r}parseNodes(e,t){if(void 0!==e){const r=new kC;return r.setNodes(this.nodes),r.setTextures(t),r.parseNodes(e)}return{}}parseMaterials(e,t){const r={};if(void 0!==e){const s=this.parseNodes(this._nodesJSON,t),i=new GC;i.setTextures(t),i.setNodes(s),i.setNodeMaterials(this.nodeMaterials);for(let t=0,s=e.length;t0){const{width:r,height:s}=e.context;t.bufferWidth=r,t.bufferHeight=s}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){const t={};for(const r in e){const s=e[r];t[r]={id:s.id,version:s.version}}return t}containsNode(e){const t=e.material;for(const e in t)if(t[e]&&t[e].isNode)return!0;return!!(e.context.modelViewMatrix||e.context.modelNormalViewMatrix||e.context.getAO||e.context.getShadow)}getMaterialData(e){const t={};for(const r of this.refreshUniforms){const s=e[r];null!=s&&("object"==typeof s&&void 0!==s.clone?!0===s.isTexture?t[r]={id:s.id,version:s.version}:t[r]=s.clone():t[r]=s)}return t}equals(e,t){const{object:r,material:s,geometry:i}=e,n=this.getRenderObjectData(e);if(!0!==n.worldMatrix.equals(r.matrixWorld))return n.worldMatrix.copy(r.matrixWorld),!1;const a=n.material;for(const e in a){const t=a[e],r=s[e];if(void 0!==t.equals){if(!1===t.equals(r))return t.copy(r),!1}else if(!0===r.isTexture){if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}else if(t!==r)return a[e]=r,!1}if(a.transmission>0){const{width:t,height:r}=e.context;if(n.bufferWidth!==t||n.bufferHeight!==r)return n.bufferWidth=t,n.bufferHeight=r,!1}const o=n.geometry,u=i.attributes,l=o.attributes,d=Object.keys(l),c=Object.keys(u);if(o.id!==i.id)return o.id=i.id,!1;if(d.length!==c.length)return n.geometry.attributes=this.getAttributesData(u),!1;for(const e of d){const t=l[e],r=u[e];if(void 0===r)return delete l[e],!1;if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}const h=i.index,p=o.indexId,g=o.indexVersion,m=h?h.id:null,f=h?h.version:null;if(p!==m||g!==f)return o.indexId=m,o.indexVersion=f,!1;if(o.drawRange.start!==i.drawRange.start||o.drawRange.count!==i.drawRange.count)return o.drawRange.start=i.drawRange.start,o.drawRange.count=i.drawRange.count,!1;if(n.morphTargetInfluences){let e=!1;for(let t=0;t{const r=e.match(t);if(!r)return null;const s=r[1]||r[2]||"",i=r[3].split("?")[0],n=parseInt(r[4],10),a=parseInt(r[5],10);return{fn:s,file:i.split("/").pop(),line:n,column:a}}).filter(e=>e&&!Ds.some(t=>t.test(e.file)))}(e||(new Error).stack)}getLocation(){if(0===this.stack.length)return"[Unknown location]";const e=this.stack[0],t=e.fn;return`${t?`"${t}()" at `:""}"${e.file}:${e.line}"`}getError(e){if(0===this.stack.length)return e;return`${e}\n${this.stack.map(e=>{const t=`${e.file}:${e.line}:${e.column}`;return e.fn?` at ${e.fn} (${t})`:` at ${t}`}).join("\n")}`}}function Is(e,t=0){let r=3735928559^t,s=1103547991^t;if(e instanceof Array)for(let t,i=0;i>>16,2246822507),r^=Math.imul(s^s>>>13,3266489909),s=Math.imul(s^s>>>16,2246822507),s^=Math.imul(r^r>>>13,3266489909),4294967296*(2097151&s)+(r>>>0)}const Os=e=>Is(e),Vs=e=>Is(e),ks=(...e)=>Is(e),Gs=new Map([[1,"float"],[2,"vec2"],[3,"vec3"],[4,"vec4"],[9,"mat3"],[16,"mat4"]]),$s=new WeakMap;function zs(e){return Gs.get(e)}function Ws(e){if(/[iu]?vec\d/.test(e))return e.startsWith("ivec")?Int32Array:e.startsWith("uvec")?Uint32Array:Float32Array;if(/mat\d/.test(e))return Float32Array;if(/float/.test(e))return Float32Array;if(/uint/.test(e))return Uint32Array;if(/int/.test(e))return Int32Array;throw new Error(`THREE.NodeUtils: Unsupported type: ${e}`)}function Hs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?9:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function qs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?12:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function js(e){return/float|int|uint/.test(e)?4:/vec2/.test(e)?8:/vec3/.test(e)||/vec4/.test(e)?16:/mat2/.test(e)?8:/mat3/.test(e)||/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function Xs(e){if(null==e)return null;const t=typeof e;return!0===e.isNode?"node":"number"===t?"float":"boolean"===t?"bool":"string"===t?"string":"function"===t?"shader":!0===e.isVector2?"vec2":!0===e.isVector3?"vec3":!0===e.isVector4?"vec4":!0===e.isMatrix2?"mat2":!0===e.isMatrix3?"mat3":!0===e.isMatrix4?"mat4":!0===e.isColor?"color":e instanceof ArrayBuffer?"ArrayBuffer":null}function Ks(o,...u){const l=o?o.slice(-4):void 0;return 1===u.length&&("vec2"===l?u=[u[0],u[0]]:"vec3"===l?u=[u[0],u[0],u[0]]:"vec4"===l&&(u=[u[0],u[0],u[0],u[0]])),"color"===o?new e(...u):"vec2"===l?new t(...u):"vec3"===l?new r(...u):"vec4"===l?new s(...u):"mat2"===l?new i(...u):"mat3"===l?new n(...u):"mat4"===l?new a(...u):"bool"===o?u[0]||!1:"float"===o||"int"===o||"uint"===o?u[0]||0:"string"===o?u[0]||"":"ArrayBuffer"===o?Zs(u[0]):null}function Qs(e){let t=$s.get(e);return void 0===t&&(t={},$s.set(e,t)),t}function Ys(e){let t="";const r=new Uint8Array(e);for(let e=0;ee.charCodeAt(0)).buffer}var Js=Object.freeze({__proto__:null,arrayBufferToBase64:Ys,base64ToArrayBuffer:Zs,getAlignmentFromType:js,getDataFromObject:Qs,getLengthFromType:Hs,getMemoryLengthFromType:qs,getTypeFromLength:zs,getTypedArrayFromType:Ws,getValueFromType:Ks,getValueType:Xs,hash:ks,hashArray:Vs,hashString:Os});const ei={VERTEX:"vertex",FRAGMENT:"fragment"},ti={NONE:"none",FRAME:"frame",RENDER:"render",OBJECT:"object"},ri={BOOLEAN:"bool",INTEGER:"int",FLOAT:"float",VECTOR2:"vec2",VECTOR3:"vec3",VECTOR4:"vec4",MATRIX2:"mat2",MATRIX3:"mat3",MATRIX4:"mat4"},si={READ_ONLY:"readOnly",WRITE_ONLY:"writeOnly",READ_WRITE:"readWrite"},ii=["fragment","vertex"],ni=["setup","analyze","generate"],ai=[...ii,"compute"],oi=["x","y","z","w"],ui={analyze:"setup",generate:"analyze"};let li=0;class di extends u{static get type(){return"Node"}constructor(e=null){super(),this.nodeType=e,this.updateType=ti.NONE,this.updateBeforeType=ti.NONE,this.updateAfterType=ti.NONE,this.uuid=l.generateUUID(),this.version=0,this.name="",this.global=!1,this.parents=!1,this.isNode=!0,this._beforeNodes=null,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:li++}),this.stackTrace=null,!0===di.captureStackTrace&&(this.stackTrace=new Us)}set needsUpdate(e){!0===e&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,ti.FRAME)}onRenderUpdate(e){return this.onUpdate(e,ti.RENDER)}onObjectUpdate(e){return this.onUpdate(e,ti.OBJECT)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(const{childNode:e}of this._getChildren())yield e}dispose(){this.dispatchEvent({type:"dispose"})}traverse(e){e(this);for(const t of this.getChildren())t.traverse(e)}_getChildren(e=new Set){const t=[];e.add(this);for(const r of Object.getOwnPropertyNames(this)){const s=this[r];if(!0!==r.startsWith("_")&&!e.has(s))if(!0===Array.isArray(s))for(let e=0;e0&&(e.inputNodes=r)}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const r in e.inputNodes)if(Array.isArray(e.inputNodes[r])){const s=[];for(const i of e.inputNodes[r])s.push(t[i]);this[r]=s}else if("object"==typeof e.inputNodes[r]){const s={};for(const i in e.inputNodes[r]){const n=e.inputNodes[r][i];s[i]=t[n]}this[r]=s}else{const s=e.inputNodes[r];this[r]=t[s]}}}toJSON(e){const{uuid:t,type:r}=this,s=void 0===e||"string"==typeof e;s&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];function n(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(void 0===i&&(i={uuid:t,type:r,meta:e,metadata:{version:4.7,type:"Node",generator:"Node.toJSON"}},!0!==s&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta),s){const t=n(e.textures),r=n(e.images),s=n(e.nodes);t.length>0&&(i.textures=t),r.length>0&&(i.images=r),s.length>0&&(i.nodes=s)}return i}}di.captureStackTrace=!1;class ci extends di{static get type(){return"ArrayElementNode"}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}generate(e){const t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:"uint")} ]`}}class hi extends di{static get type(){return"ConvertNode"}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){const t=this.node.getNodeType(e);let r=null;for(const s of this.convertTo.split("|"))null!==r&&e.getTypeLength(t)!==e.getTypeLength(s)||(r=s);return r}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){const r=this.node,s=this.getNodeType(e),i=r.build(e,s);return e.format(i,s,t)}}class pi extends di{static get type(){return"TempNode"}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if("generate"===e.getBuildStage()){const r=e.getVectorType(this.getNodeType(e,t)),s=e.getDataFromNode(this);if(void 0!==s.propertyName)return e.format(s.propertyName,r,t);if("void"!==r&&"void"!==t&&this.hasDependencies(e)){const i=super.build(e,r),n=e.getVarFromNode(this,null,r),a=e.getPropertyName(n);return e.addLineFlowCode(`${a} = ${i}`,this),s.snippet=i,s.propertyName=a,e.format(s.propertyName,r,t)}}return super.build(e,t)}}class gi extends pi{static get type(){return"JoinNode"}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return null!==this.nodeType?e.getVectorType(this.nodeType):e.getTypeFromLength(this.nodes.reduce((t,r)=>t+e.getTypeLength(r.getNodeType(e)),0))}generate(e,t){const r=this.getNodeType(e),s=e.getTypeLength(r),i=this.nodes,n=e.getComponentType(r),a=[];let u=0;for(const t of i){if(u>=s){o(`TSL: Length of parameters exceeds maximum length of function '${r}()' type.`,this.stackTrace);break}let i,l=t.getNodeType(e),d=e.getTypeLength(l);u+d>s&&(o(`TSL: Length of '${r}()' data exceeds maximum length of output type.`,this.stackTrace),d=s-u,l=e.getTypeFromLength(d)),u+=d,i=t.build(e,l);if(e.getComponentType(l)!==n){const t=e.getTypeFromLength(d,n);i=e.format(i,l,t)}a.push(i)}const l=`${e.getType(r)}( ${a.join(", ")} )`;return e.format(l,r,t)}}const mi=oi.join("");class fi extends di{static get type(){return"SplitNode"}constructor(e,t="x"){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(const t of this.components)e=Math.max(oi.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){const r=this.node,s=e.getTypeLength(r.getNodeType(e));let i=null;if(s>1){let n=null;this.getVectorLength()>=s&&(n=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));const a=r.build(e,n);i=this.components.length===s&&this.components===mi.slice(0,this.components.length)?e.format(a,n,t):e.format(`${a}.${this.components}`,this.getNodeType(e),t)}else i=r.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}}class yi extends pi{static get type(){return"SetNode"}constructor(e,t,r){super(),this.sourceNode=e,this.components=t,this.targetNode=r}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){const{sourceNode:t,components:r,targetNode:s}=this,i=this.getNodeType(e),n=e.getComponentType(s.getNodeType(e)),a=e.getTypeFromLength(r.length,n),o=s.build(e,a),u=t.build(e,i),l=e.getTypeLength(i),d=[];for(let e=0;e(e=>e.replace(/r|s/g,"x").replace(/g|t/g,"y").replace(/b|p/g,"z").replace(/a|q/g,"w"))(e).split("").sort().join("");di.prototype.assign=function(...e){if(!0!==this.isStackNode)return null!==Ni?Ni.assign(this,...e):o("TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().",new Us),this;{const t=Si.get("assign");return this.addToStack(t(...e))}},di.prototype.toVarIntent=function(){return this},di.prototype.get=function(e){return new vi(this,e)};const Ai={};function wi(e,t,r){Ai[e]=Ai[t]=Ai[r]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new fi(this,e),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};const s=e.toUpperCase(),i=t.toUpperCase(),n=r.toUpperCase();di.prototype["set"+s]=di.prototype["set"+i]=di.prototype["set"+n]=function(t){const r=Ei(e);return new yi(this,r,en(t))},di.prototype["flip"+s]=di.prototype["flip"+i]=di.prototype["flip"+n]=function(){const t=Ei(e);return new bi(this,t)}}const Ci=["x","y","z","w"],Mi=["r","g","b","a"],Bi=["s","t","p","q"];for(let e=0;e<4;e++){let t=Ci[e],r=Mi[e],s=Bi[e];wi(t,r,s);for(let i=0;i<4;i++){t=Ci[e]+Ci[i],r=Mi[e]+Mi[i],s=Bi[e]+Bi[i],wi(t,r,s);for(let n=0;n<4;n++){t=Ci[e]+Ci[i]+Ci[n],r=Mi[e]+Mi[i]+Mi[n],s=Bi[e]+Bi[i]+Bi[n],wi(t,r,s);for(let a=0;a<4;a++)t=Ci[e]+Ci[i]+Ci[n]+Ci[a],r=Mi[e]+Mi[i]+Mi[n]+Mi[a],s=Bi[e]+Bi[i]+Bi[n]+Bi[a],wi(t,r,s)}}}for(let e=0;e<32;e++)Ai[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new ci(this,new _i(e,"uint")),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};Object.defineProperties(di.prototype,Ai);const Fi=new WeakMap,Li=function(e,t=null){for(const r in e)e[r]=en(e[r],t);return e},Pi=function(e,t=null){const r=e.length;for(let s=0;su?(o(`TSL: "${r}" parameter length exceeds limit.`,new Us),t.slice(0,u)):t}return null===t?n=(...t)=>i(new e(...sn(d(t)))):null!==r?(r=en(r),n=(...s)=>i(new e(t,...sn(d(s)),r))):n=(...r)=>i(new e(t,...sn(d(r)))),n.setParameterLength=(...e)=>(1===e.length?a=u=e[0]:2===e.length&&([a,u]=e),n),n.setName=e=>(l=e,n),n},Ui=function(e,...t){return new e(...sn(t))};class Ii extends di{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getElementType(e){return this.getOutputNode(e).getElementType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){const{shaderNode:t,rawInputs:r}=this,s=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||"",n=i||"default";if(s[n])return s[n];const a=e.subBuildFn,o=e.fnCall;e.subBuildFn=i,e.fnCall=this;let u=null;if(t.layout){let s=Fi.get(e.constructor);void 0===s&&(s=new WeakMap,Fi.set(e.constructor,s));let i=s.get(t);void 0===i&&(i=en(e.buildFunctionNode(t)),s.set(t,i)),e.addInclude(i);const n=r?function(e){let t;rn(e);t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0];return t}(r):null;u=en(i.call(n))}else{const s=new Proxy(e,{get:(e,t,r)=>{let s;return s=Symbol.iterator===t?function*(){yield}:Reflect.get(e,t,r),s}}),i=r?function(e){let t=0;return rn(e),new Proxy(e,{get:(r,s,i)=>{let n;if("length"===s)return n=e.length,n;if(Symbol.iterator===s)n=function*(){for(const t of e)yield en(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){const r=e[0];n=void 0===r[s]?r[t++]:Reflect.get(r,s,i)}else e[0]instanceof di&&(n=void 0===e[s]?e[t++]:Reflect.get(e,s,i));else n=Reflect.get(r,s,i);n=en(n)}return n}})}(r):null,n=Array.isArray(r)?r.length>0:null!==r,a=t.jsFunc,o=n||a.length>1?a(i,s):a(s);u=en(o)}return e.subBuildFn=a,e.fnCall=o,t.once&&(s[n]=u),u}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){const t=e.getNodeProperties(this),r=e.getSubBuildOutput(this);return t[r]=t[r]||this.setupOutput(e),t[r].subBuild=e.getClosestSubBuild(this),t[r]}build(e,t=null){let r=null;const s=e.getBuildStage(),i=e.getNodeProperties(this),n=e.getSubBuildOutput(this),a=this.getOutputNode(e),o=e.fnCall;if(e.fnCall=this,"setup"===s){const t=e.getSubBuildProperty("initialized",this);if(!0!==i[t]&&(i[t]=!0,i[n]=this.getOutputNode(e),i[n].build(e),this.shaderNode.subBuilds))for(const t of e.chaining){const r=e.getDataFromNode(t,"any");r.subBuilds=r.subBuilds||new Set;for(const e of this.shaderNode.subBuilds)r.subBuilds.add(e)}r=i[n]}else"analyze"===s?a.build(e,t):"generate"===s&&(r=a.build(e,t)||"");return e.fnCall=o,r}}class Oi extends di{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}getLayout(){return this.layout}call(e=null){return new Ii(this,e)}setup(){return this.call()}}const Vi=[!1,!0],ki=[0,1,2,3],Gi=[-1,-2],$i=[.5,1.5,1/3,1e-6,1e6,Math.PI,2*Math.PI,1/Math.PI,2/Math.PI,1/(2*Math.PI),Math.PI/2],zi=new Map;for(const e of Vi)zi.set(e,new _i(e));const Wi=new Map;for(const e of ki)Wi.set(e,new _i(e,"uint"));const Hi=new Map([...Wi].map(e=>new _i(e.value,"int")));for(const e of Gi)Hi.set(e,new _i(e,"int"));const qi=new Map([...Hi].map(e=>new _i(e.value)));for(const e of $i)qi.set(e,new _i(e));for(const e of $i)qi.set(-e,new _i(-e));const ji={bool:zi,uint:Wi,ints:Hi,float:qi},Xi=new Map([...zi,...qi]),Ki=(e,t)=>Xi.has(e)?Xi.get(e):!0===e.isNode?e:new _i(e,t),Qi=function(e,t=null){return(...r)=>{for(const t of r)if(void 0===t)return o(`TSL: Invalid parameter for the type "${e}".`,new Us),new _i(0,e);if((0===r.length||!["bool","float","int","uint"].includes(e)&&r.every(e=>{const t=typeof e;return"object"!==t&&"function"!==t}))&&(r=[Ks(e,...r)]),1===r.length&&null!==t&&t.has(r[0]))return tn(t.get(r[0]));if(1===r.length){const t=Ki(r[0],e);return t.nodeType===e?tn(t):tn(new hi(t,e))}const s=r.map(e=>Ki(e));return tn(new gi(s,e))}},Yi=e=>"object"==typeof e&&null!==e?e.value:e,Zi=e=>null!=e?e.nodeType||e.convertTo||("string"==typeof e?e:null):null;function Ji(e,t){return new Oi(e,t)}const en=(e,t=null)=>function(e,t=null){const r=Xs(e);return"node"===r?e:null===t&&("float"===r||"boolean"===r)||r&&"shader"!==r&&"string"!==r?en(Ki(e,t)):"shader"===r?e.isFn?e:dn(e):e}(e,t),tn=(e,t=null)=>en(e,t).toVarIntent(),rn=(e,t=null)=>new Li(e,t),sn=(e,t=null)=>new Pi(e,t),nn=(e,t=null,r=null,s=null)=>new Di(e,t,r,s),an=(e,...t)=>new Ui(e,...t),on=(e,t=null,r=null,s={})=>new Di(e,t,r,{...s,intent:!0});let un=0;class ln extends di{constructor(e,t=null){super();let r=null;null!==t&&("object"==typeof t?r=t.return:("string"==typeof t?r=t:o("TSL: Invalid layout type.",new Us),t=null)),this.shaderNode=new Ji(e,r),null!==t&&this.setLayout(t),this.isFn=!0}setLayout(e){const t=this.shaderNode.nodeType;if("object"!=typeof e.inputs){const r={name:"fn"+un++,type:t,inputs:[]};for(const t in e)"return"!==t&&r.inputs.push({name:t,type:e[t]});e=r}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||"float"}call(...e){const t=this.shaderNode.call(e);return"void"===this.shaderNode.nodeType&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){const t=this.getNodeType(e);return o('TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".',this.stackTrace),e.generateConst(t)}}function dn(e,t=null){const r=new ln(e,t);return new Proxy(()=>{},{apply:(e,t,s)=>r.call(...s),get:(e,t,s)=>Reflect.get(r,t,s),set:(e,t,s,i)=>Reflect.set(r,t,s,i)})}const cn=e=>{Ni=e},hn=()=>Ni,pn=(...e)=>Ni.If(...e);function gn(e){return Ni&&Ni.addToStack(e),e}Ri("toStack",gn);const mn=new Qi("color"),fn=new Qi("float",ji.float),yn=new Qi("int",ji.ints),bn=new Qi("uint",ji.uint),xn=new Qi("bool",ji.bool),Tn=new Qi("vec2"),_n=new Qi("ivec2"),vn=new Qi("uvec2"),Nn=new Qi("bvec2"),Sn=new Qi("vec3"),Rn=new Qi("ivec3"),En=new Qi("uvec3"),An=new Qi("bvec3"),wn=new Qi("vec4"),Cn=new Qi("ivec4"),Mn=new Qi("uvec4"),Bn=new Qi("bvec4"),Fn=new Qi("mat2"),Ln=new Qi("mat3"),Pn=new Qi("mat4");Ri("toColor",mn),Ri("toFloat",fn),Ri("toInt",yn),Ri("toUint",bn),Ri("toBool",xn),Ri("toVec2",Tn),Ri("toIVec2",_n),Ri("toUVec2",vn),Ri("toBVec2",Nn),Ri("toVec3",Sn),Ri("toIVec3",Rn),Ri("toUVec3",En),Ri("toBVec3",An),Ri("toVec4",wn),Ri("toIVec4",Cn),Ri("toUVec4",Mn),Ri("toBVec4",Bn),Ri("toMat2",Fn),Ri("toMat3",Ln),Ri("toMat4",Pn);const Dn=nn(ci).setParameterLength(2),Un=(e,t)=>new hi(en(e),t);Ri("element",Dn),Ri("convert",Un);Ri("append",e=>(d("TSL: .append() has been renamed to .toStack().",new Us),gn(e)));class In extends di{static get type(){return"PropertyNode"}constructor(e,t=null,r=!1){super(e),this.name=t,this.varying=r,this.isPropertyNode=!0,this.global=!0}customCacheKey(){return Os(this.type+":"+(this.name||"")+":"+(this.varying?"1":"0"))}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return!0===this.varying?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}}const On=(e,t)=>new In(e,t),Vn=(e,t)=>new In(e,t,!0),kn=an(In,"vec4","DiffuseColor"),Gn=an(In,"vec3","DiffuseContribution"),$n=an(In,"vec3","EmissiveColor"),zn=an(In,"float","Roughness"),Wn=an(In,"float","Metalness"),Hn=an(In,"float","Clearcoat"),qn=an(In,"float","ClearcoatRoughness"),jn=an(In,"vec3","Sheen"),Xn=an(In,"float","SheenRoughness"),Kn=an(In,"float","Iridescence"),Qn=an(In,"float","IridescenceIOR"),Yn=an(In,"float","IridescenceThickness"),Zn=an(In,"float","AlphaT"),Jn=an(In,"float","Anisotropy"),ea=an(In,"vec3","AnisotropyT"),ta=an(In,"vec3","AnisotropyB"),ra=an(In,"color","SpecularColor"),sa=an(In,"color","SpecularColorBlended"),ia=an(In,"float","SpecularF90"),na=an(In,"float","Shininess"),aa=an(In,"vec4","Output"),oa=an(In,"float","dashSize"),ua=an(In,"float","gapSize"),la=an(In,"float","pointWidth"),da=an(In,"float","IOR"),ca=an(In,"float","Transmission"),ha=an(In,"float","Thickness"),pa=an(In,"float","AttenuationDistance"),ga=an(In,"color","AttenuationColor"),ma=an(In,"float","Dispersion");class fa extends di{static get type(){return"UniformGroupNode"}constructor(e,t=!1,r=1){super("string"),this.name=e,this.shared=t,this.order=r,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}}const ya=e=>new fa(e),ba=(e,t=0)=>new fa(e,!0,t),xa=ba("frame"),Ta=ba("render"),_a=ya("object");class va extends xi{static get type(){return"UniformNode"}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name="",this.groupNode=_a}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{const r=e(t,this);void 0!==r&&(this.value=r)},t)}getInputType(e){let t=super.getInputType(e);return"bool"===t&&(t="uint"),t}generate(e,t){const r=this.getNodeType(e),s=this.getUniformHash(e);let i=e.getNodeFromHash(s);void 0===i&&(e.setHashNode(this,s),i=this);const n=i.getInputType(e),a=e.getUniformFromNode(i,n,e.shaderStage,this.name||e.context.nodeName),o=e.getPropertyName(a);void 0!==e.context.nodeName&&delete e.context.nodeName;let u=o;if("bool"===r){const t=e.getDataFromNode(this);let s=t.propertyName;if(void 0===s){const i=e.getVarFromNode(this,null,"bool");s=e.getPropertyName(i),t.propertyName=s,u=e.format(o,n,r),e.addLineFlowCode(`${s} = ${u}`,this)}u=s}return e.format(u,r,t)}}const Na=(e,t)=>{const r=Zi(t||e);if(r===e&&(e=Ks(r)),e&&!0===e.isNode){let t=e.value;e.traverse(e=>{!0===e.isConstNode&&(t=e.value)}),e=t}return new va(e,r)};class Sa extends pi{static get type(){return"ArrayNode"}constructor(e,t,r=null){super(e),this.count=t,this.values=r,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return null===this.nodeType?this.values[0].getNodeType(e):this.nodeType}getElementType(e){return this.getNodeType(e)}getMemberType(e,t){return null===this.nodeType?this.values[0].getMemberType(e,t):super.getMemberType(e,t)}generate(e){const t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}}const Ra=(...e)=>{let t;if(1===e.length){const r=e[0];t=new Sa(null,r.length,r)}else{const r=e[0],s=e[1];t=new Sa(r,s)}return en(t)};Ri("toArray",(e,t)=>Ra(Array(t).fill(e)));class Ea extends pi{static get type(){return"AssignNode"}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return"void"!==t?this.targetNode.getNodeType(e):"void"}needsSplitAssign(e){const{targetNode:t}=this;if(!1===e.isAvailable("swizzleAssign")&&t.isSplitNode&&t.components.length>1){const r=e.getTypeLength(t.node.getNodeType(e));return oi.join("").slice(0,r)!==t.components}return!1}setup(e){const{targetNode:t,sourceNode:r}=this,s=t.getScope();e.getDataFromNode(s).assign=!0;const i=e.getNodeProperties(this);i.sourceNode=r,i.targetNode=t.context({assign:!0})}generate(e,t){const{targetNode:r,sourceNode:s}=e.getNodeProperties(this),i=this.needsSplitAssign(e),n=r.build(e),a=r.getNodeType(e),o=s.build(e,a),u=s.getNodeType(e),l=e.getDataFromNode(this);let d;if(!0===l.initialized)"void"!==t&&(d=n);else if(i){const s=e.getVarFromNode(this,null,a),i=e.getPropertyName(s);e.addLineFlowCode(`${i} = ${o}`,this);const u=r.node,l=u.node.context({assign:!0}).build(e);for(let t=0;t{const s=r.type;let i;return i="pointer"===s?"&"+t.build(e):t.build(e,s),i};if(Array.isArray(i)){if(i.length>s.length)o("TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'."),i.length=s.length;else if(i.length(t=t.length>1||t[0]&&!0===t[0].isNode?sn(t):rn(t[0]),new wa(en(e),t));Ri("call",Ca);const Ma={"==":"equal","!=":"notEqual","<":"lessThan",">":"greaterThan","<=":"lessThanEqual",">=":"greaterThanEqual","%":"mod"};class Ba extends pi{static get type(){return"OperatorNode"}constructor(e,t,r,...s){if(super(),s.length>0){let i=new Ba(e,t,r);for(let t=0;t>"===r||"<<"===r)return e.getIntegerType(n);if("!"===r||"&&"===r||"||"===r||"^^"===r)return"bool";if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r){const t=Math.max(e.getTypeLength(n),e.getTypeLength(a));return t>1?`bvec${t}`:"bool"}if(e.isMatrix(n)){if("float"===a)return n;if(e.isVector(a))return e.getVectorFromMatrix(n);if(e.isMatrix(a))return n}else if(e.isMatrix(a)){if("float"===n)return a;if(e.isVector(n))return e.getVectorFromMatrix(a)}return e.getTypeLength(a)>e.getTypeLength(n)?a:n}generate(e,t){const r=this.op,{aNode:s,bNode:i}=this,n=this.getNodeType(e,t);let a=null,o=null;"void"!==n?(a=s.getNodeType(e),o=i?i.getNodeType(e):null,"<"===r||">"===r||"<="===r||">="===r||"=="===r||"!="===r?e.isVector(a)?o=a:e.isVector(o)?a=o:a!==o&&(a=o="float"):">>"===r||"<<"===r?(a=n,o=e.changeComponentType(o,"uint")):"%"===r?(a=n,o=e.isInteger(a)&&e.isInteger(o)?o:a):e.isMatrix(a)?"float"===o?o="float":e.isVector(o)?o=e.getVectorFromMatrix(a):e.isMatrix(o)||(a=o=n):a=e.isMatrix(o)?"float"===a?"float":e.isVector(a)?e.getVectorFromMatrix(o):o=n:o=n):a=o=n;const u=s.build(e,a),l=i?i.build(e,o):null,d=e.getFunctionOperator(r);if("void"!==t){const s=e.renderer.coordinateSystem===c;if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r)return s&&e.isVector(a)?e.format(`${this.getOperatorMethod(e,t)}( ${u}, ${l} )`,n,t):e.format(`( ${u} ${r} ${l} )`,n,t);if("%"===r)return e.isInteger(o)?e.format(`( ${u} % ${l} )`,n,t):e.format(`${this.getOperatorMethod(e,n)}( ${u}, ${l} )`,n,t);if("!"===r||"~"===r)return e.format(`(${r}${u})`,a,t);if(d)return e.format(`${d}( ${u}, ${l} )`,n,t);if(e.isMatrix(a)&&"float"===o)return e.format(`( ${l} ${r} ${u} )`,n,t);if("float"===a&&e.isMatrix(o))return e.format(`${u} ${r} ${l}`,n,t);{let i=`( ${u} ${r} ${l} )`;return!s&&"bool"===n&&e.isVector(a)&&e.isVector(o)&&(i=`all${i}`),e.format(i,n,t)}}if("void"!==a)return d?e.format(`${d}( ${u}, ${l} )`,n,t):e.isMatrix(a)&&"float"===o?e.format(`${l} ${r} ${u}`,n,t):e.format(`${u} ${r} ${l}`,n,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}}const Fa=on(Ba,"+").setParameterLength(2,1/0).setName("add"),La=on(Ba,"-").setParameterLength(2,1/0).setName("sub"),Pa=on(Ba,"*").setParameterLength(2,1/0).setName("mul"),Da=on(Ba,"/").setParameterLength(2,1/0).setName("div"),Ua=on(Ba,"%").setParameterLength(2).setName("mod"),Ia=on(Ba,"==").setParameterLength(2).setName("equal"),Oa=on(Ba,"!=").setParameterLength(2).setName("notEqual"),Va=on(Ba,"<").setParameterLength(2).setName("lessThan"),ka=on(Ba,">").setParameterLength(2).setName("greaterThan"),Ga=on(Ba,"<=").setParameterLength(2).setName("lessThanEqual"),$a=on(Ba,">=").setParameterLength(2).setName("greaterThanEqual"),za=on(Ba,"&&").setParameterLength(2,1/0).setName("and"),Wa=on(Ba,"||").setParameterLength(2,1/0).setName("or"),Ha=on(Ba,"!").setParameterLength(1).setName("not"),qa=on(Ba,"^^").setParameterLength(2).setName("xor"),ja=on(Ba,"&").setParameterLength(2).setName("bitAnd"),Xa=on(Ba,"~").setParameterLength(1).setName("bitNot"),Ka=on(Ba,"|").setParameterLength(2).setName("bitOr"),Qa=on(Ba,"^").setParameterLength(2).setName("bitXor"),Ya=on(Ba,"<<").setParameterLength(2).setName("shiftLeft"),Za=on(Ba,">>").setParameterLength(2).setName("shiftRight"),Ja=dn(([e])=>(e.addAssign(1),e)),eo=dn(([e])=>(e.subAssign(1),e)),to=dn(([e])=>{const t=yn(e).toConst();return e.addAssign(1),t}),ro=dn(([e])=>{const t=yn(e).toConst();return e.subAssign(1),t});Ri("add",Fa),Ri("sub",La),Ri("mul",Pa),Ri("div",Da),Ri("mod",Ua),Ri("equal",Ia),Ri("notEqual",Oa),Ri("lessThan",Va),Ri("greaterThan",ka),Ri("lessThanEqual",Ga),Ri("greaterThanEqual",$a),Ri("and",za),Ri("or",Wa),Ri("not",Ha),Ri("xor",qa),Ri("bitAnd",ja),Ri("bitNot",Xa),Ri("bitOr",Ka),Ri("bitXor",Qa),Ri("shiftLeft",Ya),Ri("shiftRight",Za),Ri("incrementBefore",Ja),Ri("decrementBefore",eo),Ri("increment",to),Ri("decrement",ro);const so=(e,t)=>(d('TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.',new Us),Ua(yn(e),yn(t)));Ri("modInt",so);class io extends pi{static get type(){return"MathNode"}constructor(e,t,r=null,s=null){if(super(),(e===io.MAX||e===io.MIN)&&arguments.length>3){let i=new io(e,t,r);for(let t=2;tn&&i>a?t:n>a?r:a>i?s:t}getNodeType(e){const t=this.method;return t===io.LENGTH||t===io.DISTANCE||t===io.DOT?"float":t===io.CROSS?"vec3":t===io.ALL||t===io.ANY?"bool":t===io.EQUALS?e.changeComponentType(this.aNode.getNodeType(e),"bool"):this.getInputType(e)}setup(e){const{aNode:t,bNode:r,method:s}=this;let i=null;if(s===io.ONE_MINUS)i=La(1,t);else if(s===io.RECIPROCAL)i=Da(1,t);else if(s===io.DIFFERENCE)i=Fo(La(t,r));else if(s===io.TRANSFORM_DIRECTION){let s=t,n=r;e.isMatrix(s.getNodeType(e))?n=wn(Sn(n),0):s=wn(Sn(s),0);const a=Pa(s,n).xyz;i=So(a)}return null!==i?i:super.setup(e)}generate(e,t){if(e.getNodeProperties(this).outputNode)return super.generate(e,t);let r=this.method;const s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=this.cNode,u=e.renderer.coordinateSystem;if(r===io.NEGATE)return e.format("( - "+n.build(e,i)+" )",s,t);{const l=[];return r===io.CROSS?l.push(n.build(e,s),a.build(e,s)):u===c&&r===io.STEP?l.push(n.build(e,1===e.getTypeLength(n.getNodeType(e))?"float":i),a.build(e,i)):u!==c||r!==io.MIN&&r!==io.MAX?r===io.REFRACT?l.push(n.build(e,i),a.build(e,i),o.build(e,"float")):r===io.MIX?l.push(n.build(e,i),a.build(e,i),o.build(e,1===e.getTypeLength(o.getNodeType(e))?"float":i)):(u===h&&r===io.ATAN&&null!==a&&(r="atan2"),"fragment"===e.shaderStage||r!==io.DFDX&&r!==io.DFDY||(d(`TSL: '${r}' is not supported in the ${e.shaderStage} stage.`,this.stackTrace),r="/*"+r+"*/"),l.push(n.build(e,i)),null!==a&&l.push(a.build(e,i)),null!==o&&l.push(o.build(e,i))):l.push(n.build(e,i),a.build(e,1===e.getTypeLength(a.getNodeType(e))?"float":i)),e.format(`${e.getMethod(r,s)}( ${l.join(", ")} )`,s,t)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}io.ALL="all",io.ANY="any",io.RADIANS="radians",io.DEGREES="degrees",io.EXP="exp",io.EXP2="exp2",io.LOG="log",io.LOG2="log2",io.SQRT="sqrt",io.INVERSE_SQRT="inversesqrt",io.FLOOR="floor",io.CEIL="ceil",io.NORMALIZE="normalize",io.FRACT="fract",io.SIN="sin",io.COS="cos",io.TAN="tan",io.ASIN="asin",io.ACOS="acos",io.ATAN="atan",io.ABS="abs",io.SIGN="sign",io.LENGTH="length",io.NEGATE="negate",io.ONE_MINUS="oneMinus",io.DFDX="dFdx",io.DFDY="dFdy",io.ROUND="round",io.RECIPROCAL="reciprocal",io.TRUNC="trunc",io.FWIDTH="fwidth",io.TRANSPOSE="transpose",io.DETERMINANT="determinant",io.INVERSE="inverse",io.EQUALS="equals",io.MIN="min",io.MAX="max",io.STEP="step",io.REFLECT="reflect",io.DISTANCE="distance",io.DIFFERENCE="difference",io.DOT="dot",io.CROSS="cross",io.POW="pow",io.TRANSFORM_DIRECTION="transformDirection",io.MIX="mix",io.CLAMP="clamp",io.REFRACT="refract",io.SMOOTHSTEP="smoothstep",io.FACEFORWARD="faceforward";const no=fn(1e-6),ao=fn(1e6),oo=fn(Math.PI),uo=fn(2*Math.PI),lo=fn(2*Math.PI),co=fn(.5*Math.PI),ho=on(io,io.ALL).setParameterLength(1),po=on(io,io.ANY).setParameterLength(1),go=on(io,io.RADIANS).setParameterLength(1),mo=on(io,io.DEGREES).setParameterLength(1),fo=on(io,io.EXP).setParameterLength(1),yo=on(io,io.EXP2).setParameterLength(1),bo=on(io,io.LOG).setParameterLength(1),xo=on(io,io.LOG2).setParameterLength(1),To=on(io,io.SQRT).setParameterLength(1),_o=on(io,io.INVERSE_SQRT).setParameterLength(1),vo=on(io,io.FLOOR).setParameterLength(1),No=on(io,io.CEIL).setParameterLength(1),So=on(io,io.NORMALIZE).setParameterLength(1),Ro=on(io,io.FRACT).setParameterLength(1),Eo=on(io,io.SIN).setParameterLength(1),Ao=on(io,io.COS).setParameterLength(1),wo=on(io,io.TAN).setParameterLength(1),Co=on(io,io.ASIN).setParameterLength(1),Mo=on(io,io.ACOS).setParameterLength(1),Bo=on(io,io.ATAN).setParameterLength(1,2),Fo=on(io,io.ABS).setParameterLength(1),Lo=on(io,io.SIGN).setParameterLength(1),Po=on(io,io.LENGTH).setParameterLength(1),Do=on(io,io.NEGATE).setParameterLength(1),Uo=on(io,io.ONE_MINUS).setParameterLength(1),Io=on(io,io.DFDX).setParameterLength(1),Oo=on(io,io.DFDY).setParameterLength(1),Vo=on(io,io.ROUND).setParameterLength(1),ko=on(io,io.RECIPROCAL).setParameterLength(1),Go=on(io,io.TRUNC).setParameterLength(1),$o=on(io,io.FWIDTH).setParameterLength(1),zo=on(io,io.TRANSPOSE).setParameterLength(1),Wo=on(io,io.DETERMINANT).setParameterLength(1),Ho=on(io,io.INVERSE).setParameterLength(1),qo=on(io,io.MIN).setParameterLength(2,1/0),jo=on(io,io.MAX).setParameterLength(2,1/0),Xo=on(io,io.STEP).setParameterLength(2),Ko=on(io,io.REFLECT).setParameterLength(2),Qo=on(io,io.DISTANCE).setParameterLength(2),Yo=on(io,io.DIFFERENCE).setParameterLength(2),Zo=on(io,io.DOT).setParameterLength(2),Jo=on(io,io.CROSS).setParameterLength(2),eu=on(io,io.POW).setParameterLength(2),tu=e=>Pa(e,e),ru=e=>Pa(e,e,e),su=e=>Pa(e,e,e,e),iu=on(io,io.TRANSFORM_DIRECTION).setParameterLength(2),nu=e=>Pa(Lo(e),eu(Fo(e),1/3)),au=e=>Zo(e,e),ou=on(io,io.MIX).setParameterLength(3),uu=(e,t=0,r=1)=>new io(io.CLAMP,en(e),en(t),en(r)),lu=e=>uu(e),du=on(io,io.REFRACT).setParameterLength(3),cu=on(io,io.SMOOTHSTEP).setParameterLength(3),hu=on(io,io.FACEFORWARD).setParameterLength(3),pu=dn(([e])=>{const t=Zo(e.xy,Tn(12.9898,78.233)),r=Ua(t,oo);return Ro(Eo(r).mul(43758.5453))}),gu=(e,t,r)=>ou(t,r,e),mu=(e,t,r)=>cu(t,r,e),fu=(e,t)=>Xo(t,e),yu=hu,bu=_o;Ri("all",ho),Ri("any",po),Ri("radians",go),Ri("degrees",mo),Ri("exp",fo),Ri("exp2",yo),Ri("log",bo),Ri("log2",xo),Ri("sqrt",To),Ri("inverseSqrt",_o),Ri("floor",vo),Ri("ceil",No),Ri("normalize",So),Ri("fract",Ro),Ri("sin",Eo),Ri("cos",Ao),Ri("tan",wo),Ri("asin",Co),Ri("acos",Mo),Ri("atan",Bo),Ri("abs",Fo),Ri("sign",Lo),Ri("length",Po),Ri("lengthSq",au),Ri("negate",Do),Ri("oneMinus",Uo),Ri("dFdx",Io),Ri("dFdy",Oo),Ri("round",Vo),Ri("reciprocal",ko),Ri("trunc",Go),Ri("fwidth",$o),Ri("min",qo),Ri("max",jo),Ri("step",fu),Ri("reflect",Ko),Ri("distance",Qo),Ri("dot",Zo),Ri("cross",Jo),Ri("pow",eu),Ri("pow2",tu),Ri("pow3",ru),Ri("pow4",su),Ri("transformDirection",iu),Ri("mix",gu),Ri("clamp",uu),Ri("refract",du),Ri("smoothstep",mu),Ri("faceForward",hu),Ri("difference",Yo),Ri("saturate",lu),Ri("cbrt",nu),Ri("transpose",zo),Ri("determinant",Wo),Ri("inverse",Ho),Ri("rand",pu);class xu extends di{static get type(){return"ConditionalNode"}constructor(e,t,r=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=r}getNodeType(e){const{ifNode:t,elseNode:r}=e.getNodeProperties(this);if(void 0===t)return e.flowBuildStage(this,"setup"),this.getNodeType(e);const s=t.getNodeType(e);if(null!==r){const t=r.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(s))return t}return s}setup(e){const t=this.condNode,r=this.ifNode.isolate(),s=this.elseNode?this.elseNode.isolate():null,i=e.context.nodeBlock;e.getDataFromNode(r).parentNodeBlock=i,null!==s&&(e.getDataFromNode(s).parentNodeBlock=i);const n=e.context.uniformFlow,a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n?r:r.context({nodeBlock:r}),a.elseNode=s?n?s:s.context({nodeBlock:s}):null}generate(e,t){const r=this.getNodeType(e),s=e.getDataFromNode(this);if(void 0!==s.nodeProperty)return s.nodeProperty;const{condNode:i,ifNode:n,elseNode:a}=e.getNodeProperties(this),o=e.currentFunctionNode,u="void"!==t,l=u?On(r).build(e):"";s.nodeProperty=l;const c=i.build(e,"bool");if(e.context.uniformFlow&&null!==a){const s=n.build(e,r),i=a.build(e,r),o=e.getTernary(c,s,i);return e.format(o,r,t)}e.addFlowCode(`\n${e.tab}if ( ${c} ) {\n\n`).addFlowTab();let h=n.build(e,r);if(h&&(u?h=l+" = "+h+";":(h="return "+h+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),h="// "+h))),e.removeFlowTab().addFlowCode(e.tab+"\t"+h+"\n\n"+e.tab+"}"),null!==a){e.addFlowCode(" else {\n\n").addFlowTab();let t=a.build(e,r);t&&(u?t=l+" = "+t+";":(t="return "+t+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),t="// "+t))),e.removeFlowTab().addFlowCode(e.tab+"\t"+t+"\n\n"+e.tab+"}\n\n")}else e.addFlowCode("\n\n");return e.format(l,r,t)}}const Tu=nn(xu).setParameterLength(2,3);Ri("select",Tu);class _u extends di{static get type(){return"ContextNode"}constructor(e=null,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getFlowContextData(){const e=[];return this.traverse(t=>{!0===t.isContextNode&&e.push(t.value)}),Object.assign({},...e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}setup(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}generate(e,t){const r=e.addContext(this.value),s=this.node.build(e,t);return e.setContext(r),s}}const vu=(e=null,t={})=>{let r=e;return null!==r&&!0===r.isNode||(t=r||t,r=null),new _u(r,t)},Nu=e=>vu(e,{uniformFlow:!0}),Su=(e,t)=>vu(e,{nodeName:t});function Ru(e,t,r=null){return vu(r,{getShadow:({light:r,shadowColorNode:s})=>t===r?s.mul(e):s})}function Eu(e,t=null){return vu(t,{getAO:(t,{material:r})=>!0===r.transparent?t:null!==t?t.mul(e):e})}function Au(e,t){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),Su(e,t)}Ri("context",vu),Ri("label",Au),Ri("uniformFlow",Nu),Ri("setName",Su),Ri("builtinShadowContext",(e,t,r)=>Ru(t,r,e)),Ri("builtinAOContext",(e,t)=>Eu(t,e));class wu extends di{static get type(){return"VarNode"}constructor(e,t=null,r=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=r,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}isIntent(e){return!0!==e.getDataFromNode(this).forceDeclaration&&this.intent}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}isAssign(e){return e.getDataFromNode(this).assign}build(...e){const t=e[0];if(!1===this._hasStack(t)&&"setup"===t.buildStage&&(t.context.nodeLoop||t.context.nodeBlock)){let e=!1;if(this.node.isShaderCallNodeInternal&&null===this.node.shaderNode.getLayout()&&t.fnCall&&t.fnCall.shaderNode){if(t.getDataFromNode(this.node.shaderNode).hasLoop){t.getDataFromNode(this).forceDeclaration=!0,e=!0}}const r=t.getBaseStack();e?r.addToStackBefore(this):r.addToStack(this)}return this.isIntent(t)&&!0!==this.isAssign(t)?this.node.build(...e):super.build(...e)}generate(e){const{node:t,name:r,readOnly:s}=this,{renderer:i}=e,n=!0===i.backend.isWebGPUBackend;let a=!1,u=!1;s&&(a=e.isDeterministic(t),u=n?s:a);const l=this.getNodeType(e);if("void"==l){!0!==this.isIntent(e)&&o('TSL: ".toVar()" can not be used with void type.',this.stackTrace);return t.build(e)}const d=e.getVectorType(l),c=t.build(e,d),h=e.getVarFromNode(this,r,d,void 0,u),p=e.getPropertyName(h);let g=p;if(u)if(n)g=a?`const ${p}`:`let ${p}`;else{const r=t.getArrayCount(e);g=`const ${e.getVar(h.type,p,r)}`}return e.addLineFlowCode(`${g} = ${c}`,this),p}_hasStack(e){return void 0!==e.getDataFromNode(this).stack}}const Cu=nn(wu),Mu=(e,t=null)=>Cu(e,t).toStack(),Bu=(e,t=null)=>Cu(e,t,!0).toStack(),Fu=e=>Cu(e).setIntent(!0).toStack();Ri("toVar",Mu),Ri("toConst",Bu),Ri("toVarIntent",Fu);class Lu extends di{static get type(){return"SubBuild"}constructor(e,t,r=null){super(r),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(null!==this.nodeType)return this.nodeType;e.addSubBuild(this.name);const t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);const r=this.node.build(e,...t);return e.removeSubBuild(),r}}const Pu=(e,t,r=null)=>new Lu(en(e),t,r);class Du extends di{static get type(){return"VaryingNode"}constructor(e,t=null){super(),this.node=Pu(e,"VERTEX"),this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){const t=e.getNodeProperties(this);let r=t.varying;if(void 0===r){const s=this.name,i=this.getNodeType(e),n=this.interpolationType,a=this.interpolationSampling;t.varying=r=e.getVaryingFromNode(this,s,i,n,a),t.node=Pu(this.node,"VERTEX")}return r.needsInterpolation||(r.needsInterpolation="fragment"===e.shaderStage),r}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}generate(e){const t=e.getSubBuildProperty("property",e.currentStack),r=e.getNodeProperties(this),s=this.setupVarying(e);if(void 0===r[t]){const i=this.getNodeType(e),n=e.getPropertyName(s,ei.VERTEX);e.flowNodeFromShaderStage(ei.VERTEX,r.node,i,n),r[t]=n}return e.getPropertyName(s)}}const Uu=nn(Du).setParameterLength(1,2),Iu=e=>Uu(e);Ri("toVarying",Uu),Ri("toVertexStage",Iu);const Ou=dn(([e])=>{const t=e.mul(.9478672986).add(.0521327014).pow(2.4),r=e.mul(.0773993808),s=e.lessThanEqual(.04045);return ou(t,r,s)}).setLayout({name:"sRGBTransferEOTF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),Vu=dn(([e])=>{const t=e.pow(.41666).mul(1.055).sub(.055),r=e.mul(12.92),s=e.lessThanEqual(.0031308);return ou(t,r,s)}).setLayout({name:"sRGBTransferOETF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),ku="WorkingColorSpace";class Gu extends pi{static get type(){return"ColorSpaceNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this.source=t,this.target=r}resolveColorSpace(e,t){return t===ku?p.workingColorSpace:"OutputColorSpace"===t?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){const{colorNode:t}=this,r=this.resolveColorSpace(e,this.source),s=this.resolveColorSpace(e,this.target);let i=t;return!1!==p.enabled&&r!==s&&r&&s?(p.getTransfer(r)===g&&(i=wn(Ou(i.rgb),i.a)),p.getPrimaries(r)!==p.getPrimaries(s)&&(i=wn(Ln(p._getMatrix(new n,r,s)).mul(i.rgb),i.a)),p.getTransfer(s)===g&&(i=wn(Vu(i.rgb),i.a)),i):i}}const $u=(e,t)=>new Gu(en(e),ku,t),zu=(e,t)=>new Gu(en(e),t,ku);Ri("workingToColorSpace",$u),Ri("colorSpaceToWorking",zu);let Wu=class extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}};class Hu extends di{static get type(){return"ReferenceBaseNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.updateType=ti.OBJECT}setGroup(e){return this.group=e,this}element(e){return new Wu(this,en(e))}setNodeType(e){const t=Na(null,e);null!==this.group&&t.setGroup(this.group),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew qu(e,t,r);class Xu extends pi{static get type(){return"ToneMappingNode"}constructor(e,t=Qu,r=null){super("vec3"),this._toneMapping=e,this.exposureNode=t,this.colorNode=r}customCacheKey(){return ks(this._toneMapping)}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup(e){const t=this.colorNode||e.context.color,r=this._toneMapping;if(r===m)return t;let s=null;const i=e.renderer.library.getToneMappingFunction(r);return null!==i?s=wn(i(t.rgb,this.exposureNode),t.a):(o("ToneMappingNode: Unsupported Tone Mapping configuration.",r),s=t),s}}const Ku=(e,t,r)=>new Xu(e,en(t),en(r)),Qu=ju("toneMappingExposure","float");Ri("toneMapping",(e,t,r)=>Ku(t,r,e));const Yu=new WeakMap;function Zu(e,t){let r=Yu.get(e);return void 0===r&&(r=new b(e,t),Yu.set(e,r)),r}class Ju extends xi{static get type(){return"BufferAttributeNode"}constructor(e,t=null,r=0,s=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=r,this.bufferOffset=s,this.usage=f,this.instanced=!1,this.attribute=null,this.global=!0,e&&!0===e.isBufferAttribute&&e.itemSize<=4&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(0===this.bufferStride&&0===this.bufferOffset){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return null===this.bufferType&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(null!==this.attribute)return;const t=this.getNodeType(e),r=e.getTypeLength(t),s=this.value,i=this.bufferStride||r,n=this.bufferOffset;let a;a=!0===s.isInterleavedBuffer?s:!0===s.isBufferAttribute?Zu(s.array,i):Zu(s,i);const o=new y(a,r,n);a.setUsage(this.usage),this.attribute=o,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){const t=this.getNodeType(e),r=e.getBufferAttributeFromNode(this,t),s=e.getPropertyName(r);let i=null;if("vertex"===e.shaderStage||"compute"===e.shaderStage)this.name=s,i=s;else{i=Uu(this).build(e,t)}return i}getInputType(){return"bufferAttribute"}setUsage(e){return this.usage=e,this.attribute&&!0===this.attribute.isBufferAttribute&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}}function el(e,t=null,r=0,s=0,i=f,n=!1){return"mat3"===t||null===t&&9===e.itemSize?Ln(new Ju(e,"vec3",9,0).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,3).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,6).setUsage(i).setInstanced(n)):"mat4"===t||null===t&&16===e.itemSize?Pn(new Ju(e,"vec4",16,0).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,4).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,8).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,12).setUsage(i).setInstanced(n)):new Ju(e,t,r,s).setUsage(i)}const tl=(e,t=null,r=0,s=0)=>el(e,t,r,s),rl=(e,t=null,r=0,s=0)=>el(e,t,r,s,f,!0),sl=(e,t=null,r=0,s=0)=>el(e,t,r,s,x,!0);Ri("toAttribute",e=>tl(e.value));class il extends di{static get type(){return"ComputeNode"}constructor(e,t){super("void"),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name="",this.updateBeforeType=ti.OBJECT,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:"dispose"})}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){const t=this.computeNode.build(e);if(t){e.getNodeProperties(this).outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){const{shaderStage:r}=e;if("compute"===r){const t=this.computeNode.build(e,"void");""!==t&&e.addLineFlowCode(t,this)}else{const r=e.getNodeProperties(this).outputComputeNode;if(r)return r.build(e,t)}}}const nl=(e,t=[64])=>{(0===t.length||t.length>3)&&o("TSL: compute() workgroupSize must have 1, 2, or 3 elements",new Us);for(let e=0;enl(e,r).setCount(t);Ri("compute",al),Ri("computeKernel",nl);class ol extends di{static get type(){return"IsolateNode"}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isIsolateNode=!0}getNodeType(e){const t=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);const s=this.node.getNodeType(e);return e.setCache(t),s}build(e,...t){const r=e.getCache(),s=e.getCacheFromNode(this,this.parent);e.setCache(s);const i=this.node.build(e,...t);return e.setCache(r),i}setParent(e){return this.parent=e,this}getParent(){return this.parent}}const ul=e=>new ol(en(e));function ll(e,t=!0){return d('TSL: "cache()" has been deprecated. Use "isolate()" instead.'),ul(e).setParent(t)}Ri("cache",ll),Ri("isolate",ul);class dl extends di{static get type(){return"BypassNode"}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){const t=this.callNode.build(e,"void");return""!==t&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}const cl=nn(dl).setParameterLength(2);Ri("bypass",cl);class hl extends di{static get type(){return"RemapNode"}constructor(e,t,r,s=fn(0),i=fn(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=r,this.outLowNode=s,this.outHighNode=i,this.doClamp=!0}setup(){const{node:e,inLowNode:t,inHighNode:r,outLowNode:s,outHighNode:i,doClamp:n}=this;let a=e.sub(t).div(r.sub(t));return!0===n&&(a=a.clamp()),a.mul(i.sub(s)).add(s)}}const pl=nn(hl,null,null,{doClamp:!1}).setParameterLength(3,5),gl=nn(hl).setParameterLength(3,5);Ri("remap",pl),Ri("remapClamp",gl);class ml extends di{static get type(){return"ExpressionNode"}constructor(e="",t="void"){super(t),this.snippet=e}generate(e,t){const r=this.getNodeType(e),s=this.snippet;if("void"!==r)return e.format(s,r,t);e.addLineFlowCode(s,this)}}const fl=nn(ml).setParameterLength(1,2),yl=e=>(e?Tu(e,fl("discard")):fl("discard")).toStack();Ri("discard",yl);class bl extends pi{static get type(){return"RenderOutputNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this._toneMapping=t,this.outputColorSpace=r,this.isRenderOutputNode=!0}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup({context:e}){let t=this.colorNode||e.color;const r=(null!==this._toneMapping?this._toneMapping:e.toneMapping)||m,s=(null!==this.outputColorSpace?this.outputColorSpace:e.outputColorSpace)||T;return r!==m&&(t=t.toneMapping(r)),s!==T&&s!==p.workingColorSpace&&(t=t.workingToColorSpace(s)),t}}const xl=(e,t=null,r=null)=>new bl(en(e),t,r);Ri("renderOutput",xl);class Tl extends pi{static get type(){return"DebugNode"}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){const t=this.callback,r=this.node.build(e);if(null!==t)t(e,r);else{const t="--- TSL debug - "+e.shaderStage+" shader ---",s="-".repeat(t.length);let i="";i+="// #"+t+"#\n",i+=e.flow.code.replace(/^\t/gm,"")+"\n",i+="/* ... */ "+r+" /* ... */\n",i+="// #"+s+"#\n",_(i)}return r}}const _l=(e,t=null)=>new Tl(en(e),t).toStack();Ri("debug",_l);class vl{constructor(){this._renderer=null,this.currentFrame=null}get nodeFrame(){return this._renderer._nodes.nodeFrame}setRenderer(e){return this._renderer=e,this}getRenderer(){return this._renderer}init(){}begin(){}finish(){}inspect(){}computeAsync(){}beginCompute(){}finishCompute(){}beginRender(){}finishRender(){}copyTextureToTexture(){}copyFramebufferToTexture(){}}class Nl extends di{static get type(){return"InspectorNode"}constructor(e,t="",r=null){super(),this.node=e,this.name=t,this.callback=r,this.updateType=ti.FRAME,this.isInspectorNode=!0}getName(){return this.name||this.node.name}update(e){e.renderer.inspector.inspect(this)}getNodeType(e){return this.node.getNodeType(e)}setup(e){let t=this.node;return!0===e.context.inspector&&null!==this.callback&&(t=this.callback(t)),!0!==e.renderer.backend.isWebGPUBackend&&e.renderer.inspector.constructor!==vl&&v('TSL: ".toInspector()" is only available with WebGPU.'),t}}function Sl(e,t="",r=null){return(e=en(e)).before(new Nl(e,t,r))}Ri("toInspector",Sl);class Rl extends di{static get type(){return"AttributeNode"}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(null===t){const r=this.getAttributeName(e);if(e.hasGeometryAttribute(r)){const s=e.geometry.getAttribute(r);t=e.getTypeFromAttribute(s)}else t="float"}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){const t=this.getAttributeName(e),r=this.getNodeType(e);if(!0===e.hasGeometryAttribute(t)){const s=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(s),n=e.getAttribute(t,i);if("vertex"===e.shaderStage)return e.format(n.name,i,r);return Uu(this).build(e,r)}return d(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(r)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}}const El=(e,t=null)=>new Rl(e,t),Al=(e=0)=>El("uv"+(e>0?e:""),"vec2");class wl extends di{static get type(){return"TextureSizeNode"}constructor(e,t=null){super("uvec2"),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){const r=this.textureNode.build(e,"property"),s=null===this.levelNode?"0":this.levelNode.build(e,"int");return e.format(`${e.getMethod("textureDimensions")}( ${r}, ${s} )`,this.getNodeType(e),t)}}const Cl=nn(wl).setParameterLength(1,2);class Ml extends va{static get type(){return"MaxMipLevelNode"}constructor(e){super(0),this._textureNode=e,this.updateType=ti.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){const e=this.texture,t=e.images,r=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(r&&void 0!==r.width){const{width:e,height:t}=r;this.value=Math.log2(Math.max(e,t))}}}const Bl=nn(Ml).setParameterLength(1);class Fl extends Error{constructor(e,t=null){super(e),this.name="NodeError",this.stackTrace=t}}const Ll=new N;class Pl extends va{static get type(){return"TextureNode"}constructor(e=Ll,t=null,r=null,s=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=r,this.biasNode=s,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=ti.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this._flipYUniform=null,this.setUpdateMatrix(null===t)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return!0===this.value.isDepthTexture?"float":this.value.type===S?"uvec4":this.value.type===R?"ivec4":"vec4"}getInputType(){return"texture"}getDefaultUV(){return Al(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return null===this._matrixUniform&&(this._matrixUniform=Na(this.value.matrix)),this._matrixUniform.mul(Sn(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this}setupUV(e,t){return e.isFlipY()&&(null===this._flipYUniform&&(this._flipYUniform=Na(!1)),t=t.toVar(),t=this.sampler?this._flipYUniform.select(t.flipY(),t):this._flipYUniform.select(t.setY(yn(Cl(this,this.levelNode).y).sub(t.y).sub(1)),t)),t}setup(e){const t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;const r=this.value;if(!r||!0!==r.isTexture)throw new Fl("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().",this.stackTrace);const s=dn(()=>{let t=this.uvNode;return null!==t&&!0!==e.context.forceUVContext||!e.context.getUV||(t=e.context.getUV(this,e)),t||(t=this.getDefaultUV()),!0===this.updateMatrix&&(t=this.getTransformedUV(t)),t=this.setupUV(e,t),this.updateType=null!==this._matrixUniform||null!==this._flipYUniform?ti.OBJECT:ti.NONE,t})();let i=this.levelNode;null===i&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this));let n=null,a=null;if(null!==this.compareNode)if(e.renderer.hasCompatibility(E.TEXTURE_COMPARE))n=this.compareNode;else{const e=r.compareFunction;null===e||e===A||e===w||e===C||e===M?a=this.compareNode:(n=this.compareNode,v('TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.'))}t.uvNode=s,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=n,t.compareStepNode=a,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,!0===this.sampler?"vec2":"ivec2")}generateOffset(e,t){return t.build(e,"ivec2")}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;let d;return d=i?e.generateTextureBias(l,t,r,i,n,u):o?e.generateTextureGrad(l,t,r,o,n,u):a?e.generateTextureCompare(l,t,r,a,n,u):!1===this.sampler?e.generateTextureLoad(l,t,r,s,n,u):s?e.generateTextureLevel(l,t,r,s,n,u):e.generateTexture(l,t,r,n,u),d}generate(e,t){const r=this.value,s=e.getNodeProperties(this),i=super.generate(e,"property");if(/^sampler/.test(t))return i+"_sampler";if(e.isReference(t))return i;{const n=e.getDataFromNode(this),a=this.getNodeType(e);let o=n.propertyName;if(void 0===o){const{uvNode:t,levelNode:u,biasNode:l,compareNode:d,compareStepNode:c,depthNode:h,gradNode:p,offsetNode:g}=s,m=this.generateUV(e,t),f=u?u.build(e,"float"):null,y=l?l.build(e,"float"):null,b=h?h.build(e,"int"):null,x=d?d.build(e,"float"):null,T=c?c.build(e,"float"):null,_=p?[p[0].build(e,"vec2"),p[1].build(e,"vec2")]:null,v=g?this.generateOffset(e,g):null,N=e.getVarFromNode(this);o=e.getPropertyName(N);let S=this.generateSnippet(e,i,m,f,y,b,x,_,v);if(null!==T){const t=r.compareFunction;S=t===C||t===M?Xo(fl(S,a),fl(T,"float")).build(e,a):Xo(fl(T,"float"),fl(S,a)).build(e,a)}e.addLineFlowCode(`${o} = ${S}`,this),n.snippet=S,n.propertyName=o}let u=o;return e.needsToWorkingColorSpace(r)&&(u=zu(fl(u,a),r.colorSpace).setup(e).build(e,a)),e.format(u,a,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}sample(e){const t=this.clone();return t.uvNode=en(e),t.referenceNode=this.getBase(),en(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){const t=this.clone();t.biasNode=en(e).mul(Bl(t)),t.referenceNode=this.getBase();const r=t.value;return!1===t.generateMipmaps&&(r&&!1===r.generateMipmaps||r.minFilter===B||r.magFilter===B)&&(d("TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture."),t.biasNode=null),en(t)}level(e){const t=this.clone();return t.levelNode=en(e),t.referenceNode=this.getBase(),en(t)}size(e){return Cl(this,e)}bias(e){const t=this.clone();return t.biasNode=en(e),t.referenceNode=this.getBase(),en(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){const t=this.clone();return t.compareNode=en(e),t.referenceNode=this.getBase(),en(t)}grad(e,t){const r=this.clone();return r.gradNode=[en(e),en(t)],r.referenceNode=this.getBase(),en(r)}depth(e){const t=this.clone();return t.depthNode=en(e),t.referenceNode=this.getBase(),en(t)}offset(e){const t=this.clone();return t.offsetNode=en(e),t.referenceNode=this.getBase(),en(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){const e=this.value,t=this._matrixUniform;null!==t&&(t.value=e.matrix),!0===e.matrixAutoUpdate&&e.updateMatrix();const r=this._flipYUniform;null!==r&&(r.value=e.image instanceof ImageBitmap&&!0===e.flipY||!0===e.isRenderTargetTexture||!0===e.isFramebufferTexture||!0===e.isDepthTexture)}clone(){const e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}const Dl=nn(Pl).setParameterLength(1,4).setName("texture"),Ul=(e=Ll,t=null,r=null,s=null)=>{let i;return e&&!0===e.isTextureNode?(i=en(e.clone()),i.referenceNode=e.getBase(),null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Dl(e,t,r,s),i},Il=(...e)=>Ul(...e).setSampler(!1);class Ol extends va{static get type(){return"BufferNode"}constructor(e,t,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=r,this.updateRanges=[]}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}getElementType(e){return this.getNodeType(e)}getInputType(){return"buffer"}}const Vl=(e,t,r)=>new Ol(e,t,r);class kl extends ci{static get type(){return"UniformArrayElementNode"}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){const t=super.generate(e),r=this.getNodeType(),s=this.node.getPaddedType();return e.format(t,s,r)}}class Gl extends Ol{static get type(){return"UniformArrayNode"}constructor(e,t=null){super(null),this.array=e,this.elementType=null===t?Xs(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=ti.RENDER,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){const e=this.elementType;let t="vec4";return"mat2"===e?t="mat2":!0===/mat/.test(e)?t="mat4":"i"===e.charAt(0)?t="ivec4":"u"===e.charAt(0)&&(t="uvec4"),t}update(){const{array:e,value:t}=this,r=this.elementType;if("float"===r||"int"===r||"uint"===r)for(let r=0;rnew Gl(e,t);class zl extends di{constructor(e){super("float"),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}const Wl=nn(zl).setParameterLength(1);let Hl,ql;class jl extends di{static get type(){return"ScreenNode"}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===jl.DPR?"float":this.scope===jl.VIEWPORT?"vec4":"vec2"}getUpdateType(){let e=ti.NONE;return this.scope!==jl.SIZE&&this.scope!==jl.VIEWPORT&&this.scope!==jl.DPR||(e=ti.RENDER),this.updateType=e,e}update({renderer:e}){const t=e.getRenderTarget();this.scope===jl.VIEWPORT?null!==t?ql.copy(t.viewport):(e.getViewport(ql),ql.multiplyScalar(e.getPixelRatio())):this.scope===jl.DPR?this._output.value=e.getPixelRatio():null!==t?(Hl.width=t.width,Hl.height=t.height):e.getDrawingBufferSize(Hl)}setup(){const e=this.scope;let r=null;return r=e===jl.SIZE?Na(Hl||(Hl=new t)):e===jl.VIEWPORT?Na(ql||(ql=new s)):e===jl.DPR?Na(1):Tn(Yl.div(Ql)),this._output=r,r}generate(e){if(this.scope===jl.COORDINATE){let t=e.getFragCoord();if(e.isFlipY()){const r=e.getNodeProperties(Ql).outputNode.build(e);t=`${e.getType("vec2")}( ${t}.x, ${r}.y - ${t}.y )`}return t}return super.generate(e)}}jl.COORDINATE="coordinate",jl.VIEWPORT="viewport",jl.SIZE="size",jl.UV="uv",jl.DPR="dpr";const Xl=an(jl,jl.DPR),Kl=an(jl,jl.UV),Ql=an(jl,jl.SIZE),Yl=an(jl,jl.COORDINATE),Zl=an(jl,jl.VIEWPORT),Jl=Zl.zw,ed=Yl.sub(Zl.xy),td=ed.div(Jl),rd=dn(()=>(d('TSL: "viewportResolution" is deprecated. Use "screenSize" instead.',new Us),Ql),"vec2").once()();let sd=null,id=null,nd=null,ad=null,od=null,ud=null,ld=null,dd=null,cd=null,hd=null,pd=null,gd=null,md=null,fd=null;const yd=Na(0,"uint").setName("u_cameraIndex").setGroup(ba("cameraIndex")).toVarying("v_cameraIndex"),bd=Na("float").setName("cameraNear").setGroup(Ta).onRenderUpdate(({camera:e})=>e.near),xd=Na("float").setName("cameraFar").setGroup(Ta).onRenderUpdate(({camera:e})=>e.far),Td=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrix);null===id?id=$l(r).setGroup(Ta).setName("cameraProjectionMatrices"):id.array=r,t=id.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrix")}else null===sd&&(sd=Na(e.projectionMatrix).setName("cameraProjectionMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrix)),t=sd;return t}).once()(),_d=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrixInverse);null===ad?ad=$l(r).setGroup(Ta).setName("cameraProjectionMatricesInverse"):ad.array=r,t=ad.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrixInverse")}else null===nd&&(nd=Na(e.projectionMatrixInverse).setName("cameraProjectionMatrixInverse").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse)),t=nd;return t}).once()(),vd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorldInverse);null===ud?ud=$l(r).setGroup(Ta).setName("cameraViewMatrices"):ud.array=r,t=ud.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraViewMatrix")}else null===od&&(od=Na(e.matrixWorldInverse).setName("cameraViewMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorldInverse)),t=od;return t}).once()(),Nd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorld);null===dd?dd=$l(r).setGroup(Ta).setName("cameraWorldMatrices"):dd.array=r,t=dd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraWorldMatrix")}else null===ld&&(ld=Na(e.matrixWorld).setName("cameraWorldMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorld)),t=ld;return t}).once()(),Sd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.normalMatrix);null===hd?hd=$l(r).setGroup(Ta).setName("cameraNormalMatrices"):hd.array=r,t=hd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraNormalMatrix")}else null===cd&&(cd=Na(e.normalMatrix).setName("cameraNormalMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.normalMatrix)),t=cd;return t}).once()(),Rd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const s=[];for(let t=0,i=e.cameras.length;t{const r=e.cameras,s=t.array;for(let e=0,t=r.length;et.value.setFromMatrixPosition(e.matrixWorld))),t=pd;return t}).once()(),Ed=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.viewport);null===fd?fd=$l(r,"vec4").setGroup(Ta).setName("cameraViewports"):fd.array=r,t=fd.element(yd).toConst("cameraViewport")}else null===md&&(md=wn(0,0,Ql.x,Ql.y).toConst("cameraViewport")),t=md;return t}).once()(),Ad=new F;class wd extends di{static get type(){return"Object3DNode"}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=ti.OBJECT,this.uniformNode=new va(null)}getNodeType(){const e=this.scope;return e===wd.WORLD_MATRIX?"mat4":e===wd.POSITION||e===wd.VIEW_POSITION||e===wd.DIRECTION||e===wd.SCALE?"vec3":e===wd.RADIUS?"float":void 0}update(e){const t=this.object3d,s=this.uniformNode,i=this.scope;if(i===wd.WORLD_MATRIX)s.value=t.matrixWorld;else if(i===wd.POSITION)s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld);else if(i===wd.SCALE)s.value=s.value||new r,s.value.setFromMatrixScale(t.matrixWorld);else if(i===wd.DIRECTION)s.value=s.value||new r,t.getWorldDirection(s.value);else if(i===wd.VIEW_POSITION){const i=e.camera;s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld),s.value.applyMatrix4(i.matrixWorldInverse)}else if(i===wd.RADIUS){const r=e.object.geometry;null===r.boundingSphere&&r.computeBoundingSphere(),Ad.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),s.value=Ad.radius}}generate(e){const t=this.scope;return t===wd.WORLD_MATRIX?this.uniformNode.nodeType="mat4":t===wd.POSITION||t===wd.VIEW_POSITION||t===wd.DIRECTION||t===wd.SCALE?this.uniformNode.nodeType="vec3":t===wd.RADIUS&&(this.uniformNode.nodeType="float"),this.uniformNode.build(e)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}}wd.WORLD_MATRIX="worldMatrix",wd.POSITION="position",wd.SCALE="scale",wd.VIEW_POSITION="viewPosition",wd.DIRECTION="direction",wd.RADIUS="radius";const Cd=nn(wd,wd.DIRECTION).setParameterLength(1),Md=nn(wd,wd.WORLD_MATRIX).setParameterLength(1),Bd=nn(wd,wd.POSITION).setParameterLength(1),Fd=nn(wd,wd.SCALE).setParameterLength(1),Ld=nn(wd,wd.VIEW_POSITION).setParameterLength(1),Pd=nn(wd,wd.RADIUS).setParameterLength(1);class Dd extends wd{static get type(){return"ModelNode"}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}}const Ud=an(Dd,Dd.DIRECTION),Id=an(Dd,Dd.WORLD_MATRIX),Od=an(Dd,Dd.POSITION),Vd=an(Dd,Dd.SCALE),kd=an(Dd,Dd.VIEW_POSITION),Gd=an(Dd,Dd.RADIUS),$d=Na(new n).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),zd=Na(new a).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),Wd=dn(e=>e.context.modelViewMatrix||Hd).once()().toVar("modelViewMatrix"),Hd=vd.mul(Id),qd=dn(e=>(e.context.isHighPrecisionModelViewMatrix=!0,Na("mat4").onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar("highpModelViewMatrix"),jd=dn(e=>{const t=e.context.isHighPrecisionModelViewMatrix;return Na("mat3").onObjectUpdate(({object:e,camera:r})=>(!0!==t&&e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar("highpModelNormalViewMatrix"),Xd=dn(e=>"fragment"!==e.shaderStage?(v("TSL: `clipSpace` is only available in fragment stage."),wn()):e.context.clipSpace.toVarying("v_clipSpace")).once()(),Kd=El("position","vec3"),Qd=Kd.toVarying("positionLocal"),Yd=Kd.toVarying("positionPrevious"),Zd=dn(e=>Id.mul(Qd).xyz.toVarying(e.getSubBuildProperty("v_positionWorld")),"vec3").once(["POSITION"])(),Jd=dn(()=>Qd.transformDirection(Id).toVarying("v_positionWorldDirection").normalize().toVar("positionWorldDirection"),"vec3").once(["POSITION"])(),ec=dn(e=>{if("fragment"===e.shaderStage&&e.material.vertexNode){const e=_d.mul(Xd);return e.xyz.div(e.w).toVar("positionView")}return e.context.setupPositionView().toVarying("v_positionView")},"vec3").once(["POSITION","VERTEX"])(),tc=dn(e=>{let t;return t=e.camera.isOrthographicCamera?Sn(0,0,1):ec.negate().toVarying("v_positionViewDirection").normalize(),t.toVar("positionViewDirection")},"vec3").once(["POSITION"])();class rc extends di{static get type(){return"FrontFacingNode"}constructor(){super("bool"),this.isFrontFacingNode=!0}generate(e){if("fragment"!==e.shaderStage)return"true";const{material:t}=e;return t.side===L?"false":e.getFrontFacing()}}const sc=an(rc),ic=fn(sc).mul(2).sub(1),nc=dn(([e],{material:t})=>{const r=t.side;return r===L?e=e.mul(-1):r===P&&(e=e.mul(ic)),e}),ac=El("normal","vec3"),oc=dn(e=>!1===e.geometry.hasAttribute("normal")?(d('TSL: Vertex attribute "normal" not found on geometry.'),Sn(0,1,0)):ac,"vec3").once()().toVar("normalLocal"),uc=ec.dFdx().cross(ec.dFdy()).normalize().toVar("normalFlat"),lc=dn(e=>{let t;return t=e.isFlatShading()?uc:mc(oc).toVarying("v_normalViewGeometry").normalize(),t},"vec3").once()().toVar("normalViewGeometry"),dc=dn(e=>{let t=lc.transformDirection(vd);return!0!==e.isFlatShading()&&(t=t.toVarying("v_normalWorldGeometry")),t.normalize().toVar("normalWorldGeometry")},"vec3").once()(),cc=dn(e=>{let t;return"NORMAL"===e.subBuildFn||"VERTEX"===e.subBuildFn?(t=lc,!0!==e.isFlatShading()&&(t=nc(t))):t=e.context.setupNormal().context({getUV:null,getTextureLevel:null}),t},"vec3").once(["NORMAL","VERTEX"])().toVar("normalView"),hc=cc.transformDirection(vd).toVar("normalWorld"),pc=dn(({subBuildFn:e,context:t})=>{let r;return r="NORMAL"===e||"VERTEX"===e?cc:t.setupClearcoatNormal().context({getUV:null,getTextureLevel:null}),r},"vec3").once(["NORMAL","VERTEX"])().toVar("clearcoatNormalView"),gc=dn(([e,t=Id])=>{const r=Ln(t),s=e.div(Sn(r[0].dot(r[0]),r[1].dot(r[1]),r[2].dot(r[2])));return r.mul(s).xyz}),mc=dn(([e],t)=>{const r=t.context.modelNormalViewMatrix;if(r)return r.transformDirection(e);const s=$d.mul(e);return vd.transformDirection(s)}),fc=dn(()=>(d('TSL: "transformedNormalView" is deprecated. Use "normalView" instead.'),cc)).once(["NORMAL","VERTEX"])(),yc=dn(()=>(d('TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.'),hc)).once(["NORMAL","VERTEX"])(),bc=dn(()=>(d('TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.'),pc)).once(["NORMAL","VERTEX"])(),xc=new D,Tc=new a,_c=Na(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),vc=Na(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),Nc=Na(new a).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){const r=null!==t.environment&&null===e.envMap?t.environmentRotation:e.envMapRotation;return r?(xc.copy(r),Tc.makeRotationFromEuler(xc)):Tc.identity(),Tc}),Sc=tc.negate().reflect(cc),Rc=tc.negate().refract(cc,_c),Ec=Sc.transformDirection(vd).toVar("reflectVector"),Ac=Rc.transformDirection(vd).toVar("reflectVector"),wc=new U;class Cc extends Pl{static get type(){return"CubeTextureNode"}constructor(e,t=null,r=null,s=null){super(e,t,r,s),this.isCubeTextureNode=!0}getInputType(){return!0===this.value.isDepthTexture?"cubeDepthTexture":"cubeTexture"}getDefaultUV(){const e=this.value;return e.mapping===I?Ec:e.mapping===O?Ac:(o('CubeTextureNode: Mapping "%s" not supported.',e.mapping),Sn(0,0,0))}setUpdateMatrix(){}setupUV(e,t){const r=this.value;return!0===r.isDepthTexture?e.renderer.coordinateSystem===h?Sn(t.x,t.y.negate(),t.z):t:(e.renderer.coordinateSystem!==h&&r.isRenderTargetTexture||(t=Sn(t.x.negate(),t.yz)),Nc.mul(t))}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}}const Mc=nn(Cc).setParameterLength(1,4).setName("cubeTexture"),Bc=(e=wc,t=null,r=null,s=null)=>{let i;return e&&!0===e.isCubeTextureNode?(i=en(e.clone()),i.referenceNode=e,null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Mc(e,t,r,s),i};class Fc extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}}class Lc extends di{static get type(){return"ReferenceNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.name=null,this.updateType=ti.OBJECT}element(e){return new Fc(this,en(e))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setNodeType(e){let t=null;t=null!==this.count?Vl(null,e,this.count):Array.isArray(this.getValueFromReference())?$l(null,e):"texture"===e?Ul(null):"cubeTexture"===e?Bc(null):Na(null,e),null!==this.group&&t.setGroup(this.group),null!==this.name&&t.setName(this.name),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew Lc(e,t,r),Dc=(e,t,r,s)=>new Lc(e,t,s,r);class Uc extends Lc{static get type(){return"MaterialReferenceNode"}constructor(e,t,r=null){super(e,t,r),this.material=r,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=null!==this.material?this.material:e.material,this.reference}}const Ic=(e,t,r=null)=>new Uc(e,t,r),Oc=Al(),Vc=ec.dFdx(),kc=ec.dFdy(),Gc=Oc.dFdx(),$c=Oc.dFdy(),zc=cc,Wc=kc.cross(zc),Hc=zc.cross(Vc),qc=Wc.mul(Gc.x).add(Hc.mul($c.x)),jc=Wc.mul(Gc.y).add(Hc.mul($c.y)),Xc=qc.dot(qc).max(jc.dot(jc)),Kc=Xc.equal(0).select(0,Xc.inverseSqrt()),Qc=qc.mul(Kc).toVar("tangentViewFrame"),Yc=jc.mul(Kc).toVar("bitangentViewFrame"),Zc=El("tangent","vec4"),Jc=Zc.xyz.toVar("tangentLocal"),eh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?Wd.mul(wn(Jc,0)).xyz.toVarying("v_tangentView").normalize():Qc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("tangentView"),th=eh.transformDirection(vd).toVarying("v_tangentWorld").normalize().toVar("tangentWorld"),rh=dn(([e,t],r)=>{let s=e.mul(Zc.w).xyz;return"NORMAL"===r.subBuildFn&&!0!==r.isFlatShading()&&(s=s.toVarying(t)),s}).once(["NORMAL"]),sh=rh(ac.cross(Zc),"v_bitangentGeometry").normalize().toVar("bitangentGeometry"),ih=rh(oc.cross(Jc),"v_bitangentLocal").normalize().toVar("bitangentLocal"),nh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?rh(cc.cross(eh),"v_bitangentView").normalize():Yc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("bitangentView"),ah=rh(hc.cross(th),"v_bitangentWorld").normalize().toVar("bitangentWorld"),oh=Ln(eh,nh,cc).toVar("TBNViewMatrix"),uh=tc.mul(oh),lh=dn(()=>{let e=ta.cross(tc);return e=e.cross(ta).normalize(),e=ou(e,cc,Jn.mul(zn.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()(),dh=e=>en(e).mul(.5).add(.5),ch=e=>Sn(e,To(lu(fn(1).sub(Zo(e,e)))));class hh extends pi{static get type(){return"NormalMapNode"}constructor(e,t=null){super("vec3"),this.node=e,this.scaleNode=t,this.normalMapType=V,this.unpackNormalMode=k}setup(e){const{normalMapType:t,scaleNode:r,unpackNormalMode:s}=this;let i=this.node.mul(2).sub(1);if(t===V?s===G?i=ch(i.xy):s===$?i=ch(i.yw):s!==k&&console.error(`THREE.NodeMaterial: Unexpected unpack normal mode: ${s}`):s!==k&&console.error(`THREE.NodeMaterial: Normal map type '${t}' is not compatible with unpack normal mode '${s}'`),null!==r){let t=r;!0===e.isFlatShading()&&(t=nc(t)),i=Sn(i.xy.mul(t),i.z)}let n=null;return t===z?n=mc(i):t===V?n=oh.mul(i).normalize():(o(`NodeMaterial: Unsupported normal map type: ${t}`),n=cc),n}}const ph=nn(hh).setParameterLength(1,2),gh=dn(({textureNode:e,bumpScale:t})=>{const r=t=>e.isolate().context({getUV:e=>t(e.uvNode||Al()),forceUVContext:!0}),s=fn(r(e=>e));return Tn(fn(r(e=>e.add(e.dFdx()))).sub(s),fn(r(e=>e.add(e.dFdy()))).sub(s)).mul(t)}),mh=dn(e=>{const{surf_pos:t,surf_norm:r,dHdxy:s}=e,i=t.dFdx().normalize(),n=r,a=t.dFdy().normalize().cross(n),o=n.cross(i),u=i.dot(a).mul(ic),l=u.sign().mul(s.x.mul(a).add(s.y.mul(o)));return u.abs().mul(r).sub(l).normalize()});class fh extends pi{static get type(){return"BumpMapNode"}constructor(e,t=null){super("vec3"),this.textureNode=e,this.scaleNode=t}setup(){const e=null!==this.scaleNode?this.scaleNode:1,t=gh({textureNode:this.textureNode,bumpScale:e});return mh({surf_pos:ec,surf_norm:cc,dHdxy:t})}}const yh=nn(fh).setParameterLength(1,2),bh=new Map;class xh extends di{static get type(){return"MaterialNode"}constructor(e){super(),this.scope=e}getCache(e,t){let r=bh.get(e);return void 0===r&&(r=Ic(e,t),bh.set(e,r)),r}getFloat(e){return this.getCache(e,"float")}getColor(e){return this.getCache(e,"color")}getTexture(e){return this.getCache("map"===e?"map":e+"Map","texture")}setup(e){const t=e.context.material,r=this.scope;let s=null;if(r===xh.COLOR){const e=void 0!==t.color?this.getColor(r):Sn();s=t.map&&!0===t.map.isTexture?e.mul(this.getTexture("map")):e}else if(r===xh.OPACITY){const e=this.getFloat(r);s=t.alphaMap&&!0===t.alphaMap.isTexture?e.mul(this.getTexture("alpha")):e}else if(r===xh.SPECULAR_STRENGTH)s=t.specularMap&&!0===t.specularMap.isTexture?this.getTexture("specular").r:fn(1);else if(r===xh.SPECULAR_INTENSITY){const e=this.getFloat(r);s=t.specularIntensityMap&&!0===t.specularIntensityMap.isTexture?e.mul(this.getTexture(r).a):e}else if(r===xh.SPECULAR_COLOR){const e=this.getColor(r);s=t.specularColorMap&&!0===t.specularColorMap.isTexture?e.mul(this.getTexture(r).rgb):e}else if(r===xh.ROUGHNESS){const e=this.getFloat(r);s=t.roughnessMap&&!0===t.roughnessMap.isTexture?e.mul(this.getTexture(r).g):e}else if(r===xh.METALNESS){const e=this.getFloat(r);s=t.metalnessMap&&!0===t.metalnessMap.isTexture?e.mul(this.getTexture(r).b):e}else if(r===xh.EMISSIVE){const e=this.getFloat("emissiveIntensity"),i=this.getColor(r).mul(e);s=t.emissiveMap&&!0===t.emissiveMap.isTexture?i.mul(this.getTexture(r)):i}else if(r===xh.NORMAL)t.normalMap?(s=ph(this.getTexture("normal"),this.getCache("normalScale","vec2")),s.normalMapType=t.normalMapType,t.normalMap.format!=W&&t.normalMap.format!=H&&t.normalMap.format!=q||(s.unpackNormalMode=G)):s=t.bumpMap?yh(this.getTexture("bump").r,this.getFloat("bumpScale")):cc;else if(r===xh.CLEARCOAT){const e=this.getFloat(r);s=t.clearcoatMap&&!0===t.clearcoatMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_ROUGHNESS){const e=this.getFloat(r);s=t.clearcoatRoughnessMap&&!0===t.clearcoatRoughnessMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_NORMAL)s=t.clearcoatNormalMap?ph(this.getTexture(r),this.getCache(r+"Scale","vec2")):cc;else if(r===xh.SHEEN){const e=this.getColor("sheenColor").mul(this.getFloat("sheen"));s=t.sheenColorMap&&!0===t.sheenColorMap.isTexture?e.mul(this.getTexture("sheenColor").rgb):e}else if(r===xh.SHEEN_ROUGHNESS){const e=this.getFloat(r);s=t.sheenRoughnessMap&&!0===t.sheenRoughnessMap.isTexture?e.mul(this.getTexture(r).a):e,s=s.clamp(1e-4,1)}else if(r===xh.ANISOTROPY)if(t.anisotropyMap&&!0===t.anisotropyMap.isTexture){const e=this.getTexture(r);s=Fn(sp.x,sp.y,sp.y.negate(),sp.x).mul(e.rg.mul(2).sub(Tn(1)).normalize().mul(e.b))}else s=sp;else if(r===xh.IRIDESCENCE_THICKNESS){const e=Pc("1","float",t.iridescenceThicknessRange);if(t.iridescenceThicknessMap){const i=Pc("0","float",t.iridescenceThicknessRange);s=e.sub(i).mul(this.getTexture(r).g).add(i)}else s=e}else if(r===xh.TRANSMISSION){const e=this.getFloat(r);s=t.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===xh.THICKNESS){const e=this.getFloat(r);s=t.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===xh.IOR)s=this.getFloat(r);else if(r===xh.LIGHT_MAP)s=this.getTexture(r).rgb.mul(this.getFloat("lightMapIntensity"));else if(r===xh.AO)s=this.getTexture(r).r.sub(1).mul(this.getFloat("aoMapIntensity")).add(1);else if(r===xh.LINE_DASH_OFFSET)s=t.dashOffset?this.getFloat(r):fn(0);else{const t=this.getNodeType(e);s=this.getCache(r,t)}return s}}xh.ALPHA_TEST="alphaTest",xh.COLOR="color",xh.OPACITY="opacity",xh.SHININESS="shininess",xh.SPECULAR="specular",xh.SPECULAR_STRENGTH="specularStrength",xh.SPECULAR_INTENSITY="specularIntensity",xh.SPECULAR_COLOR="specularColor",xh.REFLECTIVITY="reflectivity",xh.ROUGHNESS="roughness",xh.METALNESS="metalness",xh.NORMAL="normal",xh.CLEARCOAT="clearcoat",xh.CLEARCOAT_ROUGHNESS="clearcoatRoughness",xh.CLEARCOAT_NORMAL="clearcoatNormal",xh.EMISSIVE="emissive",xh.ROTATION="rotation",xh.SHEEN="sheen",xh.SHEEN_ROUGHNESS="sheenRoughness",xh.ANISOTROPY="anisotropy",xh.IRIDESCENCE="iridescence",xh.IRIDESCENCE_IOR="iridescenceIOR",xh.IRIDESCENCE_THICKNESS="iridescenceThickness",xh.IOR="ior",xh.TRANSMISSION="transmission",xh.THICKNESS="thickness",xh.ATTENUATION_DISTANCE="attenuationDistance",xh.ATTENUATION_COLOR="attenuationColor",xh.LINE_SCALE="scale",xh.LINE_DASH_SIZE="dashSize",xh.LINE_GAP_SIZE="gapSize",xh.LINE_WIDTH="linewidth",xh.LINE_DASH_OFFSET="dashOffset",xh.POINT_SIZE="size",xh.DISPERSION="dispersion",xh.LIGHT_MAP="light",xh.AO="ao";const Th=an(xh,xh.ALPHA_TEST),_h=an(xh,xh.COLOR),vh=an(xh,xh.SHININESS),Nh=an(xh,xh.EMISSIVE),Sh=an(xh,xh.OPACITY),Rh=an(xh,xh.SPECULAR),Eh=an(xh,xh.SPECULAR_INTENSITY),Ah=an(xh,xh.SPECULAR_COLOR),wh=an(xh,xh.SPECULAR_STRENGTH),Ch=an(xh,xh.REFLECTIVITY),Mh=an(xh,xh.ROUGHNESS),Bh=an(xh,xh.METALNESS),Fh=an(xh,xh.NORMAL),Lh=an(xh,xh.CLEARCOAT),Ph=an(xh,xh.CLEARCOAT_ROUGHNESS),Dh=an(xh,xh.CLEARCOAT_NORMAL),Uh=an(xh,xh.ROTATION),Ih=an(xh,xh.SHEEN),Oh=an(xh,xh.SHEEN_ROUGHNESS),Vh=an(xh,xh.ANISOTROPY),kh=an(xh,xh.IRIDESCENCE),Gh=an(xh,xh.IRIDESCENCE_IOR),$h=an(xh,xh.IRIDESCENCE_THICKNESS),zh=an(xh,xh.TRANSMISSION),Wh=an(xh,xh.THICKNESS),Hh=an(xh,xh.IOR),qh=an(xh,xh.ATTENUATION_DISTANCE),jh=an(xh,xh.ATTENUATION_COLOR),Xh=an(xh,xh.LINE_SCALE),Kh=an(xh,xh.LINE_DASH_SIZE),Qh=an(xh,xh.LINE_GAP_SIZE),Yh=an(xh,xh.LINE_WIDTH),Zh=an(xh,xh.LINE_DASH_OFFSET),Jh=an(xh,xh.POINT_SIZE),ep=an(xh,xh.DISPERSION),tp=an(xh,xh.LIGHT_MAP),rp=an(xh,xh.AO),sp=Na(new t).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),ip=dn(e=>e.context.setupModelViewProjection(),"vec4").once()().toVarying("v_modelViewProjection");class np extends ci{static get type(){return"StorageArrayElementNode"}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}getMemberType(e,t){const r=this.storageBufferNode.structTypeNode;return r?r.getMemberType(e,t):"void"}setup(e){return!1===e.isAvailable("storageBuffer")&&!0===this.node.isPBO&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let r;const s=e.context.assign;if(r=!1===e.isAvailable("storageBuffer")?!0!==this.node.isPBO||!0===s||!this.node.value.isInstancedBufferAttribute&&"compute"===e.shaderStage?this.node.build(e):e.generatePBO(this):super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}const ap=nn(np).setParameterLength(2);class op extends Ol{static get type(){return"StorageBufferNode"}constructor(e,t=null,r=0){let s,i=null;t&&t.isStruct?(s="struct",i=t.layout,(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)&&(r=e.count)):null===t&&(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)?(s=zs(e.itemSize),r=e.count):s=t,super(e,s,r),this.isStorageBufferNode=!0,this.structTypeNode=i,this.access=si.READ_WRITE,this.isAtomic=!1,this.isPBO=!1,this._attribute=null,this._varying=null,this.global=!0,!0!==e.isStorageBufferAttribute&&!0!==e.isStorageInstancedBufferAttribute&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(0===this.bufferCount){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return this.value.isIndirectStorageBufferAttribute?"indirectStorageBuffer":"storageBuffer"}element(e){return ap(this,e)}setPBO(e){return this.isPBO=e,this}getPBO(){return this.isPBO}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess(si.READ_ONLY)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}getAttributeData(){return null===this._attribute&&(this._attribute=tl(this.value),this._varying=Uu(this._attribute)),{attribute:this._attribute,varying:this._varying}}getNodeType(e){if(null!==this.structTypeNode)return this.structTypeNode.getNodeType(e);if(e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.getNodeType(e);const{attribute:t}=this.getAttributeData();return t.getNodeType(e)}getMemberType(e,t){return null!==this.structTypeNode?this.structTypeNode.getMemberType(e,t):"void"}generate(e){if(null!==this.structTypeNode&&this.structTypeNode.build(e),e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.generate(e);const{attribute:t,varying:r}=this.getAttributeData(),s=r.build(e);return e.registerTransform(s,t),s}}const up=(e,t=null,r=0)=>new op(e,t,r);class lp extends di{static get type(){return"IndexNode"}constructor(e){super("uint"),this.scope=e,this.isIndexNode=!0}generate(e){const t=this.getNodeType(e),r=this.scope;let s,i;if(r===lp.VERTEX)s=e.getVertexIndex();else if(r===lp.INSTANCE)s=e.getInstanceIndex();else if(r===lp.DRAW)s=e.getDrawIndex();else if(r===lp.INVOCATION_LOCAL)s=e.getInvocationLocalIndex();else if(r===lp.INVOCATION_SUBGROUP)s=e.getInvocationSubgroupIndex();else{if(r!==lp.SUBGROUP)throw new Error("THREE.IndexNode: Unknown scope: "+r);s=e.getSubgroupIndex()}if("vertex"===e.shaderStage||"compute"===e.shaderStage)i=s;else{i=Uu(this).build(e,t)}return i}}lp.VERTEX="vertex",lp.INSTANCE="instance",lp.SUBGROUP="subgroup",lp.INVOCATION_LOCAL="invocationLocal",lp.INVOCATION_SUBGROUP="invocationSubgroup",lp.DRAW="draw";const dp=an(lp,lp.VERTEX),cp=an(lp,lp.INSTANCE),hp=an(lp,lp.SUBGROUP),pp=an(lp,lp.INVOCATION_SUBGROUP),gp=an(lp,lp.INVOCATION_LOCAL),mp=an(lp,lp.DRAW);class fp extends di{static get type(){return"InstanceNode"}constructor(e,t,r=null){super("void"),this.count=e,this.instanceMatrix=t,this.instanceColor=r,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=ti.FRAME,this.buffer=null,this.bufferColor=null,this.previousInstanceMatrixNode=null}get isStorageMatrix(){const{instanceMatrix:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}get isStorageColor(){const{instanceColor:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}setup(e){let{instanceMatrixNode:t,instanceColorNode:r}=this;null===t&&(t=this._createInstanceMatrixNode(!0,e),this.instanceMatrixNode=t);const{instanceColor:s,isStorageColor:i}=this;if(s&&null===r){if(i)r=up(s,"vec3",Math.max(s.count,1)).element(cp);else{const e=new j(s.array,3),t=s.usage===x?sl:rl;this.bufferColor=e,r=Sn(t(e,"vec3",3,0))}this.instanceColorNode=r}const n=t.mul(Qd).xyz;if(Qd.assign(n),e.needsPreviousData()&&Yd.assign(this.getPreviousInstancedPosition(e)),e.hasGeometryAttribute("normal")){const e=gc(oc,t);oc.assign(e)}null!==this.instanceColorNode&&Vn("vec3","vInstanceColor").assign(this.instanceColorNode)}update(e){null!==this.buffer&&!0!==this.isStorageMatrix&&(this.buffer.clearUpdateRanges(),this.buffer.updateRanges.push(...this.instanceMatrix.updateRanges),this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version)),this.instanceColor&&null!==this.bufferColor&&!0!==this.isStorageColor&&(this.bufferColor.clearUpdateRanges(),this.bufferColor.updateRanges.push(...this.instanceColor.updateRanges),this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)),null!==this.previousInstanceMatrixNode&&e.object.previousInstanceMatrix.array.set(this.instanceMatrix.array)}getPreviousInstancedPosition(e){const t=e.object;return null===this.previousInstanceMatrixNode&&(t.previousInstanceMatrix=this.instanceMatrix.clone(),this.previousInstanceMatrixNode=this._createInstanceMatrixNode(!1,e)),this.previousInstanceMatrixNode.mul(Yd).xyz}_createInstanceMatrixNode(e,t){let r;const{instanceMatrix:s}=this,{count:i}=s;if(this.isStorageMatrix)r=up(s,"mat4",Math.max(i,1)).element(cp);else{if(16*i*4<=t.getUniformBufferLimit())r=Vl(s.array,"mat4",Math.max(i,1)).element(cp);else{const t=new X(s.array,16,1);!0===e&&(this.buffer=t);const i=s.usage===x?sl:rl,n=[i(t,"vec4",16,0),i(t,"vec4",16,4),i(t,"vec4",16,8),i(t,"vec4",16,12)];r=Pn(...n)}}return r}}const yp=nn(fp).setParameterLength(2,3);class bp extends fp{static get type(){return"InstancedMeshNode"}constructor(e){const{count:t,instanceMatrix:r,instanceColor:s}=e;super(t,r,s),this.instancedMesh=e}}const xp=nn(bp).setParameterLength(1);class Tp extends di{static get type(){return"BatchNode"}constructor(e){super("void"),this.batchMesh=e,this.batchingIdNode=null}setup(e){null===this.batchingIdNode&&(null===e.getDrawIndex()?this.batchingIdNode=cp:this.batchingIdNode=mp);const t=dn(([e])=>{const t=yn(Cl(Il(this.batchMesh._indirectTexture),0).x).toConst(),r=yn(e).mod(t).toConst(),s=yn(e).div(t).toConst();return Il(this.batchMesh._indirectTexture,_n(r,s)).x}).setLayout({name:"getIndirectIndex",type:"uint",inputs:[{name:"id",type:"int"}]}),r=t(yn(this.batchingIdNode)),s=this.batchMesh._matricesTexture,i=yn(Cl(Il(s),0).x).toConst(),n=fn(r).mul(4).toInt().toConst(),a=n.mod(i).toConst(),o=n.div(i).toConst(),u=Pn(Il(s,_n(a,o)),Il(s,_n(a.add(1),o)),Il(s,_n(a.add(2),o)),Il(s,_n(a.add(3),o))),l=this.batchMesh._colorsTexture;if(null!==l){const e=dn(([e])=>{const t=yn(Cl(Il(l),0).x).toConst(),r=e,s=r.mod(t).toConst(),i=r.div(t).toConst();return Il(l,_n(s,i)).rgb}).setLayout({name:"getBatchingColor",type:"vec3",inputs:[{name:"id",type:"int"}]}),t=e(r);Vn("vec3","vBatchColor").assign(t)}const d=Ln(u);Qd.assign(u.mul(Qd));const c=oc.div(Sn(d[0].dot(d[0]),d[1].dot(d[1]),d[2].dot(d[2]))),h=d.mul(c).xyz;oc.assign(h),e.hasGeometryAttribute("tangent")&&Jc.mulAssign(d)}}const _p=nn(Tp).setParameterLength(1),vp=new WeakMap;class Np extends di{static get type(){return"SkinningNode"}constructor(e){super("void"),this.skinnedMesh=e,this.updateType=ti.OBJECT,this.skinIndexNode=El("skinIndex","uvec4"),this.skinWeightNode=El("skinWeight","vec4"),this.bindMatrixNode=Pc("bindMatrix","mat4"),this.bindMatrixInverseNode=Pc("bindMatrixInverse","mat4"),this.boneMatricesNode=Dc("skeleton.boneMatrices","mat4",e.skeleton.bones.length),this.positionNode=Qd,this.toPositionNode=Qd,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){const{skinIndexNode:r,skinWeightNode:s,bindMatrixNode:i,bindMatrixInverseNode:n}=this,a=e.element(r.x),o=e.element(r.y),u=e.element(r.z),l=e.element(r.w),d=i.mul(t),c=Fa(a.mul(s.x).mul(d),o.mul(s.y).mul(d),u.mul(s.z).mul(d),l.mul(s.w).mul(d));return n.mul(c).xyz}getSkinnedNormalAndTangent(e=this.boneMatricesNode,t=oc,r=Jc){const{skinIndexNode:s,skinWeightNode:i,bindMatrixNode:n,bindMatrixInverseNode:a}=this,o=e.element(s.x),u=e.element(s.y),l=e.element(s.z),d=e.element(s.w);let c=Fa(i.x.mul(o),i.y.mul(u),i.z.mul(l),i.w.mul(d));c=a.mul(c).mul(n);return{skinNormal:c.transformDirection(t).xyz,skinTangent:c.transformDirection(r).xyz}}getPreviousSkinnedPosition(e){const t=e.object;return null===this.previousBoneMatricesNode&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=Dc("skeleton.previousBoneMatrices","mat4",t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Yd)}setup(e){e.needsPreviousData()&&Yd.assign(this.getPreviousSkinnedPosition(e));const t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute("normal")){const{skinNormal:t,skinTangent:r}=this.getSkinnedNormalAndTangent();oc.assign(t),e.hasGeometryAttribute("tangent")&&Jc.assign(r)}return t}generate(e,t){if("void"!==t)return super.generate(e,t)}update(e){const t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;vp.get(t)!==e.frameId&&(vp.set(t,e.frameId),null!==this.previousBoneMatricesNode&&(null===t.previousBoneMatrices&&(t.previousBoneMatrices=new Float32Array(t.boneMatrices)),t.previousBoneMatrices.set(t.boneMatrices)),t.update())}}const Sp=e=>new Np(e);class Rp extends di{static get type(){return"LoopNode"}constructor(e=[]){super("void"),this.params=e}getVarName(e){return String.fromCharCode("i".charCodeAt(0)+e)}getProperties(e){const t=e.getNodeProperties(this);if(void 0!==t.stackNode)return t;const r={};for(let e=0,t=this.params.length-1;eNumber(l)?">=":"<")),a)n=`while ( ${l} )`;else{const r={start:u,end:l},s=r.start,i=r.end;let a;const g=()=>h.includes("<")?"+=":"-=";if(null!=p)switch(typeof p){case"function":a=e.flowStagesNode(t.updateNode,"void").code.replace(/\t|;/g,"");break;case"number":a=d+" "+g()+" "+e.generateConst(c,p);break;case"string":a=d+" "+p;break;default:p.isNode?a=d+" "+g()+" "+p.build(e):(o("TSL: 'Loop( { update: ... } )' is not a function, string or number.",this.stackTrace),a="break /* invalid update */")}else p="int"===c||"uint"===c?h.includes("<")?"++":"--":g()+" 1.",a=d+" "+p;n=`for ( ${e.getVar(c,d)+" = "+s}; ${d+" "+h+" "+i}; ${a} )`}e.addFlowCode((0===s?"\n":"")+e.tab+n+" {\n\n").addFlowTab()}const i=s.build(e,"void");t.returnsNode.build(e,"void"),e.removeFlowTab().addFlowCode("\n"+e.tab+i);for(let t=0,r=this.params.length-1;tnew Rp(sn(e,"int")).toStack(),Ap=()=>fl("break").toStack(),wp=new WeakMap,Cp=new s,Mp=dn(({bufferMap:e,influence:t,stride:r,width:s,depth:i,offset:n})=>{const a=yn(dp).mul(r).add(n),o=a.div(s),u=a.sub(o.mul(s));return Il(e,_n(u,o)).depth(i).xyz.mul(t)});class Bp extends di{static get type(){return"MorphNode"}constructor(e){super("void"),this.mesh=e,this.morphBaseInfluence=Na(1),this.updateType=ti.OBJECT}setup(e){const{geometry:r}=e,s=void 0!==r.morphAttributes.position,i=r.hasAttribute("normal")&&void 0!==r.morphAttributes.normal,n=r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color,a=void 0!==n?n.length:0,{texture:o,stride:u,size:l}=function(e){const r=void 0!==e.morphAttributes.position,s=void 0!==e.morphAttributes.normal,i=void 0!==e.morphAttributes.color,n=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=void 0!==n?n.length:0;let o=wp.get(e);if(void 0===o||o.count!==a){void 0!==o&&o.texture.dispose();const u=e.morphAttributes.position||[],l=e.morphAttributes.normal||[],d=e.morphAttributes.color||[];let c=0;!0===r&&(c=1),!0===s&&(c=2),!0===i&&(c=3);let h=e.attributes.position.count*c,p=1;const g=4096;h>g&&(p=Math.ceil(h/g),h=g);const m=new Float32Array(h*p*4*a),f=new K(m,h,p,a);f.type=Q,f.needsUpdate=!0;const y=4*c;for(let x=0;x{const t=fn(0).toVar();this.mesh.count>1&&null!==this.mesh.morphTexture&&void 0!==this.mesh.morphTexture?t.assign(Il(this.mesh.morphTexture,_n(yn(e).add(1),yn(cp))).r):t.assign(Pc("morphTargetInfluences","float").element(e).toVar()),pn(t.notEqual(0),()=>{!0===s&&Qd.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(0)})),!0===i&&oc.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(1)}))})})}update(){const e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}const Fp=nn(Bp).setParameterLength(1);class Lp extends di{static get type(){return"LightingNode"}constructor(){super("vec3"),this.isLightingNode=!0}}class Pp extends Lp{static get type(){return"AONode"}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}}class Dp extends _u{static get type(){return"LightingContextNode"}constructor(e,t=null,r=null,s=null){super(e),this.lightingModel=t,this.backdropNode=r,this.backdropAlphaNode=s,this._value=null}getContext(){const{backdropNode:e,backdropAlphaNode:t}=this,r={directDiffuse:Sn().toVar("directDiffuse"),directSpecular:Sn().toVar("directSpecular"),indirectDiffuse:Sn().toVar("indirectDiffuse"),indirectSpecular:Sn().toVar("indirectSpecular")};return{radiance:Sn().toVar("radiance"),irradiance:Sn().toVar("irradiance"),iblIrradiance:Sn().toVar("iblIrradiance"),ambientOcclusion:fn(1).toVar("ambientOcclusion"),reflectedLight:r,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}const Up=nn(Dp);class Ip extends Lp{static get type(){return"IrradianceNode"}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}}const Op=new t;class Vp extends Pl{static get type(){return"ViewportTextureNode"}constructor(e=Kl,t=null,r=null){let s=null;null===r?(s=new Y,s.minFilter=Z,r=s):s=r,super(r,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=s,this.isOutputTextureNode=!0,this.updateBeforeType=ti.RENDER,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,r;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,r=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,r=this._cacheTextures),null===e)return t;if(!1===r.has(e)){const s=t.clone();r.set(e,s)}return r.get(e)}updateReference(e){const t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){const t=e.renderer,r=t.getRenderTarget();null===r?t.getDrawingBufferSize(Op):Op.set(r.width,r.height);const s=this.getTextureForReference(r);s.image.width===Op.width&&s.image.height===Op.height||(s.image.width=Op.width,s.image.height=Op.height,s.needsUpdate=!0);const i=s.generateMipmaps;s.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(s),s.generateMipmaps=i}clone(){const e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}}const kp=nn(Vp).setParameterLength(0,3),Gp=nn(Vp,null,null,{generateMipmaps:!0}).setParameterLength(0,3),$p=Gp(),zp=(e=Kl,t=null)=>$p.sample(e,t);let Wp=null;class Hp extends Vp{static get type(){return"ViewportDepthTextureNode"}constructor(e=Kl,t=null){null===Wp&&(Wp=new J),super(e,t,Wp)}getTextureForReference(){return Wp}}const qp=nn(Hp).setParameterLength(0,2);class jp extends di{static get type(){return"ViewportDepthNode"}constructor(e,t=null){super("float"),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(e){const{scope:t}=this;return t===jp.DEPTH_BASE?e.getFragDepth():super.generate(e)}setup({camera:e}){const{scope:t}=this,r=this.valueNode;let s=null;if(t===jp.DEPTH_BASE)null!==r&&(s=eg().assign(r));else if(t===jp.DEPTH)s=e.isPerspectiveCamera?Qp(ec.z,bd,xd):Xp(ec.z,bd,xd);else if(t===jp.LINEAR_DEPTH)if(null!==r)if(e.isPerspectiveCamera){const e=Zp(r,bd,xd);s=Xp(e,bd,xd)}else s=r;else s=Xp(ec.z,bd,xd);return s}}jp.DEPTH_BASE="depthBase",jp.DEPTH="depth",jp.LINEAR_DEPTH="linearDepth";const Xp=(e,t,r)=>e.add(t).div(t.sub(r)),Kp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?r.sub(t).mul(e).sub(r):t.sub(r).mul(e).sub(t)),Qp=(e,t,r)=>t.add(e).mul(r).div(r.sub(t).mul(e)),Yp=(e,t,r)=>t.mul(e.add(r)).div(e.mul(t.sub(r))),Zp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?t.mul(r).div(t.sub(r).mul(e).sub(t)):t.mul(r).div(r.sub(t).mul(e).sub(r))),Jp=(e,t,r)=>{t=t.max(1e-6).toVar();const s=xo(e.negate().div(t)),i=xo(r.div(t));return s.div(i)},eg=nn(jp,jp.DEPTH_BASE),tg=an(jp,jp.DEPTH),rg=nn(jp,jp.LINEAR_DEPTH).setParameterLength(0,1),sg=rg(qp());tg.assign=e=>eg(e);class ig extends di{static get type(){return"ClippingNode"}constructor(e=ig.DEFAULT){super(),this.scope=e}setup(e){super.setup(e);const t=e.clippingContext,{intersectionPlanes:r,unionPlanes:s}=t;return this.hardwareClipping=e.material.hardwareClipping,this.scope===ig.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(r,s):this.scope===ig.HARDWARE?this.setupHardwareClipping(s,e):this.setupDefault(r,s)}setupAlphaToCoverage(e,t){return dn(()=>{const r=fn().toVar("distanceToPlane"),s=fn().toVar("distanceToGradient"),i=fn(1).toVar("clipOpacity"),n=t.length;if(!1===this.hardwareClipping&&n>0){const e=$l(t).setGroup(Ta);Ep(n,({i:t})=>{const n=e.element(t);r.assign(ec.dot(n.xyz).negate().add(n.w)),s.assign(r.fwidth().div(2)),i.mulAssign(cu(s.negate(),s,r))})}const a=e.length;if(a>0){const t=$l(e).setGroup(Ta),n=fn(1).toVar("intersectionClipOpacity");Ep(a,({i:e})=>{const i=t.element(e);r.assign(ec.dot(i.xyz).negate().add(i.w)),s.assign(r.fwidth().div(2)),n.mulAssign(cu(s.negate(),s,r).oneMinus())}),i.mulAssign(n.oneMinus())}kn.a.mulAssign(i),kn.a.equal(0).discard()})()}setupDefault(e,t){return dn(()=>{const r=t.length;if(!1===this.hardwareClipping&&r>0){const e=$l(t).setGroup(Ta);Ep(r,({i:t})=>{const r=e.element(t);ec.dot(r.xyz).greaterThan(r.w).discard()})}const s=e.length;if(s>0){const t=$l(e).setGroup(Ta),r=xn(!0).toVar("clipped");Ep(s,({i:e})=>{const s=t.element(e);r.assign(ec.dot(s.xyz).greaterThan(s.w).and(r))}),r.discard()}})()}setupHardwareClipping(e,t){const r=e.length;return t.enableHardwareClipping(r),dn(()=>{const s=$l(e).setGroup(Ta),i=Wl(t.getClipDistance());Ep(r,({i:e})=>{const t=s.element(e),r=ec.dot(t.xyz).sub(t.w).negate();i.element(e).assign(r)})})()}}ig.ALPHA_TO_COVERAGE="alphaToCoverage",ig.DEFAULT="default",ig.HARDWARE="hardware";const ng=dn(([e])=>Ro(Pa(1e4,Eo(Pa(17,e.x).add(Pa(.1,e.y)))).mul(Fa(.1,Fo(Eo(Pa(13,e.y).add(e.x))))))),ag=dn(([e])=>ng(Tn(ng(e.xy),e.z))),og=dn(([e])=>{const t=jo(Po(Io(e.xyz)),Po(Oo(e.xyz))),r=fn(1).div(fn(.05).mul(t)).toVar("pixScale"),s=Tn(yo(vo(xo(r))),yo(No(xo(r)))),i=Tn(ag(vo(s.x.mul(e.xyz))),ag(vo(s.y.mul(e.xyz)))),n=Ro(xo(r)),a=Fa(Pa(n.oneMinus(),i.x),Pa(n,i.y)),o=qo(n,n.oneMinus()),u=Sn(a.mul(a).div(Pa(2,o).mul(La(1,o))),a.sub(Pa(.5,o)).div(La(1,o)),La(1,La(1,a).mul(La(1,a)).div(Pa(2,o).mul(La(1,o))))),l=a.lessThan(o.oneMinus()).select(a.lessThan(o).select(u.x,u.y),u.z);return uu(l,1e-6,1)}).setLayout({name:"getAlphaHashThreshold",type:"float",inputs:[{name:"position",type:"vec3"}]});class ug extends Rl{static get type(){return"VertexColorNode"}constructor(e){super(null,"vec4"),this.isVertexColorNode=!0,this.index=e}getAttributeName(){const e=this.index;return"color"+(e>0?e:"")}generate(e){const t=this.getAttributeName(e);let r;return r=!0===e.hasGeometryAttribute(t)?super.generate(e):e.generateConst(this.nodeType,new s(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}}const lg=(e=0)=>new ug(e),dg=dn(([e,t])=>qo(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:"blendBurn",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),cg=dn(([e,t])=>qo(e.div(t.oneMinus()),1)).setLayout({name:"blendDodge",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),hg=dn(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:"blendScreen",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),pg=dn(([e,t])=>ou(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),Xo(.5,e))).setLayout({name:"blendOverlay",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),gg=dn(([e,t])=>{const r=t.a.add(e.a.mul(t.a.oneMinus()));return wn(t.rgb.mul(t.a).add(e.rgb.mul(e.a).mul(t.a.oneMinus())).div(r),r)}).setLayout({name:"blendColor",type:"vec4",inputs:[{name:"base",type:"vec4"},{name:"blend",type:"vec4"}]}),mg=dn(([e])=>wn(e.rgb.mul(e.a),e.a),{color:"vec4",return:"vec4"}),fg=dn(([e])=>(pn(e.a.equal(0),()=>wn(0)),wn(e.rgb.div(e.a),e.a)),{color:"vec4",return:"vec4"});class yg extends ee{static get type(){return"NodeMaterial"}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.maskShadowNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,this.contextNode=null}_getNodeChildren(){const e=[];for(const t of Object.getOwnPropertyNames(this)){if(!0===t.startsWith("_"))continue;const r=this[t];r&&!0===r.isNode&&e.push({property:t,childNode:r})}return e}customProgramCacheKey(){const e=[];for(const{property:t,childNode:r}of this._getNodeChildren())e.push(Os(t.slice(0,-4)),r.getCacheKey());return this.type+Vs(e)}build(e){this.setup(e)}setupObserver(e){return new Ps(e)}setup(e){e.context.setupNormal=()=>Pu(this.setupNormal(e),"NORMAL","vec3"),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);const t=e.renderer,r=t.getRenderTarget();!0===t.contextNode.isContextNode?e.context={...e.context,...t.contextNode.getFlowContextData()}:o('NodeMaterial: "renderer.contextNode" must be an instance of `context()`.'),null!==this.contextNode&&(!0===this.contextNode.isContextNode?e.context={...e.context,...this.contextNode.getFlowContextData()}:o('NodeMaterial: "material.contextNode" must be an instance of `context()`.')),e.addStack();const s=this.setupVertex(e),i=Pu(this.vertexNode||s,"VERTEX");let n;e.context.clipSpace=i,e.stack.outputNode=i,this.setupHardwareClipping(e),null!==this.geometryNode&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow("vertex",e.removeStack()),e.addStack();const a=this.setupClipping(e);if(!0!==this.depthWrite&&!0!==this.depthTest||(null!==r?!0===r.depthBuffer&&this.setupDepth(e):!0===t.depth&&this.setupDepth(e)),null===this.fragmentNode){this.setupDiffuseColor(e),this.setupVariants(e);const s=this.setupLighting(e);null!==a&&e.stack.addToStack(a);const i=wn(s,kn.a).max(0);n=this.setupOutput(e,i),aa.assign(n);const o=null!==this.outputNode;if(o&&(n=this.outputNode),e.context.getOutput&&(n=e.context.getOutput(n,e)),null!==r){const e=t.getMRT(),r=this.mrtNode;null!==e?(o&&aa.assign(n),n=e,null!==r&&(n=e.merge(r))):null!==r&&(n=r)}}else{let t=this.fragmentNode;!0!==t.isOutputStructNode&&(t=wn(t)),n=this.setupOutput(e,t)}e.stack.outputNode=n,e.addFlow("fragment",e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(null===e.clippingContext)return null;const{unionPlanes:t,intersectionPlanes:r}=e.clippingContext;let s=null;if(t.length>0||r.length>0){const t=e.renderer.currentSamples;this.alphaToCoverage&&t>1?s=new ig(ig.ALPHA_TO_COVERAGE):e.stack.addToStack(new ig)}return s}setupHardwareClipping(e){if(this.hardwareClipping=!1,null===e.clippingContext)return;const t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable("clipDistance")&&(e.stack.addToStack(new ig(ig.HARDWARE)),this.hardwareClipping=!0)}setupDepth(e){const{renderer:t,camera:r}=e;let s=this.depthNode;if(null===s){const e=t.getMRT();e&&e.has("depth")?s=e.get("depth"):!0===t.logarithmicDepthBuffer&&(s=r.isPerspectiveCamera?Jp(ec.z,bd,xd):Xp(ec.z,bd,xd))}null!==s&&tg.assign(s).toStack()}setupPositionView(){return Wd.mul(Qd).xyz}setupModelViewProjection(){return Td.mul(ec)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.position=e.removeStack(),ip}setupPosition(e){const{object:t,geometry:r}=e;if((r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color)&&Fp(t).toStack(),!0===t.isSkinnedMesh&&Sp(t).toStack(),this.displacementMap){const e=Ic("displacementMap","texture"),t=Ic("displacementScale","float"),r=Ic("displacementBias","float");Qd.addAssign(oc.normalize().mul(e.x.mul(t).add(r)))}return t.isBatchedMesh&&_p(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&!0===t.instanceMatrix.isInstancedBufferAttribute&&xp(t).toStack(),null!==this.positionNode&&Qd.assign(Pu(this.positionNode,"POSITION","vec3")),Qd}setupDiffuseColor(e){const{object:t,geometry:r}=e;null!==this.maskNode&&xn(this.maskNode).not().discard();let s=this.colorNode?wn(this.colorNode):_h;if(!0===this.vertexColors&&r.hasAttribute("color")&&(s=s.mul(lg())),t.instanceColor){s=Vn("vec3","vInstanceColor").mul(s)}if(t.isBatchedMesh&&t._colorsTexture){s=Vn("vec3","vBatchColor").mul(s)}kn.assign(s);const i=this.opacityNode?fn(this.opacityNode):Sh;kn.a.assign(kn.a.mul(i));let n=null;(null!==this.alphaTestNode||this.alphaTest>0)&&(n=null!==this.alphaTestNode?fn(this.alphaTestNode):Th,!0===this.alphaToCoverage?(kn.a=cu(n,n.add($o(kn.a)),kn.a),kn.a.lessThanEqual(0).discard()):kn.a.lessThanEqual(n).discard()),!0===this.alphaHash&&kn.a.lessThan(og(Qd)).discard(),e.isOpaque()&&kn.a.assign(1)}setupVariants(){}setupOutgoingLight(){return!0===this.lights?Sn(0):kn.rgb}setupNormal(){return this.normalNode?Sn(this.normalNode):Fh}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?Ic("envMap","cubeTexture"):Ic("envMap","texture")),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Ip(tp)),t}setupLights(e){const t=[],r=this.setupEnvironment(e);r&&r.isLightingNode&&t.push(r);const s=this.setupLightMap(e);s&&s.isLightingNode&&t.push(s);let i=this.aoNode;null===i&&e.material.aoMap&&(i=rp),e.context.getAO&&(i=e.context.getAO(i,e)),i&&t.push(new Pp(i));let n=this.lightsNode||e.lightsNode;return t.length>0&&(n=e.renderer.lighting.createNode([...n.getLights(),...t])),n}setupLightingModel(){}setupLighting(e){const{material:t}=e,{backdropNode:r,backdropAlphaNode:s,emissiveNode:i}=this,n=!0===this.lights||null!==this.lightsNode?this.setupLights(e):null;let a=this.setupOutgoingLight(e);if(n&&n.getScope().hasLights){const t=this.setupLightingModel(e)||null;a=Up(n,t,r,s)}else null!==r&&(a=Sn(null!==s?ou(a,r,s):r));return(i&&!0===i.isNode||t.emissive&&!0===t.emissive.isColor)&&($n.assign(Sn(i||Nh)),a=a.add($n)),a}setupFog(e,t){const r=e.fogNode;return r&&(aa.assign(t),t=wn(r.toVar())),t}setupPremultipliedAlpha(e,t){return mg(t)}setupOutput(e,t){return!0===this.fog&&(t=this.setupFog(e,t)),!0===this.premultipliedAlpha&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(const t in e){const r=e[t];void 0===this[t]&&(this[t]=r,r&&r.clone&&(this[t]=r.clone()))}const t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(const e in t)void 0===Object.getOwnPropertyDescriptor(this.constructor.prototype,e)&&void 0!==t[e].get&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{},nodes:{}});const r=ee.prototype.toJSON.call(this,e);r.inputNodes={};for(const{property:t,childNode:s}of this._getNodeChildren())r.inputNodes[t]=s.toJSON(e).uuid;function s(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(t){const t=s(e.textures),i=s(e.images),n=s(e.nodes);t.length>0&&(r.textures=t),i.length>0&&(r.images=i),n.length>0&&(r.nodes=n)}return r}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.aoNode=e.aoNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.maskShadowNode=e.maskShadowNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,this.contextNode=e.contextNode,super.copy(e)}}const bg=new te;class xg extends yg{static get type(){return"LineBasicNodeMaterial"}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.setDefaultValues(bg),this.setValues(e)}}const Tg=new re;class _g extends yg{static get type(){return"LineDashedNodeMaterial"}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.setDefaultValues(Tg),this.dashOffset=0,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){const e=this.offsetNode?fn(this.offsetNode):Zh,t=this.dashScaleNode?fn(this.dashScaleNode):Xh,r=this.dashSizeNode?fn(this.dashSizeNode):Kh,s=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(r),ua.assign(s);const i=Uu(El("lineDistance").mul(t));(e?i.add(e):i).mod(oa.add(ua)).greaterThan(oa).discard()}}const vg=new re;class Ng extends yg{static get type(){return"Line2NodeMaterial"}constructor(e={}){super(),this.isLine2NodeMaterial=!0,this.setDefaultValues(vg),this.vertexColors=e.vertexColors,this.dashOffset=0,this.lineColorNode=null,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.blending=se,this._useDash=e.dashed,this._useAlphaToCoverage=!0,this._useWorldUnits=!1,this.setValues(e)}setup(e){const{renderer:t}=e,r=this._useAlphaToCoverage,s=this.vertexColors,i=this._useDash,n=this._useWorldUnits,a=dn(({start:e,end:t})=>{const r=Td.element(2).element(2),s=Td.element(3).element(2).mul(-.5).div(r).sub(e.z).div(t.z.sub(e.z));return wn(ou(e.xyz,t.xyz,s),t.w)}).setLayout({name:"trimSegment",type:"vec4",inputs:[{name:"start",type:"vec4"},{name:"end",type:"vec4"}]});this.vertexNode=dn(()=>{const e=El("instanceStart"),t=El("instanceEnd"),r=wn(Wd.mul(wn(e,1))).toVar("start"),s=wn(Wd.mul(wn(t,1))).toVar("end");if(i){const e=this.dashScaleNode?fn(this.dashScaleNode):Xh,t=this.offsetNode?fn(this.offsetNode):Zh,r=El("instanceDistanceStart"),s=El("instanceDistanceEnd");let i=Kd.y.lessThan(.5).select(e.mul(r),e.mul(s));i=i.add(t),Vn("float","lineDistance").assign(i)}n&&(Vn("vec3","worldStart").assign(r.xyz),Vn("vec3","worldEnd").assign(s.xyz));const o=Zl.z.div(Zl.w),u=Td.element(2).element(3).equal(-1);pn(u,()=>{pn(r.z.lessThan(0).and(s.z.greaterThan(0)),()=>{s.assign(a({start:r,end:s}))}).ElseIf(s.z.lessThan(0).and(r.z.greaterThanEqual(0)),()=>{r.assign(a({start:s,end:r}))})});const l=Td.mul(r),d=Td.mul(s),c=l.xyz.div(l.w),h=d.xyz.div(d.w),p=h.xy.sub(c.xy).toVar();p.x.assign(p.x.mul(o)),p.assign(p.normalize());const g=wn().toVar();if(n){const e=s.xyz.sub(r.xyz).normalize(),t=ou(r.xyz,s.xyz,.5).normalize(),n=e.cross(t).normalize(),a=e.cross(n),o=Vn("vec4","worldPos");o.assign(Kd.y.lessThan(.5).select(r,s));const u=Yh.mul(.5);o.addAssign(wn(Kd.x.lessThan(0).select(n.mul(u),n.mul(u).negate()),0)),i||(o.addAssign(wn(Kd.y.lessThan(.5).select(e.mul(u).negate(),e.mul(u)),0)),o.addAssign(wn(a.mul(u),0)),pn(Kd.y.greaterThan(1).or(Kd.y.lessThan(0)),()=>{o.subAssign(wn(a.mul(2).mul(u),0))})),g.assign(Td.mul(o));const l=Sn().toVar();l.assign(Kd.y.lessThan(.5).select(c,h)),g.z.assign(l.z.mul(g.w))}else{const e=Tn(p.y,p.x.negate()).toVar("offset");p.x.assign(p.x.div(o)),e.x.assign(e.x.div(o)),e.assign(Kd.x.lessThan(0).select(e.negate(),e)),pn(Kd.y.lessThan(0),()=>{e.assign(e.sub(p))}).ElseIf(Kd.y.greaterThan(1),()=>{e.assign(e.add(p))}),e.assign(e.mul(Yh)),e.assign(e.div(Zl.w.div(Xl))),g.assign(Kd.y.lessThan(.5).select(l,d)),e.assign(e.mul(g.w)),g.assign(g.add(wn(e,0,0)))}return g})();const o=dn(({p1:e,p2:t,p3:r,p4:s})=>{const i=e.sub(r),n=s.sub(r),a=t.sub(e),o=i.dot(n),u=n.dot(a),l=i.dot(a),d=n.dot(n),c=a.dot(a).mul(d).sub(u.mul(u)),h=o.mul(u).sub(l.mul(d)).div(c).clamp(),p=o.add(u.mul(h)).div(d).clamp();return Tn(h,p)});if(this.colorNode=dn(()=>{const e=Al();if(i){const t=this.dashSizeNode?fn(this.dashSizeNode):Kh,r=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(t),ua.assign(r);const s=Vn("float","lineDistance");e.y.lessThan(-1).or(e.y.greaterThan(1)).discard(),s.mod(oa.add(ua)).greaterThan(oa).discard()}const a=fn(1).toVar("alpha");if(n){const e=Vn("vec3","worldStart"),s=Vn("vec3","worldEnd"),n=Vn("vec4","worldPos").xyz.normalize().mul(1e5),u=s.sub(e),l=o({p1:e,p2:s,p3:Sn(0,0,0),p4:n}),d=e.add(u.mul(l.x)),c=n.mul(l.y),h=d.sub(c).length().div(Yh);if(!i)if(r&&t.currentSamples>0){const e=h.fwidth();a.assign(cu(e.negate().add(.5),e.add(.5),h).oneMinus())}else h.greaterThan(.5).discard()}else if(r&&t.currentSamples>0){const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1)),s=t.mul(t).add(r.mul(r)),i=fn(s.fwidth()).toVar("dlen");pn(e.y.abs().greaterThan(1),()=>{a.assign(cu(i.oneMinus(),i.add(1),s).oneMinus())})}else pn(e.y.abs().greaterThan(1),()=>{const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1));t.mul(t).add(r.mul(r)).greaterThan(1).discard()});let u;if(this.lineColorNode)u=this.lineColorNode;else if(s){const e=El("instanceColorStart"),t=El("instanceColorEnd");u=Kd.y.lessThan(.5).select(e,t).mul(_h)}else u=_h;return wn(u,a)})(),this.transparent){const e=this.opacityNode?fn(this.opacityNode):Sh;this.outputNode=wn(this.colorNode.rgb.mul(e).add(zp().rgb.mul(e.oneMinus())),this.colorNode.a)}super.setup(e)}get worldUnits(){return this._useWorldUnits}set worldUnits(e){this._useWorldUnits!==e&&(this._useWorldUnits=e,this.needsUpdate=!0)}get dashed(){return this._useDash}set dashed(e){this._useDash!==e&&(this._useDash=e,this.needsUpdate=!0)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const Sg=new ie;class Rg extends yg{static get type(){return"MeshNormalNodeMaterial"}constructor(e){super(),this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(Sg),this.setValues(e)}setupDiffuseColor(){const e=this.opacityNode?fn(this.opacityNode):Sh;kn.assign(zu(wn(dh(cc),e),ne))}}const Eg=dn(([e=Jd])=>{const t=e.z.atan(e.x).mul(1/(2*Math.PI)).add(.5),r=e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5);return Tn(t,r)});class Ag extends ae{constructor(e=1,t={}){super(e,e,t),this.isCubeRenderTarget=!0;const r={width:e,height:e,depth:1},s=[r,r,r,r,r,r];this.texture=new U(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){const r=t.minFilter,s=t.generateMipmaps;t.generateMipmaps=!0,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=new oe(5,5,5),n=Eg(Jd),a=new yg;a.colorNode=Ul(t,n,0),a.side=L,a.blending=se;const o=new ue(i,a),u=new le;u.add(o),t.minFilter===Z&&(t.minFilter=de);const l=new ce(1,10,this),d=e.getMRT();return e.setMRT(null),l.update(e,u),e.setMRT(d),t.minFilter=r,t.generateMipmaps=s,o.geometry.dispose(),o.material.dispose(),this}clear(e,t=!0,r=!0,s=!0){const i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,r,s);e.setRenderTarget(i)}}const wg=new WeakMap;class Cg extends pi{static get type(){return"CubeMapNode"}constructor(e){super("vec3"),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=Bc(null);const t=new U;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=ti.RENDER}updateBefore(e){const{renderer:t,material:r}=e,s=this.envNode;if(s.isTextureNode||s.isMaterialReferenceNode){const e=s.isTextureNode?s.value:r[s.property];if(e&&e.isTexture){const r=e.mapping;if(r===he||r===pe){if(wg.has(e)){const t=wg.get(e);Bg(t,e.mapping),this._cubeTexture=t}else{const r=e.image;if(function(e){return null!=e&&e.height>0}(r)){const s=new Ag(r.height);s.fromEquirectangularTexture(t,e),Bg(s.texture,e.mapping),this._cubeTexture=s.texture,wg.set(e,s.texture),e.addEventListener("dispose",Mg)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}}function Mg(e){const t=e.target;t.removeEventListener("dispose",Mg);const r=wg.get(t);void 0!==r&&(wg.delete(t),r.dispose())}function Bg(e,t){t===he?e.mapping=I:t===pe&&(e.mapping=O)}const Fg=nn(Cg).setParameterLength(1);class Lg extends Lp{static get type(){return"BasicEnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=Fg(this.envNode)}}class Pg extends Lp{static get type(){return"BasicLightMapNode"}constructor(e=null){super(),this.lightMapNode=e}setup(e){const t=fn(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}}class Dg{start(e){e.lightsNode.setupLights(e,e.lightsNode.getLightNodes(e)),this.indirect(e)}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}}class Ug extends Dg{constructor(){super()}indirect({context:e}){const t=e.ambientOcclusion,r=e.reflectedLight,s=e.irradianceLightMap;r.indirectDiffuse.assign(wn(0)),s?r.indirectDiffuse.addAssign(s):r.indirectDiffuse.addAssign(wn(1,1,1,0)),r.indirectDiffuse.mulAssign(t),r.indirectDiffuse.mulAssign(kn.rgb)}finish(e){const{material:t,context:r}=e,s=r.outgoingLight,i=e.context.environment;if(i)switch(t.combine){case fe:s.rgb.assign(ou(s.rgb,s.rgb.mul(i.rgb),wh.mul(Ch)));break;case me:s.rgb.assign(ou(s.rgb,i.rgb,wh.mul(Ch)));break;case ge:s.rgb.addAssign(i.rgb.mul(wh.mul(Ch)));break;default:d("BasicLightingModel: Unsupported .combine value:",t.combine)}}}const Ig=new ye;class Og extends yg{static get type(){return"MeshBasicNodeMaterial"}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Ig),this.setValues(e)}setupNormal(){return nc(lc)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Pg(tp)),t}setupOutgoingLight(){return kn.rgb}setupLightingModel(){return new Ug}}const Vg=dn(({f0:e,f90:t,dotVH:r})=>{const s=r.mul(-5.55473).sub(6.98316).mul(r).exp2();return e.mul(s.oneMinus()).add(t.mul(s))}),kg=dn(e=>e.diffuseColor.mul(1/Math.PI)),Gg=dn(({dotNH:e})=>na.mul(fn(.5)).add(1).mul(fn(1/Math.PI)).mul(e.pow(na))),$g=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(t).clamp(),s=tc.dot(t).clamp(),i=Vg({f0:ra,f90:1,dotVH:s}),n=fn(.25),a=Gg({dotNH:r});return i.mul(n).mul(a)});class zg extends Ug{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t);r.directDiffuse.addAssign(s.mul(kg({diffuseColor:kn.rgb}))),!0===this.specular&&r.directSpecular.addAssign(s.mul($g({lightDirection:e})).mul(wh))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Wg=new be;class Hg extends yg{static get type(){return"MeshLambertNodeMaterial"}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Wg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg(!1)}}const qg=new xe;class jg extends yg{static get type(){return"MeshPhongNodeMaterial"}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(qg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg}setupVariants(){const e=(this.shininessNode?fn(this.shininessNode):vh).max(1e-4);na.assign(e);const t=this.specularNode||Rh;ra.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}}const Xg=dn(e=>{if(!1===e.geometry.hasAttribute("normal"))return fn(0);const t=lc.dFdx().abs().max(lc.dFdy().abs());return t.x.max(t.y).max(t.z)}),Kg=dn(e=>{const{roughness:t}=e,r=Xg();let s=t.max(.0525);return s=s.add(r),s=s.min(1),s}),Qg=dn(({alpha:e,dotNL:t,dotNV:r})=>{const s=e.pow2(),i=t.mul(s.add(s.oneMinus().mul(r.pow2())).sqrt()),n=r.mul(s.add(s.oneMinus().mul(t.pow2())).sqrt());return Da(.5,i.add(n).max(no))}).setLayout({name:"V_GGX_SmithCorrelated",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNL",type:"float"},{name:"dotNV",type:"float"}]}),Yg=dn(({alphaT:e,alphaB:t,dotTV:r,dotBV:s,dotTL:i,dotBL:n,dotNV:a,dotNL:o})=>{const u=o.mul(Sn(e.mul(r),t.mul(s),a).length()),l=a.mul(Sn(e.mul(i),t.mul(n),o).length());return Da(.5,u.add(l))}).setLayout({name:"V_GGX_SmithCorrelated_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotTV",type:"float",qualifier:"in"},{name:"dotBV",type:"float",qualifier:"in"},{name:"dotTL",type:"float",qualifier:"in"},{name:"dotBL",type:"float",qualifier:"in"},{name:"dotNV",type:"float",qualifier:"in"},{name:"dotNL",type:"float",qualifier:"in"}]}),Zg=dn(({alpha:e,dotNH:t})=>{const r=e.pow2(),s=t.pow2().mul(r.oneMinus()).oneMinus();return r.div(s.pow2()).mul(1/Math.PI)}).setLayout({name:"D_GGX",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNH",type:"float"}]}),Jg=fn(1/Math.PI),em=dn(({alphaT:e,alphaB:t,dotNH:r,dotTH:s,dotBH:i})=>{const n=e.mul(t),a=Sn(t.mul(s),e.mul(i),n.mul(r)),o=a.dot(a),u=n.div(o);return Jg.mul(n.mul(u.pow2()))}).setLayout({name:"D_GGX_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotNH",type:"float",qualifier:"in"},{name:"dotTH",type:"float",qualifier:"in"},{name:"dotBH",type:"float",qualifier:"in"}]}),tm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,normalView:n=cc,USE_IRIDESCENCE:a,USE_ANISOTROPY:o})=>{const u=s.pow2(),l=e.add(tc).normalize(),d=n.dot(e).clamp(),c=n.dot(tc).clamp(),h=n.dot(l).clamp(),p=tc.dot(l).clamp();let g,m,f=Vg({f0:t,f90:r,dotVH:p});if(Yi(a)&&(f=Kn.mix(f,i)),Yi(o)){const t=ea.dot(e),r=ea.dot(tc),s=ea.dot(l),i=ta.dot(e),n=ta.dot(tc),a=ta.dot(l);g=Yg({alphaT:Zn,alphaB:u,dotTV:r,dotBV:n,dotTL:t,dotBL:i,dotNV:c,dotNL:d}),m=em({alphaT:Zn,alphaB:u,dotNH:h,dotTH:s,dotBH:a})}else g=Qg({alpha:u,dotNL:d,dotNV:c}),m=Zg({alpha:u,dotNH:h});return f.mul(g).mul(m)}),rm=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let sm=null;const im=dn(({roughness:e,dotNV:t})=>{null===sm&&(sm=new Te(rm,16,16,W,_e),sm.name="DFG_LUT",sm.minFilter=de,sm.magFilter=de,sm.wrapS=ve,sm.wrapT=ve,sm.generateMipmaps=!1,sm.needsUpdate=!0);const r=Tn(e,t);return Ul(sm,r).rg}),nm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a})=>{const o=tm({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a}),u=cc.dot(e).clamp(),l=cc.dot(tc).clamp(),d=im({roughness:s,dotNV:l}),c=im({roughness:s,dotNV:u}),h=t.mul(d.x).add(r.mul(d.y)),p=t.mul(c.x).add(r.mul(c.y)),g=d.x.add(d.y),m=c.x.add(c.y),f=fn(1).sub(g),y=fn(1).sub(m),b=t.add(t.oneMinus().mul(.047619)),x=h.mul(p).mul(b).div(fn(1).sub(f.mul(y).mul(b).mul(b)).add(no)),T=f.mul(y),_=x.mul(T);return o.add(_)}),am=dn(e=>{const{dotNV:t,specularColor:r,specularF90:s,roughness:i}=e,n=im({dotNV:t,roughness:i});return r.mul(n.x).add(s.mul(n.y))}),om=dn(({f:e,f90:t,dotVH:r})=>{const s=r.oneMinus().saturate(),i=s.mul(s),n=s.mul(i,i).clamp(0,.9999);return e.sub(Sn(t).mul(n)).div(n.oneMinus())}).setLayout({name:"Schlick_to_F0",type:"vec3",inputs:[{name:"f",type:"vec3"},{name:"f90",type:"float"},{name:"dotVH",type:"float"}]}),um=dn(({roughness:e,dotNH:t})=>{const r=e.pow2(),s=fn(1).div(r),i=t.pow2().oneMinus().max(.0078125);return fn(2).add(s).mul(i.pow(s.mul(.5))).div(2*Math.PI)}).setLayout({name:"D_Charlie",type:"float",inputs:[{name:"roughness",type:"float"},{name:"dotNH",type:"float"}]}),lm=dn(({dotNV:e,dotNL:t})=>fn(1).div(fn(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:"V_Neubelt",type:"float",inputs:[{name:"dotNV",type:"float"},{name:"dotNL",type:"float"}]}),dm=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(e).clamp(),s=cc.dot(tc).clamp(),i=cc.dot(t).clamp(),n=um({roughness:Xn,dotNH:i}),a=lm({dotNV:s,dotNL:r});return jn.mul(n).mul(a)}),cm=dn(({N:e,V:t,roughness:r})=>{const s=e.dot(t).saturate(),i=Tn(r,s.oneMinus().sqrt());return i.assign(i.mul(.984375).add(.0078125)),i}).setLayout({name:"LTC_Uv",type:"vec2",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"roughness",type:"float"}]}),hm=dn(({f:e})=>{const t=e.length();return jo(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:"LTC_ClippedSphereFormFactor",type:"float",inputs:[{name:"f",type:"vec3"}]}),pm=dn(({v1:e,v2:t})=>{const r=e.dot(t),s=r.abs().toVar(),i=s.mul(.0145206).add(.4965155).mul(s).add(.8543985).toVar(),n=s.add(4.1616724).mul(s).add(3.417594).toVar(),a=i.div(n),o=r.greaterThan(0).select(a,jo(r.mul(r).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(a));return e.cross(t).mul(o)}).setLayout({name:"LTC_EdgeVectorFormFactor",type:"vec3",inputs:[{name:"v1",type:"vec3"},{name:"v2",type:"vec3"}]}),gm=dn(({N:e,V:t,P:r,mInv:s,p0:i,p1:n,p2:a,p3:o})=>{const u=n.sub(i).toVar(),l=o.sub(i).toVar(),d=u.cross(l),c=Sn().toVar();return pn(d.dot(r.sub(i)).greaterThanEqual(0),()=>{const u=t.sub(e.mul(t.dot(e))).normalize(),l=e.cross(u).negate(),d=s.mul(Ln(u,l,e).transpose()).toVar(),h=d.mul(i.sub(r)).normalize().toVar(),p=d.mul(n.sub(r)).normalize().toVar(),g=d.mul(a.sub(r)).normalize().toVar(),m=d.mul(o.sub(r)).normalize().toVar(),f=Sn(0).toVar();f.addAssign(pm({v1:h,v2:p})),f.addAssign(pm({v1:p,v2:g})),f.addAssign(pm({v1:g,v2:m})),f.addAssign(pm({v1:m,v2:h})),c.assign(Sn(hm({f:f})))}),c}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"P",type:"vec3"},{name:"mInv",type:"mat3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),mm=dn(({P:e,p0:t,p1:r,p2:s,p3:i})=>{const n=r.sub(t).toVar(),a=i.sub(t).toVar(),o=n.cross(a),u=Sn().toVar();return pn(o.dot(e.sub(t)).greaterThanEqual(0),()=>{const n=t.sub(e).normalize().toVar(),a=r.sub(e).normalize().toVar(),o=s.sub(e).normalize().toVar(),l=i.sub(e).normalize().toVar(),d=Sn(0).toVar();d.addAssign(pm({v1:n,v2:a})),d.addAssign(pm({v1:a,v2:o})),d.addAssign(pm({v1:o,v2:l})),d.addAssign(pm({v1:l,v2:n})),u.assign(Sn(hm({f:d.abs()})))}),u}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"P",type:"vec3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),fm=1/6,ym=e=>Pa(fm,Pa(e,Pa(e,e.negate().add(3)).sub(3)).add(1)),bm=e=>Pa(fm,Pa(e,Pa(e,Pa(3,e).sub(6))).add(4)),xm=e=>Pa(fm,Pa(e,Pa(e,Pa(-3,e).add(3)).add(3)).add(1)),Tm=e=>Pa(fm,eu(e,3)),_m=e=>ym(e).add(bm(e)),vm=e=>xm(e).add(Tm(e)),Nm=e=>Fa(-1,bm(e).div(ym(e).add(bm(e)))),Sm=e=>Fa(1,Tm(e).div(xm(e).add(Tm(e)))),Rm=(e,t,r)=>{const s=e.uvNode,i=Pa(s,t.zw).add(.5),n=vo(i),a=Ro(i),o=_m(a.x),u=vm(a.x),l=Nm(a.x),d=Sm(a.x),c=Nm(a.y),h=Sm(a.y),p=Tn(n.x.add(l),n.y.add(c)).sub(.5).mul(t.xy),g=Tn(n.x.add(d),n.y.add(c)).sub(.5).mul(t.xy),m=Tn(n.x.add(l),n.y.add(h)).sub(.5).mul(t.xy),f=Tn(n.x.add(d),n.y.add(h)).sub(.5).mul(t.xy),y=_m(a.y).mul(Fa(o.mul(e.sample(p).level(r)),u.mul(e.sample(g).level(r)))),b=vm(a.y).mul(Fa(o.mul(e.sample(m).level(r)),u.mul(e.sample(f).level(r))));return y.add(b)},Em=dn(([e,t])=>{const r=Tn(e.size(yn(t))),s=Tn(e.size(yn(t.add(1)))),i=Da(1,r),n=Da(1,s),a=Rm(e,wn(i,r),vo(t)),o=Rm(e,wn(n,s),No(t));return Ro(t).mix(a,o)}),Am=dn(([e,t])=>{const r=t.mul(Bl(e));return Em(e,r)}),wm=dn(([e,t,r,s,i])=>{const n=Sn(du(t.negate(),So(e),Da(1,s))),a=Sn(Po(i[0].xyz),Po(i[1].xyz),Po(i[2].xyz));return So(n).mul(r.mul(a))}).setLayout({name:"getVolumeTransmissionRay",type:"vec3",inputs:[{name:"n",type:"vec3"},{name:"v",type:"vec3"},{name:"thickness",type:"float"},{name:"ior",type:"float"},{name:"modelMatrix",type:"mat4"}]}),Cm=dn(([e,t])=>e.mul(uu(t.mul(2).sub(2),0,1))).setLayout({name:"applyIorToRoughness",type:"float",inputs:[{name:"roughness",type:"float"},{name:"ior",type:"float"}]}),Mm=Gp(),Bm=zp(),Fm=dn(([e,t,r],{material:s})=>{const i=(s.side===L?Mm:Bm).sample(e),n=xo(Ql.x).mul(Cm(t,r));return Em(i,n)}),Lm=dn(([e,t,r])=>(pn(r.notEqual(0),()=>{const s=bo(t).negate().div(r);return fo(s.negate().mul(e))}),Sn(1))).setLayout({name:"volumeAttenuation",type:"vec3",inputs:[{name:"transmissionDistance",type:"float"},{name:"attenuationColor",type:"vec3"},{name:"attenuationDistance",type:"float"}]}),Pm=dn(([e,t,r,s,i,n,a,o,u,l,d,c,h,p,g])=>{let m,f;if(g){m=wn().toVar(),f=Sn().toVar();const i=d.sub(1).mul(g.mul(.025)),n=Sn(d.sub(i),d,d.add(i));Ep({start:0,end:3},({i:i})=>{const d=n.element(i),g=wm(e,t,c,d,o),y=a.add(g),b=l.mul(u.mul(wn(y,1))),x=Tn(b.xy.div(b.w)).toVar();x.addAssign(1),x.divAssign(2),x.assign(Tn(x.x,x.y.oneMinus()));const T=Fm(x,r,d);m.element(i).assign(T.element(i)),m.a.addAssign(T.a),f.element(i).assign(s.element(i).mul(Lm(Po(g),h,p).element(i)))}),m.a.divAssign(3)}else{const i=wm(e,t,c,d,o),n=a.add(i),g=l.mul(u.mul(wn(n,1))),y=Tn(g.xy.div(g.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(Tn(y.x,y.y.oneMinus())),m=Fm(y,r,d),f=s.mul(Lm(Po(i),h,p))}const y=f.rgb.mul(m.rgb),b=e.dot(t).clamp(),x=Sn(am({dotNV:b,specularColor:i,specularF90:n,roughness:r})),T=f.r.add(f.g,f.b).div(3);return wn(x.oneMinus().mul(y),m.a.oneMinus().mul(T).oneMinus())}),Dm=Ln(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),Um=(e,t)=>e.sub(t).div(e.add(t)).pow2(),Im=dn(({outsideIOR:e,eta2:t,cosTheta1:r,thinFilmThickness:s,baseF0:i})=>{const n=ou(e,t,cu(0,.03,s)),a=e.div(n).pow2().mul(r.pow2().oneMinus()).oneMinus();pn(a.lessThan(0),()=>Sn(1));const o=a.sqrt(),u=Um(n,e),l=Vg({f0:u,f90:1,dotVH:r}),d=l.oneMinus(),c=n.lessThan(e).select(Math.PI,0),h=fn(Math.PI).sub(c),p=(e=>{const t=e.sqrt();return Sn(1).add(t).div(Sn(1).sub(t))})(i.clamp(0,.9999)),g=Um(p,n.toVec3()),m=Vg({f0:g,f90:1,dotVH:o}),f=Sn(p.x.lessThan(n).select(Math.PI,0),p.y.lessThan(n).select(Math.PI,0),p.z.lessThan(n).select(Math.PI,0)),y=n.mul(s,o,2),b=Sn(h).add(f),x=l.mul(m).clamp(1e-5,.9999),T=x.sqrt(),_=d.pow2().mul(m).div(Sn(1).sub(x)),v=l.add(_).toVar(),N=_.sub(d).toVar();return Ep({start:1,end:2,condition:"<=",name:"m"},({m:e})=>{N.mulAssign(T);const t=((e,t)=>{const r=e.mul(2*Math.PI*1e-9),s=Sn(54856e-17,44201e-17,52481e-17),i=Sn(1681e3,1795300,2208400),n=Sn(43278e5,93046e5,66121e5),a=fn(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(r.mul(2239900).add(t.x).cos()).mul(r.pow2().mul(-45282e5).exp());let o=s.mul(n.mul(2*Math.PI).sqrt()).mul(i.mul(r).add(t).cos()).mul(r.pow2().negate().mul(n).exp());return o=Sn(o.x.add(a),o.y,o.z).div(1.0685e-7),Dm.mul(o)})(fn(e).mul(y),fn(e).mul(b)).mul(2);v.addAssign(N.mul(t))}),v.max(Sn(0))}).setLayout({name:"evalIridescence",type:"vec3",inputs:[{name:"outsideIOR",type:"float"},{name:"eta2",type:"float"},{name:"cosTheta1",type:"float"},{name:"thinFilmThickness",type:"float"},{name:"baseF0",type:"vec3"}]}),Om=dn(({normal:e,viewDir:t,roughness:r})=>{const s=e.dot(t).saturate(),i=r.mul(r),n=r.add(.1).reciprocal(),a=fn(-1.9362).add(r.mul(1.0678)).add(i.mul(.4573)).sub(n.mul(.8469)),o=fn(-.6014).add(r.mul(.5538)).sub(i.mul(.467)).sub(n.mul(.1255));return a.mul(s).add(o).exp().saturate()}),Vm=Sn(.04),km=fn(1);class Gm extends Dg{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=r,this.anisotropy=s,this.transmission=i,this.dispersion=n,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null,this.iridescenceF0Dielectric=null,this.iridescenceF0Metallic=null}start(e){if(!0===this.clearcoat&&(this.clearcoatRadiance=Sn().toVar("clearcoatRadiance"),this.clearcoatSpecularDirect=Sn().toVar("clearcoatSpecularDirect"),this.clearcoatSpecularIndirect=Sn().toVar("clearcoatSpecularIndirect")),!0===this.sheen&&(this.sheenSpecularDirect=Sn().toVar("sheenSpecularDirect"),this.sheenSpecularIndirect=Sn().toVar("sheenSpecularIndirect")),!0===this.iridescence){const e=cc.dot(tc).clamp(),t=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:ra}),r=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:kn.rgb});this.iridescenceFresnel=ou(t,r,Wn),this.iridescenceF0Dielectric=om({f:t,f90:1,dotVH:e}),this.iridescenceF0Metallic=om({f:r,f90:1,dotVH:e}),this.iridescenceF0=ou(this.iridescenceF0Dielectric,this.iridescenceF0Metallic,Wn)}if(!0===this.transmission){const t=Zd,r=Rd.sub(Zd).normalize(),s=hc,i=e.context;i.backdrop=Pm(s,r,zn,Gn,sa,ia,t,Id,vd,Td,da,ha,ga,pa,this.dispersion?ma:null),i.backdropAlpha=ca,kn.a.mulAssign(ou(1,i.backdrop.a,ca))}super.start(e)}computeMultiscattering(e,t,r,s,i=null){const n=cc.dot(tc).clamp(),a=im({roughness:zn,dotNV:n}),o=i?Kn.mix(s,i):s,u=o.mul(a.x).add(r.mul(a.y)),l=a.x.add(a.y).oneMinus(),d=o.add(o.oneMinus().mul(.047619)),c=u.mul(d).div(l.mul(d).oneMinus());e.addAssign(u),t.addAssign(c.mul(l))}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t).toVar();if(!0===this.sheen){this.sheenSpecularDirect.addAssign(s.mul(dm({lightDirection:e})));const t=Om({normal:cc,viewDir:tc,roughness:Xn}),r=Om({normal:cc,viewDir:e,roughness:Xn}),i=jn.r.max(jn.g).max(jn.b).mul(t.max(r)).oneMinus();s.mulAssign(i)}if(!0===this.clearcoat){const r=pc.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(r.mul(tm({lightDirection:e,f0:Vm,f90:km,roughness:qn,normalView:pc})))}r.directDiffuse.addAssign(s.mul(kg({diffuseColor:Gn}))),r.directSpecular.addAssign(s.mul(nm({lightDirection:e,f0:sa,f90:1,roughness:zn,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s,reflectedLight:i,ltc_1:n,ltc_2:a}){const o=t.add(r).sub(s),u=t.sub(r).sub(s),l=t.sub(r).add(s),d=t.add(r).add(s),c=cc,h=tc,p=ec.toVar(),g=cm({N:c,V:h,roughness:zn}),m=n.sample(g).toVar(),f=a.sample(g).toVar(),y=Ln(Sn(m.x,0,m.y),Sn(0,1,0),Sn(m.z,0,m.w)).toVar(),b=sa.mul(f.x).add(ia.sub(sa).mul(f.y)).toVar();if(i.directSpecular.addAssign(e.mul(b).mul(gm({N:c,V:h,P:p,mInv:y,p0:o,p1:u,p2:l,p3:d}))),i.directDiffuse.addAssign(e.mul(Gn).mul(gm({N:c,V:h,P:p,mInv:Ln(1,0,0,0,1,0,0,0,1),p0:o,p1:u,p2:l,p3:d}))),!0===this.clearcoat){const t=pc,r=cm({N:t,V:h,roughness:qn}),s=n.sample(r),i=a.sample(r),c=Ln(Sn(s.x,0,s.y),Sn(0,1,0),Sn(s.z,0,s.w)),g=Vm.mul(i.x).add(km.sub(Vm).mul(i.y));this.clearcoatSpecularDirect.addAssign(e.mul(g).mul(gm({N:t,V:h,P:p,mInv:c,p0:o,p1:u,p2:l,p3:d})))}}indirect(e){this.indirectDiffuse(e),this.indirectSpecular(e),this.ambientOcclusion(e)}indirectDiffuse(e){const{irradiance:t,reflectedLight:r}=e.context,s=t.mul(kg({diffuseColor:Gn})).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();s.mulAssign(t)}r.indirectDiffuse.addAssign(s)}indirectSpecular(e){const{radiance:t,iblIrradiance:r,reflectedLight:s}=e.context;if(!0===this.sheen&&this.sheenSpecularIndirect.addAssign(r.mul(jn,Om({normal:cc,viewDir:tc,roughness:Xn}))),!0===this.clearcoat){const e=pc.dot(tc).clamp(),t=am({dotNV:e,specularColor:Vm,specularF90:km,roughness:qn});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(t))}const i=Sn().toVar("singleScatteringDielectric"),n=Sn().toVar("multiScatteringDielectric"),a=Sn().toVar("singleScatteringMetallic"),o=Sn().toVar("multiScatteringMetallic");this.computeMultiscattering(i,n,ia,ra,this.iridescenceF0Dielectric),this.computeMultiscattering(a,o,ia,kn.rgb,this.iridescenceF0Metallic);const u=ou(i,a,Wn),l=ou(n,o,Wn),d=i.add(n),c=Gn.mul(d.oneMinus()),h=r.mul(1/Math.PI),p=t.mul(u).add(l.mul(h)).toVar(),g=c.mul(h).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();p.mulAssign(t),g.mulAssign(t)}s.indirectSpecular.addAssign(p),s.indirectDiffuse.addAssign(g)}ambientOcclusion(e){const{ambientOcclusion:t,reflectedLight:r}=e.context,s=cc.dot(tc).clamp().add(t),i=zn.mul(-16).oneMinus().negate().exp2(),n=t.sub(s.pow(i).oneMinus()).clamp();!0===this.clearcoat&&this.clearcoatSpecularIndirect.mulAssign(t),!0===this.sheen&&this.sheenSpecularIndirect.mulAssign(t),r.indirectDiffuse.mulAssign(t),r.indirectSpecular.mulAssign(n)}finish({context:e}){const{outgoingLight:t}=e;if(!0===this.clearcoat){const e=pc.dot(tc).clamp(),r=Vg({dotVH:e,f0:Vm,f90:km}),s=t.mul(Hn.mul(r).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(Hn));t.assign(s)}if(!0===this.sheen){const e=t.add(this.sheenSpecularDirect,this.sheenSpecularIndirect.mul(1/Math.PI));t.assign(e)}}}const $m=fn(1),zm=fn(-2),Wm=fn(.8),Hm=fn(-1),qm=fn(.4),jm=fn(2),Xm=fn(.305),Km=fn(3),Qm=fn(.21),Ym=fn(4),Zm=fn(4),Jm=fn(16),ef=dn(([e])=>{const t=Sn(Fo(e)).toVar(),r=fn(-1).toVar();return pn(t.x.greaterThan(t.z),()=>{pn(t.x.greaterThan(t.y),()=>{r.assign(Tu(e.x.greaterThan(0),0,3))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}).Else(()=>{pn(t.z.greaterThan(t.y),()=>{r.assign(Tu(e.z.greaterThan(0),2,5))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}),r}).setLayout({name:"getFace",type:"float",inputs:[{name:"direction",type:"vec3"}]}),tf=dn(([e,t])=>{const r=Tn().toVar();return pn(t.equal(0),()=>{r.assign(Tn(e.z,e.y).div(Fo(e.x)))}).ElseIf(t.equal(1),()=>{r.assign(Tn(e.x.negate(),e.z.negate()).div(Fo(e.y)))}).ElseIf(t.equal(2),()=>{r.assign(Tn(e.x.negate(),e.y).div(Fo(e.z)))}).ElseIf(t.equal(3),()=>{r.assign(Tn(e.z.negate(),e.y).div(Fo(e.x)))}).ElseIf(t.equal(4),()=>{r.assign(Tn(e.x.negate(),e.z).div(Fo(e.y)))}).Else(()=>{r.assign(Tn(e.x,e.y).div(Fo(e.z)))}),Pa(.5,r.add(1))}).setLayout({name:"getUV",type:"vec2",inputs:[{name:"direction",type:"vec3"},{name:"face",type:"float"}]}),rf=dn(([e])=>{const t=fn(0).toVar();return pn(e.greaterThanEqual(Wm),()=>{t.assign($m.sub(e).mul(Hm.sub(zm)).div($m.sub(Wm)).add(zm))}).ElseIf(e.greaterThanEqual(qm),()=>{t.assign(Wm.sub(e).mul(jm.sub(Hm)).div(Wm.sub(qm)).add(Hm))}).ElseIf(e.greaterThanEqual(Xm),()=>{t.assign(qm.sub(e).mul(Km.sub(jm)).div(qm.sub(Xm)).add(jm))}).ElseIf(e.greaterThanEqual(Qm),()=>{t.assign(Xm.sub(e).mul(Ym.sub(Km)).div(Xm.sub(Qm)).add(Km))}).Else(()=>{t.assign(fn(-2).mul(xo(Pa(1.16,e))))}),t}).setLayout({name:"roughnessToMip",type:"float",inputs:[{name:"roughness",type:"float"}]}),sf=dn(([e,t])=>{const r=e.toVar();r.assign(Pa(2,r).sub(1));const s=Sn(r,1).toVar();return pn(t.equal(0),()=>{s.assign(s.zyx)}).ElseIf(t.equal(1),()=>{s.assign(s.xzy),s.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{s.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{s.assign(s.zyx),s.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{s.assign(s.xzy),s.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{s.z.mulAssign(-1)}),s}).setLayout({name:"getDirection",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"face",type:"float"}]}),nf=dn(([e,t,r,s,i,n])=>{const a=fn(r),o=Sn(t),u=uu(rf(a),zm,n),l=Ro(u),d=vo(u),c=Sn(af(e,o,d,s,i,n)).toVar();return pn(l.notEqual(0),()=>{const t=Sn(af(e,o,d.add(1),s,i,n)).toVar();c.assign(ou(c,t,l))}),c}),af=dn(([e,t,r,s,i,n])=>{const a=fn(r).toVar(),o=Sn(t),u=fn(ef(o)).toVar(),l=fn(jo(Zm.sub(a),0)).toVar();a.assign(jo(a,Zm));const d=fn(yo(a)).toVar(),c=Tn(tf(o,u).mul(d.sub(2)).add(1)).toVar();return pn(u.greaterThan(2),()=>{c.y.addAssign(d),u.subAssign(3)}),c.x.addAssign(u.mul(d)),c.x.addAssign(l.mul(Pa(3,Jm))),c.y.addAssign(Pa(4,yo(n).sub(d))),c.x.mulAssign(s),c.y.mulAssign(i),e.sample(c).grad(Tn(),Tn())}),of=dn(({envMap:e,mipInt:t,outputDirection:r,theta:s,axis:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Ao(s),l=r.mul(u).add(i.cross(r).mul(Eo(s))).add(i.mul(i.dot(r).mul(u.oneMinus())));return af(e,l,t,n,a,o)}),uf=dn(({n:e,latitudinal:t,poleAxis:r,outputDirection:s,weights:i,samples:n,dTheta:a,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})=>{const h=Sn(Tu(t,r,Jo(r,s))).toVar();pn(h.equal(Sn(0)),()=>{h.assign(Sn(s.z,0,s.x.negate()))}),h.assign(So(h));const p=Sn().toVar();return p.addAssign(i.element(0).mul(of({theta:0,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),Ep({start:yn(1),end:e},({i:e})=>{pn(e.greaterThanEqual(n),()=>{Ap()});const t=fn(a.mul(fn(e))).toVar();p.addAssign(i.element(e).mul(of({theta:t.mul(-1),axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),p.addAssign(i.element(e).mul(of({theta:t,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})))}),wn(p,1)}),lf=dn(([e])=>{const t=bn(e).toVar();return t.assign(t.shiftLeft(bn(16)).bitOr(t.shiftRight(bn(16)))),t.assign(t.bitAnd(bn(1431655765)).shiftLeft(bn(1)).bitOr(t.bitAnd(bn(2863311530)).shiftRight(bn(1)))),t.assign(t.bitAnd(bn(858993459)).shiftLeft(bn(2)).bitOr(t.bitAnd(bn(3435973836)).shiftRight(bn(2)))),t.assign(t.bitAnd(bn(252645135)).shiftLeft(bn(4)).bitOr(t.bitAnd(bn(4042322160)).shiftRight(bn(4)))),t.assign(t.bitAnd(bn(16711935)).shiftLeft(bn(8)).bitOr(t.bitAnd(bn(4278255360)).shiftRight(bn(8)))),fn(t).mul(2.3283064365386963e-10)}),df=dn(([e,t])=>Tn(fn(e).div(fn(t)),lf(e))),cf=dn(([e,t,r])=>{const s=r.mul(r).toConst(),i=Sn(1,0,0).toConst(),n=Jo(t,i).toConst(),a=To(e.x).toConst(),o=Pa(2,3.14159265359).mul(e.y).toConst(),u=a.mul(Ao(o)).toConst(),l=a.mul(Eo(o)).toVar(),d=Pa(.5,t.z.add(1)).toConst();l.assign(d.oneMinus().mul(To(u.mul(u).oneMinus())).add(d.mul(l)));const c=i.mul(u).add(n.mul(l)).add(t.mul(To(jo(0,u.mul(u).add(l.mul(l)).oneMinus()))));return So(Sn(s.mul(c.x),s.mul(c.y),jo(0,c.z)))}),hf=dn(({roughness:e,mipInt:t,envMap:r,N_immutable:s,GGX_SAMPLES:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Sn(s).toVar(),l=Sn(0).toVar(),d=fn(0).toVar();return pn(e.lessThan(.001),()=>{l.assign(af(r,u,t,n,a,o))}).Else(()=>{const s=Tu(Fo(u.z).lessThan(.999),Sn(0,0,1),Sn(1,0,0)),c=So(Jo(s,u)).toVar(),h=Jo(u,c).toVar();Ep({start:bn(0),end:i},({i:s})=>{const p=df(s,i),g=cf(p,Sn(0,0,1),e),m=So(c.mul(g.x).add(h.mul(g.y)).add(u.mul(g.z))),f=So(m.mul(Zo(u,m).mul(2)).sub(u)),y=jo(Zo(u,f),0);pn(y.greaterThan(0),()=>{const e=af(r,f,t,n,a,o);l.addAssign(e.mul(y)),d.addAssign(y)})}),pn(d.greaterThan(0),()=>{l.assign(l.div(d))})}),wn(l,1)}),pf=[.125,.215,.35,.446,.526,.582],gf=20,mf=new Se(-1,1,1,-1,0,1),ff=new Re(90,1),yf=new e;let bf=null,xf=0,Tf=0;const _f=new r,vf=new WeakMap,Nf=[3,1,5,0,4,2],Sf=sf(Al(),El("faceIndex")).normalize(),Rf=Sn(Sf.x,Sf.y,Sf.z);class Ef{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._ggxMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,r=.1,s=100,i={}){const{size:n=256,position:a=_f,renderTarget:o=null}=i;if(this._setSize(n),!1===this._hasInitialized){d('PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.');const n=o||this._allocateTarget();return i.renderTarget=n,this.fromSceneAsync(e,t,r,s,i),n}bf=this._renderer.getRenderTarget(),xf=this._renderer.getActiveCubeFace(),Tf=this._renderer.getActiveMipmapLevel();const u=o||this._allocateTarget();return u.depthBuffer=!0,this._init(u),this._sceneToCubeUV(e,r,s,u,a),t>0&&this._blur(u,0,0,t),this._applyPMREM(u),this._cleanup(u),u}async fromSceneAsync(e,t=0,r=.1,s=100,i={}){return v('PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this.fromScene(e,t,r,s,i)}fromEquirectangular(e,t=null){if(!1===this._hasInitialized){d('PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.'),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromEquirectangularAsync(e,r),r}return this._fromTexture(e,t)}async fromEquirectangularAsync(e,t=null){return v('PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}fromCubemap(e,t=null){if(!1===this._hasInitialized){d("PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead."),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromCubemapAsync(e,t),r}return this._fromTexture(e,t)}async fromCubemapAsync(e,t=null){return v('PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}async compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Bf(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===I||e.mapping===O?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=pf[a-e+4-1]:0===a&&(o=0),r.push(o);const u=1/(n-2),l=-u,d=1+u,c=[l,l,d,l,d,d,l,l,d,d,l,d],h=6,p=6,g=3,m=2,f=1,y=new Float32Array(g*p*h),b=new Float32Array(m*p*h),x=new Float32Array(f*p*h);for(let e=0;e2?0:-1,s=[t,r,0,t+2/3,r,0,t+2/3,r+1,0,t,r,0,t+2/3,r+1,0,t,r+1,0],i=Nf[e];y.set(s,g*p*i),b.set(c,m*p*i);const n=[i,i,i,i,i,i];x.set(n,f*p*i)}const T=new Ne;T.setAttribute("position",new Ce(y,g)),T.setAttribute("uv",new Ce(b,m)),T.setAttribute("faceIndex",new Ce(x,f)),s.push(new ue(T,null)),i>4&&i--}return{lodMeshes:s,sizeLods:t,sigmas:r}}(t)),this._blurMaterial=function(e,t,s){const i=$l(new Array(gf).fill(0)),n=Na(new r(0,1,0)),a=Na(0),o=fn(gf),u=Na(0),l=Na(1),d=Ul(),c=Na(0),h=fn(1/t),p=fn(1/s),g=fn(e),m={n:o,latitudinal:u,weights:i,poleAxis:n,outputDirection:Rf,dTheta:a,samples:l,envMap:d,mipInt:c,CUBEUV_TEXEL_WIDTH:h,CUBEUV_TEXEL_HEIGHT:p,CUBEUV_MAX_MIP:g},f=Cf("blur");return f.fragmentNode=uf({...m,latitudinal:u.equal(1)}),vf.set(f,m),f}(t,e.width,e.height),this._ggxMaterial=function(e,t,r){const s=Ul(),i=Na(0),n=Na(0),a=fn(1/t),o=fn(1/r),u=fn(e),l={envMap:s,roughness:i,mipInt:n,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:u},d=Cf("ggx");return d.fragmentNode=hf({...l,N_immutable:Rf,GGX_SAMPLES:bn(512)}),vf.set(d,l),d}(t,e.width,e.height)}}async _compileMaterial(e){const t=new ue(new Ne,e);await this._renderer.compile(t,mf)}_sceneToCubeUV(e,t,r,s,i){const n=ff;n.near=t,n.far=r;const a=[1,1,1,1,-1,1],o=[1,-1,1,-1,1,-1],u=this._renderer,l=u.autoClear;u.getClearColor(yf),u.autoClear=!1,null===this._backgroundBox&&(this._backgroundBox=new ue(new oe,new ye({name:"PMREM.Background",side:L,depthWrite:!1,depthTest:!1})));const d=this._backgroundBox,c=d.material;let h=!1;const p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,h=!0):(c.color.copy(yf),h=!0),u.setRenderTarget(s),u.clear(),h&&u.render(d,n);for(let t=0;t<6;t++){const r=t%3;0===r?(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x+o[t],i.y,i.z)):1===r?(n.up.set(0,0,a[t]),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y+o[t],i.z)):(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y,i.z+o[t]));const l=this._cubeSize;wf(s,r*l,t>2?l:0,l,l),u.render(e,n)}u.autoClear=l,e.background=p}_textureToCubeUV(e,t){const r=this._renderer,s=e.mapping===I||e.mapping===O;s?null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(e)):null===this._equirectMaterial&&(this._equirectMaterial=Bf(e));const i=s?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;const n=this._lodMeshes[0];n.material=i;const a=this._cubeSize;wf(t,0,0,3*a,2*a),r.setRenderTarget(t),r.render(n,mf)}_applyPMREM(e){const t=this._renderer,r=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let t=1;tc-4?r-c+4:0),g=4*(this._cubeSize-h);e.texture.frame=(e.texture.frame||0)+1,o.envMap.value=e.texture,o.roughness.value=d,o.mipInt.value=c-t,wf(i,p,g,3*h,2*h),s.setRenderTarget(i),s.render(a,mf),i.texture.frame=(i.texture.frame||0)+1,o.envMap.value=i.texture,o.roughness.value=0,o.mipInt.value=c-r,wf(e,p,g,3*h,2*h),s.setRenderTarget(e),s.render(a,mf)}_blur(e,t,r,s,i){const n=this._pingPongRenderTarget;this._halfBlur(e,n,t,r,s,"latitudinal",i),this._halfBlur(n,e,r,r,s,"longitudinal",i)}_halfBlur(e,t,r,s,i,n,a){const u=this._renderer,l=this._blurMaterial;"latitudinal"!==n&&"longitudinal"!==n&&o("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[s];c.material=l;const h=vf.get(l),p=this._sizeLods[r]-1,g=isFinite(i)?Math.PI/(2*p):2*Math.PI/39,m=i/g,f=isFinite(i)?1+Math.floor(3*m):gf;f>gf&&d(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const y=[];let b=0;for(let e=0;ex-4?s-x+4:0),4*(this._cubeSize-T),3*T,2*T),u.setRenderTarget(t),u.render(c,mf)}}function Af(e,t){const r=new ae(e,t,{magFilter:de,minFilter:de,generateMipmaps:!1,type:_e,format:Ae,colorSpace:Ee});return r.texture.mapping=we,r.texture.name="PMREM.cubeUv",r.texture.isPMREMTexture=!0,r.scissorTest=!0,r}function wf(e,t,r,s,i){e.viewport.set(t,r,s,i),e.scissor.set(t,r,s,i)}function Cf(e){const t=new yg;return t.depthTest=!1,t.depthWrite=!1,t.blending=se,t.name=`PMREM_${e}`,t}function Mf(e){const t=Cf("cubemap");return t.fragmentNode=Bc(e,Rf),t}function Bf(e){const t=Cf("equirect");return t.fragmentNode=Ul(e,Eg(Rf),0),t}const Ff=new WeakMap;function Lf(e,t,r){const s=function(e){let t=Ff.get(e);void 0===t&&(t=new WeakMap,Ff.set(e,t));return t}(t);let i=s.get(e);if((void 0!==i?i.pmremVersion:-1)!==e.pmremVersion){const t=e.image;if(e.isCubeTexture){if(!function(e){if(null==e)return!1;let t=0;const r=6;for(let s=0;s0}(t))return null;i=r.fromEquirectangular(e,i)}i.pmremVersion=e.pmremVersion,s.set(e,i)}return i.texture}class Pf extends pi{static get type(){return"PMREMNode"}constructor(e,t=null,r=null){super("vec3"),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=r,this._generator=null;const s=new N;s.isRenderTargetTexture=!0,this._texture=Ul(s),this._width=Na(0),this._height=Na(0),this._maxMip=Na(0),this.updateBeforeType=ti.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){const t=function(e){const t=Math.log2(e)-2,r=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:r,maxMip:t}}(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem;const r=t?t.pmremVersion:-1,s=this._value;r!==s.pmremVersion&&(t=!0===s.isPMREMTexture?s:Lf(s,e.renderer,this._generator),null!==t&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){null===this._generator&&(this._generator=new Ef(e.renderer)),this.updateBefore(e);let t=this.uvNode;null===t&&e.context.getUV&&(t=e.context.getUV(this,e)),t=Nc.mul(Sn(t.x,t.y.negate(),t.z));let r=this.levelNode;return null===r&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),nf(this._texture,t,r,this._width,this._height,this._maxMip)}dispose(){super.dispose(),null!==this._generator&&this._generator.dispose()}}const Df=nn(Pf).setParameterLength(1,3),Uf=new WeakMap;class If extends Lp{static get type(){return"EnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){const{material:t}=e;let r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){const s=r.isTextureNode?r.value:t[r.property],i=this._getPMREMNodeCache(e.renderer);let n=i.get(s);void 0===n&&(n=Df(s),i.set(s,n)),r=n}const s=!0===t.useAnisotropy||t.anisotropy>0?lh:cc,i=r.context(Of(zn,s)).mul(vc),n=r.context(Vf(hc)).mul(Math.PI).mul(vc),a=ul(i),o=ul(n);e.context.radiance.addAssign(a),e.context.iblIrradiance.addAssign(o);const u=e.context.lightingModel.clearcoatRadiance;if(u){const e=r.context(Of(qn,pc)).mul(vc),t=ul(e);u.addAssign(t)}}_getPMREMNodeCache(e){let t=Uf.get(e);return void 0===t&&(t=new WeakMap,Uf.set(e,t)),t}}const Of=(e,t)=>{let r=null;return{getUV:()=>(null===r&&(r=tc.negate().reflect(t),r=su(e).mix(r,t).normalize(),r=r.transformDirection(vd)),r),getTextureLevel:()=>e}},Vf=e=>({getUV:()=>e,getTextureLevel:()=>fn(1)}),kf=new Me;class Gf extends yg{static get type(){return"MeshStandardNodeMaterial"}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(kf),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return null===t&&e.environmentNode&&(t=e.environmentNode),t?new If(t):null}setupLightingModel(){return new Gm}setupSpecular(){const e=ou(Sn(.04),kn.rgb,Wn);ra.assign(Sn(.04)),sa.assign(e),ia.assign(1)}setupVariants(){const e=this.metalnessNode?fn(this.metalnessNode):Bh;Wn.assign(e);let t=this.roughnessNode?fn(this.roughnessNode):Mh;t=Kg({roughness:t}),zn.assign(t),this.setupSpecular(),Gn.assign(kn.rgb.mul(e.oneMinus()))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}}const $f=new Be;class zf extends Gf{static get type(){return"MeshPhysicalNodeMaterial"}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues($f),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||null!==this.clearcoatNode}get useIridescence(){return this.iridescence>0||null!==this.iridescenceNode}get useSheen(){return this.sheen>0||null!==this.sheenNode}get useAnisotropy(){return this.anisotropy>0||null!==this.anisotropyNode}get useTransmission(){return this.transmission>0||null!==this.transmissionNode}get useDispersion(){return this.dispersion>0||null!==this.dispersionNode}setupSpecular(){const e=this.iorNode?fn(this.iorNode):Hh;da.assign(e),ra.assign(qo(tu(da.sub(1).div(da.add(1))).mul(Ah),Sn(1)).mul(Eh)),sa.assign(ou(ra,kn.rgb,Wn)),ia.assign(ou(Eh,1,Wn))}setupLightingModel(){return new Gm(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){const e=this.clearcoatNode?fn(this.clearcoatNode):Lh,t=this.clearcoatRoughnessNode?fn(this.clearcoatRoughnessNode):Ph;Hn.assign(e),qn.assign(Kg({roughness:t}))}if(this.useSheen){const e=this.sheenNode?Sn(this.sheenNode):Ih,t=this.sheenRoughnessNode?fn(this.sheenRoughnessNode):Oh;jn.assign(e),Xn.assign(t)}if(this.useIridescence){const e=this.iridescenceNode?fn(this.iridescenceNode):kh,t=this.iridescenceIORNode?fn(this.iridescenceIORNode):Gh,r=this.iridescenceThicknessNode?fn(this.iridescenceThicknessNode):$h;Kn.assign(e),Qn.assign(t),Yn.assign(r)}if(this.useAnisotropy){const e=(this.anisotropyNode?Tn(this.anisotropyNode):Vh).toVar();Jn.assign(e.length()),pn(Jn.equal(0),()=>{e.assign(Tn(1,0))}).Else(()=>{e.divAssign(Tn(Jn)),Jn.assign(Jn.saturate())}),Zn.assign(Jn.pow2().mix(zn.pow2(),1)),ea.assign(oh[0].mul(e.x).add(oh[1].mul(e.y))),ta.assign(oh[1].mul(e.x).sub(oh[0].mul(e.y)))}if(this.useTransmission){const e=this.transmissionNode?fn(this.transmissionNode):zh,t=this.thicknessNode?fn(this.thicknessNode):Wh,r=this.attenuationDistanceNode?fn(this.attenuationDistanceNode):qh,s=this.attenuationColorNode?Sn(this.attenuationColorNode):jh;if(ca.assign(e),ha.assign(t),pa.assign(r),ga.assign(s),this.useDispersion){const e=this.dispersionNode?fn(this.dispersionNode):ep;ma.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?Sn(this.clearcoatNormalNode):Dh}setup(e){e.context.setupClearcoatNormal=()=>Pu(this.setupClearcoatNormal(e),"NORMAL","vec3"),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.iorNode=e.iorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}}class Wf extends Gm{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1,a=!1){super(e,t,r,s,i,n),this.useSSS=a}direct({lightDirection:e,lightColor:t,reflectedLight:r},s){if(!0===this.useSSS){const i=s.material,{thicknessColorNode:n,thicknessDistortionNode:a,thicknessAmbientNode:o,thicknessAttenuationNode:u,thicknessPowerNode:l,thicknessScaleNode:d}=i,c=e.add(cc.mul(a)).normalize(),h=fn(tc.dot(c.negate()).saturate().pow(l).mul(d)),p=Sn(h.add(o).mul(n));r.directDiffuse.addAssign(p.mul(u.mul(t)))}super.direct({lightDirection:e,lightColor:t,reflectedLight:r},s)}}class Hf extends zf{static get type(){return"MeshSSSNodeMaterial"}constructor(e){super(e),this.thicknessColorNode=null,this.thicknessDistortionNode=fn(.1),this.thicknessAmbientNode=fn(0),this.thicknessAttenuationNode=fn(.1),this.thicknessPowerNode=fn(2),this.thicknessScaleNode=fn(10)}get useSSS(){return null!==this.thicknessColorNode}setupLightingModel(){return new Wf(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion,this.useSSS)}copy(e){return this.thicknessColorNode=e.thicknessColorNode,this.thicknessDistortionNode=e.thicknessDistortionNode,this.thicknessAmbientNode=e.thicknessAmbientNode,this.thicknessAttenuationNode=e.thicknessAttenuationNode,this.thicknessPowerNode=e.thicknessPowerNode,this.thicknessScaleNode=e.thicknessScaleNode,super.copy(e)}}const qf=dn(({normal:e,lightDirection:t,builder:r})=>{const s=e.dot(t),i=Tn(s.mul(.5).add(.5),0);if(r.material.gradientMap){const e=Ic("gradientMap","texture").context({getUV:()=>i});return Sn(e.r)}{const e=i.fwidth().mul(.5);return ou(Sn(.7),Sn(1),cu(fn(.7).sub(e.x),fn(.7).add(e.x),i.x))}});class jf extends Dg{direct({lightDirection:e,lightColor:t,reflectedLight:r},s){const i=qf({normal:ac,lightDirection:e,builder:s}).mul(t);r.directDiffuse.addAssign(i.mul(kg({diffuseColor:kn.rgb})))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Xf=new Fe;class Kf extends yg{static get type(){return"MeshToonNodeMaterial"}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Xf),this.setValues(e)}setupLightingModel(){return new jf}}const Qf=dn(()=>{const e=Sn(tc.z,0,tc.x.negate()).normalize(),t=tc.cross(e);return Tn(e.dot(cc),t.dot(cc)).mul(.495).add(.5)}).once(["NORMAL","VERTEX"])().toVar("matcapUV"),Yf=new Le;class Zf extends yg{static get type(){return"MeshMatcapNodeMaterial"}constructor(e){super(),this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(Yf),this.setValues(e)}setupVariants(e){const t=Qf;let r;r=e.material.matcap?Ic("matcap","texture").context({getUV:()=>t}):Sn(ou(.2,.8,t.y)),kn.rgb.mulAssign(r.rgb)}}class Jf extends pi{static get type(){return"RotateNode"}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){const{rotationNode:t,positionNode:r}=this;if("vec2"===this.getNodeType(e)){const e=t.cos(),s=t.sin();return Fn(e,s,s.negate(),e).mul(r)}{const e=t,s=Pn(wn(1,0,0,0),wn(0,Ao(e.x),Eo(e.x).negate(),0),wn(0,Eo(e.x),Ao(e.x),0),wn(0,0,0,1)),i=Pn(wn(Ao(e.y),0,Eo(e.y),0),wn(0,1,0,0),wn(Eo(e.y).negate(),0,Ao(e.y),0),wn(0,0,0,1)),n=Pn(wn(Ao(e.z),Eo(e.z).negate(),0,0),wn(Eo(e.z),Ao(e.z),0,0),wn(0,0,1,0),wn(0,0,0,1));return s.mul(i).mul(n).mul(wn(r,1)).xyz}}}const ey=nn(Jf).setParameterLength(2),ty=new Pe;class ry extends yg{static get type(){return"SpriteNodeMaterial"}constructor(e){super(),this.isSpriteNodeMaterial=!0,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.transparent=!0,this.setDefaultValues(ty),this.setValues(e)}setupPositionView(e){const{object:t,camera:r}=e,{positionNode:s,rotationNode:i,scaleNode:n,sizeAttenuation:a}=this,o=Wd.mul(Sn(s||0));let u=Tn(Id[0].xyz.length(),Id[1].xyz.length());null!==n&&(u=u.mul(Tn(n))),r.isPerspectiveCamera&&!1===a&&(u=u.mul(o.z.negate()));let l=Kd.xy;if(t.center&&!0===t.center.isVector2){const e=((e,t,r)=>new Hu(e,t,r))("center","vec2",t);l=l.sub(e.sub(.5))}l=l.mul(u);const d=fn(i||Uh),c=ey(l,d);return wn(o.xy.add(c),o.zw)}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}}const sy=new De,iy=new t;class ny extends ry{static get type(){return"PointsNodeMaterial"}constructor(e){super(),this.sizeNode=null,this.isPointsNodeMaterial=!0,this.setDefaultValues(sy),this.setValues(e)}setupPositionView(){const{positionNode:e}=this;return Wd.mul(Sn(e||Qd)).xyz}setupVertexSprite(e){const{material:t,camera:r}=e,{rotationNode:s,scaleNode:i,sizeNode:n,sizeAttenuation:a}=this;let o=super.setupVertex(e);if(!0!==t.isNodeMaterial)return o;let u=null!==n?Tn(n):Jh;u=u.mul(Xl),r.isPerspectiveCamera&&!0===a&&(u=u.mul(ay.div(ec.z.negate()))),i&&i.isNode&&(u=u.mul(Tn(i)));let l=Kd.xy;if(s&&s.isNode){const e=fn(s);l=ey(l,e)}return l=l.mul(u),l=l.div(Jl.div(2)),l=l.mul(o.w),o=o.add(wn(l,0,0)),o}setupVertex(e){return e.object.isPoints?super.setupVertex(e):this.setupVertexSprite(e)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const ay=Na(1).onFrameUpdate(function({renderer:e}){const t=e.getSize(iy);this.value=.5*t.y});class oy extends Dg{constructor(){super(),this.shadowNode=fn(1).toVar("shadowMask")}direct({lightNode:e}){null!==e.shadowNode&&this.shadowNode.mulAssign(e.shadowNode)}finish({context:e}){kn.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(kn.rgb)}}const uy=new Ue;class ly extends yg{static get type(){return"ShadowNodeMaterial"}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.transparent=!0,this.setDefaultValues(uy),this.setValues(e)}setupLightingModel(){return new oy}}const dy=On("vec3"),cy=On("vec3"),hy=On("vec3");class py extends Dg{constructor(){super()}start(e){const{material:t}=e,r=On("vec3"),s=On("vec3");pn(Rd.sub(Zd).length().greaterThan(Gd.mul(2)),()=>{r.assign(Rd),s.assign(Zd)}).Else(()=>{r.assign(Zd),s.assign(Rd)});const i=s.sub(r),n=Na("int").onRenderUpdate(({material:e})=>e.steps),a=i.length().div(n).toVar(),o=i.normalize().toVar(),u=fn(0).toVar(),l=Sn(1).toVar();t.offsetNode&&u.addAssign(t.offsetNode.mul(a)),Ep(n,()=>{const s=r.add(o.mul(u)),i=vd.mul(wn(s,1)).xyz;let n;null!==t.depthNode&&(cy.assign(rg(Qp(i.z,bd,xd))),e.context.sceneDepthNode=rg(t.depthNode).toVar()),e.context.positionWorld=s,e.context.shadowPositionWorld=s,e.context.positionView=i,dy.assign(0),t.scatteringNode&&(n=t.scatteringNode({positionRay:s})),super.start(e),n&&dy.mulAssign(n);const d=dy.mul(.01).negate().mul(a).exp();l.mulAssign(d),u.addAssign(a)}),hy.addAssign(l.saturate().oneMinus())}scatteringLight(e,t){const r=t.context.sceneDepthNode;r?pn(r.greaterThanEqual(cy),()=>{dy.addAssign(e)}):dy.addAssign(e)}direct({lightNode:e,lightColor:t},r){if(void 0===e.light.distance)return;const s=t.xyz.toVar();s.mulAssign(e.shadowNode),this.scatteringLight(s,r)}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s},i){const n=t.add(r).sub(s),a=t.sub(r).sub(s),o=t.sub(r).add(s),u=t.add(r).add(s),l=i.context.positionView,d=e.xyz.mul(mm({P:l,p0:n,p1:a,p2:o,p3:u})).pow(1.5);this.scatteringLight(d,i)}finish(e){e.context.outgoingLight.assign(hy)}}class gy extends yg{static get type(){return"VolumeNodeMaterial"}constructor(e){super(),this.isVolumeNodeMaterial=!0,this.steps=25,this.offsetNode=null,this.scatteringNode=null,this.lights=!0,this.transparent=!0,this.side=L,this.depthTest=!1,this.depthWrite=!1,this.setValues(e)}setupLightingModel(){return new py}}class my{constructor(e,t,r){this.renderer=e,this.nodes=t,this.info=r,this._context="undefined"!=typeof self?self:null,this._animationLoop=null,this._requestId=null}start(){const e=(t,r)=>{this._requestId=this._context.requestAnimationFrame(e),!0===this.info.autoReset&&this.info.reset(),this.nodes.nodeFrame.update(),this.info.frame=this.nodes.nodeFrame.frameId,this.renderer._inspector.begin(),null!==this._animationLoop&&this._animationLoop(t,r),this.renderer._inspector.finish()};e()}stop(){this._context.cancelAnimationFrame(this._requestId),this._requestId=null}getAnimationLoop(){return this._animationLoop}setAnimationLoop(e){this._animationLoop=e}getContext(){return this._context}setContext(e){this._context=e}dispose(){this.stop()}}class fy{constructor(){this.weakMaps={}}_getWeakMap(e){const t=e.length;let r=this.weakMaps[t];return void 0===r&&(r=new WeakMap,this.weakMaps[t]=r),r}get(e){let t=this._getWeakMap(e);for(let r=0;r{this.dispose()},this.onGeometryDispose=()=>{this.attributes=null,this.attributesId=null},this.material.addEventListener("dispose",this.onMaterialDispose),this.geometry.addEventListener("dispose",this.onGeometryDispose)}updateClipping(e){this.clippingContext=e}get clippingNeedsUpdate(){return null!==this.clippingContext&&this.clippingContext.cacheKey!==this.clippingContextCacheKey&&(this.clippingContextCacheKey=this.clippingContext.cacheKey,!0)}get hardwareClippingPlanes(){return!0===this.material.hardwareClipping?this.clippingContext.unionClippingCount:0}getNodeBuilderState(){return this._nodeBuilderState||(this._nodeBuilderState=this._nodes.getForRender(this))}getMonitor(){return this._monitor||(this._monitor=this.getNodeBuilderState().observer)}getBindings(){return this._bindings||(this._bindings=this.getNodeBuilderState().createBindings())}getBindingGroup(e){for(const t of this.getBindings())if(t.name===e)return t}getIndex(){return this._geometries.getIndex(this)}getIndirect(){return this._geometries.getIndirect(this)}getIndirectOffset(){return this._geometries.getIndirectOffset(this)}getChainArray(){return[this.object,this.material,this.context,this.lightsNode]}setGeometry(e){this.geometry=e,this.attributes=null,this.attributesId=null}getAttributes(){if(null!==this.attributes)return this.attributes;const e=this.getNodeBuilderState().nodeAttributes,t=this.geometry,r=[],s=new Set,i={};for(const n of e){let e;if(n.node&&n.node.attribute?e=n.node.attribute:(e=t.getAttribute(n.name),i[n.name]=e.id),void 0===e)continue;r.push(e);const a=e.isInterleavedBufferAttribute?e.data:e;s.add(a)}return this.attributes=r,this.attributesId=i,this.vertexBuffers=Array.from(s.values()),r}getVertexBuffers(){return null===this.vertexBuffers&&this.getAttributes(),this.vertexBuffers}getDrawParameters(){const{object:e,material:t,geometry:r,group:s,drawRange:i}=this,n=this.drawParams||(this.drawParams={vertexCount:0,firstVertex:0,instanceCount:0,firstInstance:0}),a=this.getIndex(),o=null!==a;let u=1;if(!0===r.isInstancedBufferGeometry?u=r.instanceCount:void 0!==e.count&&(u=Math.max(0,e.count)),0===u)return null;if(n.instanceCount=u,!0===e.isBatchedMesh)return n;let l=1;!0!==t.wireframe||e.isPoints||e.isLineSegments||e.isLine||e.isLineLoop||(l=2);let d=i.start*l,c=(i.start+i.count)*l;null!==s&&(d=Math.max(d,s.start*l),c=Math.min(c,(s.start+s.count)*l));const h=r.attributes.position;let p=1/0;o?p=a.count:null!=h&&(p=h.count),d=Math.max(d,0),c=Math.min(c,p);const g=c-d;return g<0||g===1/0?null:(n.vertexCount=g,n.firstVertex=d,n)}getGeometryCacheKey(){const{geometry:e}=this;let t="";for(const r of Object.keys(e.attributes).sort()){const s=e.attributes[r];t+=r+",",s.data&&(t+=s.data.stride+","),s.offset&&(t+=s.offset+","),s.itemSize&&(t+=s.itemSize+","),s.normalized&&(t+="n,")}for(const r of Object.keys(e.morphAttributes).sort()){const s=e.morphAttributes[r];t+="morph-"+r+",";for(let e=0,r=s.length;e1||Array.isArray(e.morphTargetInfluences))&&(s+=e.uuid+","),s+=this.context.id+",",s+=e.receiveShadow+",",Os(s)}get needsGeometryUpdate(){if(this.geometry.id!==this.object.geometry.id)return!0;if(null!==this.attributes){const e=this.attributesId;for(const t in e){const r=this.geometry.getAttribute(t);if(void 0===r||e[t]!==r.id)return!0}}return!1}get needsUpdate(){return this.initialNodesCacheKey!==this.getDynamicCacheKey()||this.clippingNeedsUpdate}getDynamicCacheKey(){let e=0;return!0!==this.material.isShadowPassMaterial&&(e=this._nodes.getCacheKey(this.scene,this.lightsNode)),this.camera.isArrayCamera&&(e=ks(e,this.camera.cameras.length)),this.object.receiveShadow&&(e=ks(e,1)),e=ks(e,this.renderer.contextNode.id,this.renderer.contextNode.version),e}getCacheKey(){return this.getMaterialCacheKey()+this.getDynamicCacheKey()}dispose(){this.material.removeEventListener("dispose",this.onMaterialDispose),this.geometry.removeEventListener("dispose",this.onGeometryDispose),this.onDispose()}}const xy=[];class Ty{constructor(e,t,r,s,i,n){this.renderer=e,this.nodes=t,this.geometries=r,this.pipelines=s,this.bindings=i,this.info=n,this.chainMaps={}}get(e,t,r,s,i,n,a,o){const u=this.getChainMap(o);xy[0]=e,xy[1]=t,xy[2]=n,xy[3]=i;let l=u.get(xy);return void 0===l?(l=this.createRenderObject(this.nodes,this.geometries,this.renderer,e,t,r,s,i,n,a,o),u.set(xy,l)):(l.camera=s,l.updateClipping(a),l.needsGeometryUpdate&&l.setGeometry(e.geometry),(l.version!==t.version||l.needsUpdate)&&(l.initialCacheKey!==l.getCacheKey()?(l.dispose(),l=this.get(e,t,r,s,i,n,a,o)):l.version=t.version)),xy[0]=null,xy[1]=null,xy[2]=null,xy[3]=null,l}getChainMap(e="default"){return this.chainMaps[e]||(this.chainMaps[e]=new fy)}dispose(){this.chainMaps={}}createRenderObject(e,t,r,s,i,n,a,o,u,l,d){const c=this.getChainMap(d),h=new by(e,t,r,s,i,n,a,o,u,l);return h.onDispose=()=>{this.pipelines.delete(h),this.bindings.deleteForRender(h),this.nodes.delete(h),c.delete(h.getChainArray())},h}}class _y{constructor(){this.data=new WeakMap}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}delete(e){let t=null;return this.data.has(e)&&(t=this.data.get(e),this.data.delete(e)),t}has(e){return this.data.has(e)}dispose(){this.data=new WeakMap}}const vy=1,Ny=2,Sy=3,Ry=4,Ey=16;class Ay extends _y{constructor(e){super(),this.backend=e}delete(e){const t=super.delete(e);return null!==t&&this.backend.destroyAttribute(e),t}update(e,t){const r=this.get(e);if(void 0===r.version)t===vy?this.backend.createAttribute(e):t===Ny?this.backend.createIndexAttribute(e):t===Sy?this.backend.createStorageAttribute(e):t===Ry&&this.backend.createIndirectStorageAttribute(e),r.version=this._getBufferAttribute(e).version;else{const t=this._getBufferAttribute(e);(r.version=65535?Ie:Oe)(t,1);return i.version=wy(e),i.__id=Cy(e),i}class By extends _y{constructor(e,t){super(),this.attributes=e,this.info=t,this.wireframes=new WeakMap,this.attributeCall=new WeakMap,this._geometryDisposeListeners=new Map}has(e){const t=e.geometry;return super.has(t)&&!0===this.get(t).initialized}updateForRender(e){!1===this.has(e)&&this.initGeometry(e),this.updateAttributes(e)}initGeometry(e){const t=e.geometry;this.get(t).initialized=!0,this.info.memory.geometries++;const r=()=>{this.info.memory.geometries--;const s=t.index,i=e.getAttributes();null!==s&&this.attributes.delete(s);for(const e of i)this.attributes.delete(e);const n=this.wireframes.get(t);void 0!==n&&this.attributes.delete(n),t.removeEventListener("dispose",r),this._geometryDisposeListeners.delete(t)};t.addEventListener("dispose",r),this._geometryDisposeListeners.set(t,r)}updateAttributes(e){const t=e.getAttributes();for(const e of t)e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute?this.updateAttribute(e,Sy):this.updateAttribute(e,vy);const r=this.getIndex(e);null!==r&&this.updateAttribute(r,Ny);const s=e.geometry.indirect;null!==s&&this.updateAttribute(s,Ry)}updateAttribute(e,t){const r=this.info.render.calls;e.isInterleavedBufferAttribute?void 0===this.attributeCall.get(e)?(this.attributes.update(e,t),this.attributeCall.set(e,r)):this.attributeCall.get(e.data)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e.data,r),this.attributeCall.set(e,r)):this.attributeCall.get(e)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e,r))}getIndirect(e){return e.geometry.indirect}getIndirectOffset(e){return e.geometry.indirectOffset}getIndex(e){const{geometry:t,material:r}=e;let s=t.index;if(!0===r.wireframe){const e=this.wireframes;let r=e.get(t);void 0===r?(r=My(t),e.set(t,r)):r.version===wy(t)&&r.__id===Cy(t)||(this.attributes.delete(r),r=My(t),e.set(t,r)),s=r}return s}dispose(){for(const[e,t]of this._geometryDisposeListeners.entries())e.removeEventListener("dispose",t);this._geometryDisposeListeners.clear()}}class Fy{constructor(){this.autoReset=!0,this.frame=0,this.calls=0,this.render={calls:0,frameCalls:0,drawCalls:0,triangles:0,points:0,lines:0,timestamp:0},this.compute={calls:0,frameCalls:0,timestamp:0},this.memory={geometries:0,textures:0}}update(e,t,r){this.render.drawCalls++,e.isMesh||e.isSprite?this.render.triangles+=r*(t/3):e.isPoints?this.render.points+=r*t:e.isLineSegments?this.render.lines+=r*(t/2):e.isLine?this.render.lines+=r*(t-1):o("WebGPUInfo: Unknown object type.")}reset(){this.render.drawCalls=0,this.render.frameCalls=0,this.compute.frameCalls=0,this.render.triangles=0,this.render.points=0,this.render.lines=0}dispose(){this.reset(),this.calls=0,this.render.calls=0,this.compute.calls=0,this.render.timestamp=0,this.compute.timestamp=0,this.memory.geometries=0,this.memory.textures=0}}class Ly{constructor(e){this.cacheKey=e,this.usedTimes=0}}class Py extends Ly{constructor(e,t,r){super(e),this.vertexProgram=t,this.fragmentProgram=r}}class Dy extends Ly{constructor(e,t){super(e),this.computeProgram=t,this.isComputePipeline=!0}}let Uy=0;class Iy{constructor(e,t,r,s=null,i=null){this.id=Uy++,this.code=e,this.stage=t,this.name=r,this.transforms=s,this.attributes=i,this.usedTimes=0}}class Oy extends _y{constructor(e,t){super(),this.backend=e,this.nodes=t,this.bindings=null,this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}getForCompute(e,t){const{backend:r}=this,s=this.get(e);if(this._needsComputeUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.computeProgram.usedTimes--);const n=this.nodes.getForCompute(e);let a=this.programs.compute.get(n.computeShader);void 0===a&&(i&&0===i.computeProgram.usedTimes&&this._releaseProgram(i.computeProgram),a=new Iy(n.computeShader,"compute",e.name,n.transforms,n.nodeAttributes),this.programs.compute.set(n.computeShader,a),r.createProgram(a));const o=this._getComputeCacheKey(e,a);let u=this.caches.get(o);void 0===u&&(i&&0===i.usedTimes&&this._releasePipeline(i),u=this._getComputePipeline(e,a,o,t)),u.usedTimes++,a.usedTimes++,s.version=e.version,s.pipeline=u}return s.pipeline}getForRender(e,t=null){const{backend:r}=this,s=this.get(e);if(this._needsRenderUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.vertexProgram.usedTimes--,i.fragmentProgram.usedTimes--);const n=e.getNodeBuilderState(),a=e.material?e.material.name:"";let o=this.programs.vertex.get(n.vertexShader);void 0===o&&(i&&0===i.vertexProgram.usedTimes&&this._releaseProgram(i.vertexProgram),o=new Iy(n.vertexShader,"vertex",a),this.programs.vertex.set(n.vertexShader,o),r.createProgram(o));let u=this.programs.fragment.get(n.fragmentShader);void 0===u&&(i&&0===i.fragmentProgram.usedTimes&&this._releaseProgram(i.fragmentProgram),u=new Iy(n.fragmentShader,"fragment",a),this.programs.fragment.set(n.fragmentShader,u),r.createProgram(u));const l=this._getRenderCacheKey(e,o,u);let d=this.caches.get(l);void 0===d?(i&&0===i.usedTimes&&this._releasePipeline(i),d=this._getRenderPipeline(e,o,u,l,t)):e.pipeline=d,d.usedTimes++,o.usedTimes++,u.usedTimes++,s.pipeline=d}return s.pipeline}isReady(e){const t=this.get(e).pipeline;if(void 0===t)return!1;const r=this.backend.get(t);return void 0!==r.pipeline&&null!==r.pipeline}delete(e){const t=this.get(e).pipeline;return t&&(t.usedTimes--,0===t.usedTimes&&this._releasePipeline(t),t.isComputePipeline?(t.computeProgram.usedTimes--,0===t.computeProgram.usedTimes&&this._releaseProgram(t.computeProgram)):(t.fragmentProgram.usedTimes--,t.vertexProgram.usedTimes--,0===t.vertexProgram.usedTimes&&this._releaseProgram(t.vertexProgram),0===t.fragmentProgram.usedTimes&&this._releaseProgram(t.fragmentProgram))),super.delete(e)}dispose(){super.dispose(),this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}updateForRender(e){this.getForRender(e)}_getComputePipeline(e,t,r,s){r=r||this._getComputeCacheKey(e,t);let i=this.caches.get(r);return void 0===i&&(i=new Dy(r,t),this.caches.set(r,i),this.backend.createComputePipeline(i,s)),i}_getRenderPipeline(e,t,r,s,i){s=s||this._getRenderCacheKey(e,t,r);let n=this.caches.get(s);return void 0===n&&(n=new Py(s,t,r),this.caches.set(s,n),e.pipeline=n,this.backend.createRenderPipeline(e,i)),n}_getComputeCacheKey(e,t){return e.id+","+t.id}_getRenderCacheKey(e,t,r){return t.id+","+r.id+","+this.backend.getRenderCacheKey(e)}_releasePipeline(e){this.caches.delete(e.cacheKey)}_releaseProgram(e){const t=e.code,r=e.stage;this.programs[r].delete(t)}_needsComputeUpdate(e){const t=this.get(e);return void 0===t.pipeline||t.version!==e.version}_needsRenderUpdate(e){return void 0===this.get(e).pipeline||this.backend.needsRenderUpdate(e)}}class Vy extends _y{constructor(e,t,r,s,i,n){super(),this.backend=e,this.textures=r,this.pipelines=i,this.attributes=s,this.nodes=t,this.info=n,this.pipelines.bindings=this}getForRender(e){const t=e.getBindings();for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}getForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}updateForCompute(e){this._updateBindings(this.getForCompute(e))}updateForRender(e){this._updateBindings(this.getForRender(e))}deleteForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}deleteForRender(e){const t=e.getBindings();for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}_updateBindings(e){for(const t of e)this._update(t,e)}_init(e){for(const t of e.bindings)if(t.isSampledTexture)this.textures.updateTexture(t.texture);else if(t.isSampler)this.textures.updateSampler(t.texture);else if(t.isStorageBuffer){const e=t.attribute,r=e.isIndirectStorageBufferAttribute?Ry:Sy;this.attributes.update(e,r)}}_update(e,t){const{backend:r}=this;let s=!1,i=!0,n=0,a=0;for(const t of e.bindings){if(!1!==this.nodes.updateGroup(t)){if(t.isStorageBuffer){const e=t.attribute,i=e.isIndirectStorageBufferAttribute?Ry:Sy,n=r.get(t);this.attributes.update(e,i),n.attribute!==e&&(n.attribute=e,s=!0)}if(t.isUniformBuffer){t.update()&&r.updateBinding(t)}else if(t.isSampledTexture){const o=t.update(),u=t.texture,l=this.textures.get(u);o&&(this.textures.updateTexture(u),t.generation!==l.generation&&(t.generation=l.generation,s=!0),l.bindGroups.add(e));if(void 0!==r.get(u).externalTexture||l.isDefaultTexture?i=!1:(n=10*n+u.id,a+=u.version),!0===u.isStorageTexture&&!0===u.mipmapsAutoUpdate){const e=this.get(u);!0===t.store?e.needsMipmap=!0:this.textures.needsMipmaps(u)&&!0===e.needsMipmap&&(this.backend.generateMipmaps(u),e.needsMipmap=!1)}}else if(t.isSampler){if(t.update()){const e=this.textures.updateSampler(t.texture);t.samplerKey!==e&&(t.samplerKey=e,s=!0)}}t.isBuffer&&t.updateRanges.length>0&&t.clearUpdateRanges()}}!0===s&&this.backend.updateBindings(e,t,i?n:0,a)}}function ky(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?e.z-t.z:e.id-t.id}function Gy(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function $y(e){return(e.transmission>0||e.transmissionNode&&e.transmissionNode.isNode)&&e.side===P&&!1===e.forceSinglePass}class zy{constructor(e,t,r){this.renderItems=[],this.renderItemsIndex=0,this.opaque=[],this.transparentDoublePass=[],this.transparent=[],this.bundles=[],this.lightsNode=e.getNode(t,r),this.lightsArray=[],this.scene=t,this.camera=r,this.occlusionQueryCount=0}begin(){return this.renderItemsIndex=0,this.opaque.length=0,this.transparentDoublePass.length=0,this.transparent.length=0,this.bundles.length=0,this.lightsArray.length=0,this.occlusionQueryCount=0,this}getNextRenderItem(e,t,r,s,i,n,a){let o=this.renderItems[this.renderItemsIndex];return void 0===o?(o={id:e.id,object:e,geometry:t,material:r,groupOrder:s,renderOrder:e.renderOrder,z:i,group:n,clippingContext:a},this.renderItems[this.renderItemsIndex]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.groupOrder=s,o.renderOrder=e.renderOrder,o.z=i,o.group=n,o.clippingContext=a),this.renderItemsIndex++,o}push(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===e.occlusionTest&&this.occlusionQueryCount++,!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.push(o),this.transparent.push(o)):this.opaque.push(o)}unshift(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.unshift(o),this.transparent.unshift(o)):this.opaque.unshift(o)}pushBundle(e){this.bundles.push(e)}pushLight(e){this.lightsArray.push(e)}sort(e,t){this.opaque.length>1&&this.opaque.sort(e||ky),this.transparentDoublePass.length>1&&this.transparentDoublePass.sort(t||Gy),this.transparent.length>1&&this.transparent.sort(t||Gy)}finish(){this.lightsNode.setLights(this.lightsArray);for(let e=this.renderItemsIndex,t=this.renderItems.length;e>t,u=a.height>>t;let l=e.depthTexture||i[t];const d=!0===e.depthBuffer||!0===e.stencilBuffer;let c=!1;void 0===l&&d&&(l=new J,l.format=e.stencilBuffer?Ve:ke,l.type=e.stencilBuffer?Ge:S,l.image.width=o,l.image.height=u,l.image.depth=a.depth,l.renderTarget=e,l.isArrayTexture=!0===e.multiview&&a.depth>1,i[t]=l),r.width===a.width&&a.height===r.height||(c=!0,l&&(l.needsUpdate=!0,l.image.width=o,l.image.height=u,l.image.depth=l.isArrayTexture?l.image.depth:1)),r.width=a.width,r.height=a.height,r.textures=n,r.depthTexture=l||null,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,r.renderTarget=e,r.sampleCount!==s&&(c=!0,l&&(l.needsUpdate=!0),r.sampleCount=s);const h={sampleCount:s};if(!0!==e.isXRRenderTarget){for(let e=0;e{this._destroyRenderTarget(e)},e.addEventListener("dispose",r.onDispose))}updateTexture(e,t={}){const r=this.get(e);if(!0===r.initialized&&r.version===e.version)return;const s=e.isRenderTargetTexture||e.isDepthTexture||e.isFramebufferTexture,i=this.backend;if(s&&!0===r.initialized&&i.destroyTexture(e),e.isFramebufferTexture){const t=this.renderer.getRenderTarget();e.type=t?t.texture.type:$e}const{width:n,height:a,depth:o}=this.getSize(e);if(t.width=n,t.height=a,t.depth=o,t.needsMipmaps=this.needsMipmaps(e),t.levels=t.needsMipmaps?this.getMipLevels(e,n,a):1,e.isCubeTexture&&e.mipmaps.length>0&&t.levels++,s||!0===e.isStorageTexture||!0===e.isExternalTexture)i.createTexture(e,t),r.generation=e.version;else if(e.version>0){const s=e.image;if(void 0===s)d("Renderer: Texture marked for update but image is undefined.");else if(!1===s.complete)d("Renderer: Texture marked for update but image is incomplete.");else{if(e.images){const r=[];for(const t of e.images)r.push(t);t.images=r}else t.image=s;void 0!==r.isDefaultTexture&&!0!==r.isDefaultTexture||(i.createTexture(e,t),r.isDefaultTexture=!1,r.generation=e.version),!0===e.source.dataReady&&i.updateTexture(e,t);const n=!0===e.isStorageTexture&&!1===e.mipmapsAutoUpdate;t.needsMipmaps&&0===e.mipmaps.length&&!n&&i.generateMipmaps(e),e.onUpdate&&e.onUpdate(e)}}else i.createDefaultTexture(e),r.isDefaultTexture=!0,r.generation=e.version;!0!==r.initialized&&(r.initialized=!0,r.generation=e.version,r.bindGroups=new Set,this.info.memory.textures++,e.isVideoTexture&&!0===p.enabled&&p.getTransfer(e.colorSpace)!==g&&d("WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace."),r.onDispose=()=>{this._destroyTexture(e)},e.addEventListener("dispose",r.onDispose)),r.version=e.version}updateSampler(e){return this.backend.updateSampler(e)}getSize(e,t=Qy){let r=e.images?e.images[0]:e.image;return r?(void 0!==r.image&&(r=r.image),"undefined"!=typeof HTMLVideoElement&&r instanceof HTMLVideoElement?(t.width=r.videoWidth||1,t.height=r.videoHeight||1,t.depth=1):"undefined"!=typeof VideoFrame&&r instanceof VideoFrame?(t.width=r.displayWidth||1,t.height=r.displayHeight||1,t.depth=1):(t.width=r.width||1,t.height=r.height||1,t.depth=e.isCubeTexture?6:r.depth||1)):t.width=t.height=t.depth=1,t}getMipLevels(e,t,r){let s;return s=e.mipmaps.length>0?e.mipmaps.length:!0===e.isCompressedTexture?1:Math.floor(Math.log2(Math.max(t,r)))+1,s}needsMipmaps(e){return!0===e.generateMipmaps||e.mipmaps.length>0}_destroyRenderTarget(e){if(!0===this.has(e)){const t=this.get(e),r=t.textures,s=t.depthTexture;e.removeEventListener("dispose",t.onDispose);for(let e=0;e=2)for(let r=0;r{if(this._currentNode=t,!t.isVarNode||!t.isIntent(e)||!0===t.isAssign(e))if("setup"===s)t.build(e);else if("analyze"===s)t.build(e,this);else if("generate"===s){const r=e.getDataFromNode(t,"any").stages,s=r&&r[e.shaderStage];if(t.isVarNode&&s&&1===s.length&&s[0]&&s[0].isStackNode)return;t.build(e,"void")}},n=[...this.nodes];for(const e of n)i(e);this._currentNode=null;const a=this.nodes.filter(e=>-1===n.indexOf(e));for(const e of a)i(e);let o;return o=this.hasOutput(e)?this.outputNode.build(e,...t):super.build(e,...t),cn(r),e.removeActiveStack(this),o}}const tb=nn(eb).setParameterLength(0,1);class rb extends di{static get type(){return"StructTypeNode"}constructor(e,t=null){var r;super("struct"),this.membersLayout=(r=e,Object.entries(r).map(([e,t])=>"string"==typeof t?{name:e,type:t,atomic:!1}:{name:e,type:t.type,atomic:t.atomic||!1})),this.name=t,this.isStructLayoutNode=!0}getLength(){const e=Float32Array.BYTES_PER_ELEMENT;let t=1,r=0;for(const s of this.membersLayout){const i=s.type,n=qs(i),a=js(i)/e;t=Math.max(t,a);const o=r%t%a;0!==o&&(r+=a-o),r+=n}return Math.ceil(r/t)*t}getMemberType(e,t){const r=this.membersLayout.find(e=>e.name===t);return r?r.type:"void"}getNodeType(e){return e.getStructTypeFromNode(this,this.membersLayout,this.name).name}setup(e){e.getStructTypeFromNode(this,this.membersLayout,this.name),e.addInclude(this)}generate(e){return this.getNodeType(e)}}class sb extends di{static get type(){return"StructNode"}constructor(e,t){super("vec3"),this.structTypeNode=e,this.values=t,this.isStructNode=!0}getNodeType(e){return this.structTypeNode.getNodeType(e)}getMemberType(e,t){return this.structTypeNode.getMemberType(e,t)}_getChildren(){const e=super._getChildren(),t=e.find(e=>e.childNode===this.structTypeNode);return e.splice(e.indexOf(t),1),e.push(t),e}generate(e){const t=e.getVarFromNode(this),r=t.type,s=e.getPropertyName(t);return e.addLineFlowCode(`${s} = ${e.generateStruct(r,this.structTypeNode.membersLayout,this.values)}`,this),t.name}}class ib extends di{static get type(){return"OutputStructNode"}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}getNodeType(){return"OutputType"}generate(e){const t=e.getDataFromNode(this);if(void 0===t.membersLayout){const r=this.members,s=[];for(let t=0;tnew hb(e,"uint","float"),mb={};class fb extends io{static get type(){return"BitcountNode"}constructor(e,t){super(e,t),this.isBitcountNode=!0}_resolveElementType(e,t,r){"int"===r?t.assign(pb(e,"uint")):t.assign(e)}_returnDataNode(e){switch(e){case"uint":return bn;case"int":return yn;case"uvec2":return vn;case"uvec3":return En;case"uvec4":return Mn;case"ivec2":return _n;case"ivec3":return Rn;case"ivec4":return Cn}}_createTrailingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t);const i=fn(s.bitAnd(Do(s))),n=gb(i).shiftRight(23).sub(127);return r(n)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createLeadingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{pn(e.equal(bn(0)),()=>bn(32));const s=bn(0),i=bn(0);return this._resolveElementType(e,s,t),pn(s.shiftRight(16).equal(0),()=>{i.addAssign(16),s.shiftLeftAssign(16)}),pn(s.shiftRight(24).equal(0),()=>{i.addAssign(8),s.shiftLeftAssign(8)}),pn(s.shiftRight(28).equal(0),()=>{i.addAssign(4),s.shiftLeftAssign(4)}),pn(s.shiftRight(30).equal(0),()=>{i.addAssign(2),s.shiftLeftAssign(2)}),pn(s.shiftRight(31).equal(0),()=>{i.addAssign(1)}),r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createOneBitsBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t),s.assign(s.sub(s.shiftRight(bn(1)).bitAnd(bn(1431655765)))),s.assign(s.bitAnd(bn(858993459)).add(s.shiftRight(bn(2)).bitAnd(bn(858993459))));const i=s.add(s.shiftRight(bn(4))).bitAnd(bn(252645135)).mul(bn(16843009)).shiftRight(bn(24));return r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createMainLayout(e,t,r,s){const i=this._returnDataNode(t);return dn(([e])=>{if(1===r)return i(s(e));{const t=i(0),n=["x","y","z","w"];for(let i=0;id(r))()}}fb.COUNT_TRAILING_ZEROS="countTrailingZeros",fb.COUNT_LEADING_ZEROS="countLeadingZeros",fb.COUNT_ONE_BITS="countOneBits";const yb=on(fb,fb.COUNT_TRAILING_ZEROS).setParameterLength(1),bb=on(fb,fb.COUNT_LEADING_ZEROS).setParameterLength(1),xb=on(fb,fb.COUNT_ONE_BITS).setParameterLength(1),Tb=dn(([e])=>{const t=e.toUint().mul(747796405).add(2891336453),r=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return r.shiftRight(22).bitXor(r).toFloat().mul(1/2**32)}),_b=(e,t)=>eu(Pa(4,e.mul(La(1,e))),t);class vb extends pi{static get type(){return"PackFloatNode"}constructor(e,t){super(),this.vectorNode=t,this.encoding=e,this.isPackFloatNode=!0}getNodeType(){return"uint"}generate(e){const t=this.vectorNode.getNodeType(e);return`${e.getFloatPackingMethod(this.encoding)}(${this.vectorNode.build(e,t)})`}}const Nb=on(vb,"snorm").setParameterLength(1),Sb=on(vb,"unorm").setParameterLength(1),Rb=on(vb,"float16").setParameterLength(1);class Eb extends pi{static get type(){return"UnpackFloatNode"}constructor(e,t){super(),this.uintNode=t,this.encoding=e,this.isUnpackFloatNode=!0}getNodeType(){return"vec2"}generate(e){const t=this.uintNode.getNodeType(e);return`${e.getFloatUnpackingMethod(this.encoding)}(${this.uintNode.build(e,t)})`}}const Ab=on(Eb,"snorm").setParameterLength(1),wb=on(Eb,"unorm").setParameterLength(1),Cb=on(Eb,"float16").setParameterLength(1),Mb=dn(([e])=>e.fract().sub(.5).abs()).setLayout({name:"tri",type:"float",inputs:[{name:"x",type:"float"}]}),Bb=dn(([e])=>Sn(Mb(e.z.add(Mb(e.y.mul(1)))),Mb(e.z.add(Mb(e.x.mul(1)))),Mb(e.y.add(Mb(e.x.mul(1)))))).setLayout({name:"tri3",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),Fb=dn(([e,t,r])=>{const s=Sn(e).toVar(),i=fn(1.4).toVar(),n=fn(0).toVar(),a=Sn(s).toVar();return Ep({start:fn(0),end:fn(3),type:"float",condition:"<="},()=>{const e=Sn(Bb(a.mul(2))).toVar();s.addAssign(e.add(r.mul(fn(.1).mul(t)))),a.mulAssign(1.8),i.mulAssign(1.5),s.mulAssign(1.2);const o=fn(Mb(s.z.add(Mb(s.x.add(Mb(s.y)))))).toVar();n.addAssign(o.div(i)),a.addAssign(.14)}),n}).setLayout({name:"triNoise3D",type:"float",inputs:[{name:"position",type:"vec3"},{name:"speed",type:"float"},{name:"time",type:"float"}]});class Lb extends di{static get type(){return"FunctionOverloadingNode"}constructor(e=[],...t){super(),this.functionNodes=e,this.parametersNodes=t,this._candidateFn=null,this.global=!0}getNodeType(e){return this.getCandidateFn(e).shaderNode.layout.type}getCandidateFn(e){const t=this.parametersNodes;let r=this._candidateFn;if(null===r){let s=null,i=-1;for(const r of this.functionNodes){const n=r.shaderNode.layout;if(null===n)throw new Error("FunctionOverloadingNode: FunctionNode must be a layout.");const a=n.inputs;if(t.length===a.length){let n=0;for(let r=0;ri&&(s=r,i=n)}}this._candidateFn=r=s}return r}setup(e){return this.getCandidateFn(e)(...this.parametersNodes)}}const Pb=nn(Lb),Db=e=>(...t)=>Pb(e,...t),Ub=Na(0).setGroup(Ta).onRenderUpdate(e=>e.time),Ib=Na(0).setGroup(Ta).onRenderUpdate(e=>e.deltaTime),Ob=Na(0,"uint").setGroup(Ta).onRenderUpdate(e=>e.frameId);const Vb=dn(([e,t,r=Tn(.5)])=>ey(e.sub(r),t).add(r)),kb=dn(([e,t,r=Tn(.5)])=>{const s=e.sub(r),i=s.dot(s),n=i.mul(i).mul(t);return e.add(s.mul(n))}),Gb=dn(({position:e=null,horizontal:t=!0,vertical:r=!1})=>{let s;null!==e?(s=Id.toVar(),s[3][0]=e.x,s[3][1]=e.y,s[3][2]=e.z):s=Id;const i=vd.mul(s);return Yi(t)&&(i[0][0]=Id[0].length(),i[0][1]=0,i[0][2]=0),Yi(r)&&(i[1][0]=0,i[1][1]=Id[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Td.mul(i).mul(Qd)}),$b=dn(([e=null])=>{const t=rg();return rg(qp(e)).sub(t).lessThan(0).select(Kl,e)}),zb=dn(([e,t=Al(),r=fn(0)])=>{const s=e.x,i=e.y,n=r.mod(s.mul(i)).floor(),a=n.mod(s),o=i.sub(n.add(1).div(s).ceil()),u=e.reciprocal(),l=Tn(a,o);return t.add(l).mul(u)}),Wb=dn(([e,t=null,r=null,s=fn(1),i=Qd,n=oc])=>{let a=n.abs().normalize();a=a.div(a.dot(Sn(1)));const o=i.yz.mul(s),u=i.zx.mul(s),l=i.xy.mul(s),d=e.value,c=null!==t?t.value:d,h=null!==r?r.value:d,p=Ul(d,o).mul(a.x),g=Ul(c,u).mul(a.y),m=Ul(h,l).mul(a.z);return Fa(p,g,m)}),Hb=new Xe,qb=new r,jb=new r,Xb=new r,Kb=new a,Qb=new r(0,0,-1),Yb=new s,Zb=new r,Jb=new r,ex=new s,tx=new t,rx=new ae,sx=Kl.flipX();rx.depthTexture=new J(1,1);let ix=!1;class nx extends Pl{static get type(){return"ReflectorNode"}constructor(e={}){super(e.defaultTexture||rx.texture,sx),this._reflectorBaseNode=e.reflector||new ax(this,e),this._depthNode=null,this.setUpdateMatrix(!1)}get reflector(){return this._reflectorBaseNode}get target(){return this._reflectorBaseNode.target}getDepthNode(){if(null===this._depthNode){if(!0!==this._reflectorBaseNode.depth)throw new Error("THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ");this._depthNode=new nx({defaultTexture:rx.depthTexture,reflector:this._reflectorBaseNode})}return this._depthNode}setup(e){return e.object.isQuadMesh||this._reflectorBaseNode.build(e),super.setup(e)}clone(){const e=new this.constructor(this.reflectorNode);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e._reflectorBaseNode=this._reflectorBaseNode,e}dispose(){super.dispose(),this._reflectorBaseNode.dispose()}}class ax extends di{static get type(){return"ReflectorBaseNode"}constructor(e,t={}){super();const{target:r=new Ke,resolutionScale:s=1,generateMipmaps:i=!1,bounces:n=!0,depth:a=!1,samples:o=0}=t;this.textureNode=e,this.target=r,this.resolutionScale=s,void 0!==t.resolution&&(v('ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".'),this.resolutionScale=t.resolution),this.generateMipmaps=i,this.bounces=n,this.depth=a,this.samples=o,this.updateBeforeType=n?ti.RENDER:ti.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new Map,this.forceUpdate=!1,this.hasOutput=!1}_updateResolution(e,t){const r=this.resolutionScale;t.getDrawingBufferSize(tx),e.setSize(Math.round(tx.width*r),Math.round(tx.height*r))}setup(e){return this._updateResolution(rx,e.renderer),super.setup(e)}dispose(){super.dispose();for(const e of this.renderTargets.values())e.dispose()}getVirtualCamera(e){let t=this.virtualCameras.get(e);return void 0===t&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return void 0===t&&(t=new ae(0,0,{type:_e,samples:this.samples}),!0===this.generateMipmaps&&(t.texture.minFilter=Qe,t.texture.generateMipmaps=!0),!0===this.depth&&(t.depthTexture=new J),this.renderTargets.set(e,t)),t}updateBefore(e){if(!1===this.bounces&&ix)return!1;ix=!0;const{scene:t,camera:r,renderer:s,material:i}=e,{target:n}=this,a=this.getVirtualCamera(r),o=this.getRenderTarget(a);s.getDrawingBufferSize(tx),this._updateResolution(o,s),jb.setFromMatrixPosition(n.matrixWorld),Xb.setFromMatrixPosition(r.matrixWorld),Kb.extractRotation(n.matrixWorld),qb.set(0,0,1),qb.applyMatrix4(Kb),Zb.subVectors(jb,Xb);let u=!1;if(!0===Zb.dot(qb)>0&&!1===this.forceUpdate){if(!1===this.hasOutput)return void(ix=!1);u=!0}Zb.reflect(qb).negate(),Zb.add(jb),Kb.extractRotation(r.matrixWorld),Qb.set(0,0,-1),Qb.applyMatrix4(Kb),Qb.add(Xb),Jb.subVectors(jb,Qb),Jb.reflect(qb).negate(),Jb.add(jb),a.coordinateSystem=r.coordinateSystem,a.position.copy(Zb),a.up.set(0,1,0),a.up.applyMatrix4(Kb),a.up.reflect(qb),a.lookAt(Jb),a.near=r.near,a.far=r.far,a.updateMatrixWorld(),a.projectionMatrix.copy(r.projectionMatrix),Hb.setFromNormalAndCoplanarPoint(qb,jb),Hb.applyMatrix4(a.matrixWorldInverse),Yb.set(Hb.normal.x,Hb.normal.y,Hb.normal.z,Hb.constant);const l=a.projectionMatrix;ex.x=(Math.sign(Yb.x)+l.elements[8])/l.elements[0],ex.y=(Math.sign(Yb.y)+l.elements[9])/l.elements[5],ex.z=-1,ex.w=(1+l.elements[10])/l.elements[14],Yb.multiplyScalar(1/Yb.dot(ex));l.elements[2]=Yb.x,l.elements[6]=Yb.y,l.elements[10]=s.coordinateSystem===h?Yb.z-0:Yb.z+1-0,l.elements[14]=Yb.w,this.textureNode.value=o.texture,!0===this.depth&&(this.textureNode.getDepthNode().value=o.depthTexture),i.visible=!1;const d=s.getRenderTarget(),c=s.getMRT(),p=s.autoClear;s.setMRT(null),s.setRenderTarget(o),s.autoClear=!0;const g=t.name;t.name=(t.name||"Scene")+" [ Reflector ]",u?(s.clear(),this.hasOutput=!1):(s.render(t,a),this.hasOutput=!0),t.name=g,s.setMRT(c),s.setRenderTarget(d),s.autoClear=p,i.visible=!0,ix=!1,this.forceUpdate=!1}get resolution(){return v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale}set resolution(e){v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale=e}}const ox=new Se(-1,1,1,-1,0,1);class ux extends Ne{constructor(e=!1){super();const t=!1===e?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute("position",new Ye([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Ye(t,2))}}const lx=new ux;class dx extends ue{constructor(e=null){super(lx,e),this.camera=ox,this.isQuadMesh=!0}async renderAsync(e){v('QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await e.init(),e.render(this,ox)}render(e){e.render(this,ox)}}const cx=new t;class hx extends Pl{static get type(){return"RTTNode"}constructor(e,t=null,r=null,s={type:_e}){const i=new ae(t,r,s);super(i.texture,Al()),this.isRTTNode=!0,this.node=e,this.width=t,this.height=r,this.pixelRatio=1,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this._rttNode=null,this._quadMesh=new dx(new yg),this.updateBeforeType=ti.RENDER}get autoResize(){return null===this.width}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name="RTT",this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;const r=e*this.pixelRatio,s=t*this.pixelRatio;this.renderTarget.setSize(r,s),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(!1===this.textureNeedsUpdate&&!1===this.autoUpdate)return;if(this.textureNeedsUpdate=!1,!0===this.autoResize){const t=e.getPixelRatio(),r=e.getSize(cx),s=Math.floor(r.width*t),i=Math.floor(r.height*t);s===this.renderTarget.width&&i===this.renderTarget.height||(this.renderTarget.setSize(s,i),this.textureNeedsUpdate=!0)}let t="RTT";this.node.name&&(t=this.node.name+" [ "+t+" ]"),this._quadMesh.material.fragmentNode=this._rttNode,this._quadMesh.name=t;const r=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(r)}clone(){const e=new Pl(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}}const px=(e,...t)=>new hx(en(e),...t),gx=dn(([e,t,r],s)=>{let i;s.renderer.coordinateSystem===h?(e=Tn(e.x,e.y.oneMinus()).mul(2).sub(1),i=wn(Sn(e,t),1)):i=wn(Sn(e.x,e.y.oneMinus(),t).mul(2).sub(1),1);const n=wn(r.mul(i));return n.xyz.div(n.w)}),mx=dn(([e,t])=>{const r=t.mul(wn(e,1)),s=r.xy.div(r.w).mul(.5).add(.5).toVar();return Tn(s.x,s.y.oneMinus())}),fx=dn(([e,t,r])=>{const s=Cl(Il(t)),i=_n(e.mul(s)).toVar(),n=Il(t,i).toVar(),a=Il(t,i.sub(_n(2,0))).toVar(),o=Il(t,i.sub(_n(1,0))).toVar(),u=Il(t,i.add(_n(1,0))).toVar(),l=Il(t,i.add(_n(2,0))).toVar(),d=Il(t,i.add(_n(0,2))).toVar(),c=Il(t,i.add(_n(0,1))).toVar(),h=Il(t,i.sub(_n(0,1))).toVar(),p=Il(t,i.sub(_n(0,2))).toVar(),g=Fo(La(fn(2).mul(o).sub(a),n)).toVar(),m=Fo(La(fn(2).mul(u).sub(l),n)).toVar(),f=Fo(La(fn(2).mul(c).sub(d),n)).toVar(),y=Fo(La(fn(2).mul(h).sub(p),n)).toVar(),b=gx(e,n,r).toVar(),x=g.lessThan(m).select(b.sub(gx(e.sub(Tn(fn(1).div(s.x),0)),o,r)),b.negate().add(gx(e.add(Tn(fn(1).div(s.x),0)),u,r))),T=f.lessThan(y).select(b.sub(gx(e.add(Tn(0,fn(1).div(s.y))),c,r)),b.negate().add(gx(e.sub(Tn(0,fn(1).div(s.y))),h,r)));return So(Jo(x,T))}),yx=dn(([e])=>Ro(fn(52.9829189).mul(Ro(Zo(e,Tn(.06711056,.00583715)))))).setLayout({name:"interleavedGradientNoise",type:"float",inputs:[{name:"position",type:"vec2"}]}),bx=dn(([e,t,r])=>{const s=fn(2.399963229728653),i=To(fn(e).add(.5).div(fn(t))),n=fn(e).mul(s).add(r);return Tn(Ao(n),Eo(n)).mul(i)}).setLayout({name:"vogelDiskSample",type:"vec2",inputs:[{name:"sampleIndex",type:"int"},{name:"samplesCount",type:"int"},{name:"phi",type:"float"}]});class xx extends di{static get type(){return"SampleNode"}constructor(e,t=null){super(),this.callback=e,this.uvNode=t,this.isSampleNode=!0}setup(){return this.sample(Al())}sample(e){return this.callback(e)}}class Tx extends di{static get type(){return"EventNode"}constructor(e,t){super("void"),this.eventType=e,this.callback=t,e===Tx.OBJECT?this.updateType=ti.OBJECT:e===Tx.MATERIAL?this.updateType=ti.RENDER:e===Tx.BEFORE_OBJECT?this.updateBeforeType=ti.OBJECT:e===Tx.BEFORE_MATERIAL&&(this.updateBeforeType=ti.RENDER)}update(e){this.callback(e)}updateBefore(e){this.callback(e)}}Tx.OBJECT="object",Tx.MATERIAL="material",Tx.BEFORE_OBJECT="beforeObject",Tx.BEFORE_MATERIAL="beforeMaterial";const _x=(e,t)=>new Tx(e,t).toStack();class vx extends j{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageInstancedBufferAttribute=!0}}class Nx extends Ce{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageBufferAttribute=!0}}class Sx extends di{static get type(){return"PointUVNode"}constructor(){super("vec2"),this.isPointUVNode=!0}generate(){return"vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )"}}const Rx=an(Sx),Ex=new D,Ax=new a,wx=Na(0).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundBlurriness),Cx=Na(1).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundIntensity),Mx=Na(new a).setGroup(Ta).onRenderUpdate(({scene:e})=>{const t=e.background;return null!==t&&t.isTexture&&t.mapping!==Ze?(Ex.copy(e.backgroundRotation),Ex.x*=-1,Ex.y*=-1,Ex.z*=-1,Ax.makeRotationFromEuler(Ex)):Ax.identity(),Ax});class Bx extends Pl{static get type(){return"StorageTextureNode"}constructor(e,t,r=null){super(e,t),this.storeNode=r,this.mipLevel=0,this.isStorageTextureNode=!0,this.access=si.WRITE_ONLY}getInputType(){return"storageTexture"}setup(e){super.setup(e);const t=e.getNodeProperties(this);return t.storeNode=this.storeNode,t}setAccess(e){return this.access=e,this}setMipLevel(e){return this.mipLevel=e,this}generate(e,t){let r;return r=null!==this.storeNode?this.generateStore(e):super.generate(e,t),r}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;return e.generateStorageTextureLoad(l,t,r,s,n,u)}toReadWrite(){return this.setAccess(si.READ_WRITE)}toReadOnly(){return this.setAccess(si.READ_ONLY)}toWriteOnly(){return this.setAccess(si.WRITE_ONLY)}generateStore(e){const t=e.getNodeProperties(this),{uvNode:r,storeNode:s,depthNode:i}=t,n=super.generate(e,"property"),a=r.build(e,!0===this.value.is3DTexture?"uvec3":"uvec2"),o=s.build(e,"vec4"),u=i?i.build(e,"int"):null,l=e.generateTextureStore(e,n,a,u,o);e.addLineFlowCode(l,this)}clone(){const e=super.clone();return e.storeNode=this.storeNode,e.mipLevel=this.mipLevel,e.access=this.access,e}}const Fx=nn(Bx).setParameterLength(1,3),Lx=dn(({texture:e,uv:t})=>{const r=1e-4,s=Sn().toVar();return pn(t.x.lessThan(r),()=>{s.assign(Sn(1,0,0))}).ElseIf(t.y.lessThan(r),()=>{s.assign(Sn(0,1,0))}).ElseIf(t.z.lessThan(r),()=>{s.assign(Sn(0,0,1))}).ElseIf(t.x.greaterThan(.9999),()=>{s.assign(Sn(-1,0,0))}).ElseIf(t.y.greaterThan(.9999),()=>{s.assign(Sn(0,-1,0))}).ElseIf(t.z.greaterThan(.9999),()=>{s.assign(Sn(0,0,-1))}).Else(()=>{const r=.01,i=e.sample(t.add(Sn(-.01,0,0))).r.sub(e.sample(t.add(Sn(r,0,0))).r),n=e.sample(t.add(Sn(0,-.01,0))).r.sub(e.sample(t.add(Sn(0,r,0))).r),a=e.sample(t.add(Sn(0,0,-.01))).r.sub(e.sample(t.add(Sn(0,0,r))).r);s.assign(Sn(i,n,a))}),s.normalize()});class Px extends Pl{static get type(){return"Texture3DNode"}constructor(e,t=null,r=null){super(e,t,r),this.isTexture3DNode=!0}getInputType(){return"texture3D"}getDefaultUV(){return Sn(.5,.5,.5)}setUpdateMatrix(){}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}generateOffset(e,t){return t.build(e,"ivec3")}normal(e){return Lx({texture:this,uv:e})}}const Dx=nn(Px).setParameterLength(1,3);class Ux extends Lc{static get type(){return"UserDataNode"}constructor(e,t,r=null){super(e,t,r),this.userData=r}updateReference(e){return this.reference=null!==this.userData?this.userData:e.object.userData,this.reference}}const Ix=new WeakMap;class Ox extends pi{static get type(){return"VelocityNode"}constructor(){super("vec2"),this.projectionMatrix=null,this.updateType=ti.OBJECT,this.updateAfterType=ti.OBJECT,this.previousModelWorldMatrix=Na(new a),this.previousProjectionMatrix=Na(new a).setGroup(Ta),this.previousCameraViewMatrix=Na(new a)}setProjectionMatrix(e){this.projectionMatrix=e}update({frameId:e,camera:t,object:r}){const s=kx(r);this.previousModelWorldMatrix.value.copy(s);const i=Vx(t);i.frameId!==e&&(i.frameId=e,void 0===i.previousProjectionMatrix?(i.previousProjectionMatrix=new a,i.previousCameraViewMatrix=new a,i.currentProjectionMatrix=new a,i.currentCameraViewMatrix=new a,i.previousProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){kx(e).copy(e.matrixWorld)}setup(){const e=null===this.projectionMatrix?Td:Na(this.projectionMatrix),t=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),r=e.mul(Wd).mul(Qd),s=this.previousProjectionMatrix.mul(t).mul(Yd),i=r.xy.div(r.w),n=s.xy.div(s.w);return La(i,n)}}function Vx(e){let t=Ix.get(e);return void 0===t&&(t={},Ix.set(e,t)),t}function kx(e,t=0){const r=Vx(e);let s=r[t];return void 0===s&&(r[t]=s=new a,r[t].copy(e.matrixWorld)),s}const Gx=an(Ox),$x=dn(([e])=>qx(e.rgb)),zx=dn(([e,t=fn(1)])=>t.mix(qx(e.rgb),e.rgb)),Wx=dn(([e,t=fn(1)])=>{const r=Fa(e.r,e.g,e.b).div(3),s=e.r.max(e.g.max(e.b)),i=s.sub(r).mul(t).mul(-3);return ou(e.rgb,s,i)}),Hx=dn(([e,t=fn(1)])=>{const r=Sn(.57735,.57735,.57735),s=t.cos();return Sn(e.rgb.mul(s).add(r.cross(e.rgb).mul(t.sin()).add(r.mul(Zo(r,e.rgb).mul(s.oneMinus())))))}),qx=(e,t=Sn(p.getLuminanceCoefficients(new r)))=>Zo(e,t),jx=dn(([e,t=Sn(1),s=Sn(0),i=Sn(1),n=fn(1),a=Sn(p.getLuminanceCoefficients(new r,Ee))])=>{const o=e.rgb.dot(Sn(a)),u=jo(e.rgb.mul(t).add(s),0).toVar(),l=u.pow(i).toVar();return pn(u.r.greaterThan(0),()=>{u.r.assign(l.r)}),pn(u.g.greaterThan(0),()=>{u.g.assign(l.g)}),pn(u.b.greaterThan(0),()=>{u.b.assign(l.b)}),u.assign(o.add(u.sub(o).mul(n))),wn(u.rgb,e.a)}),Xx=dn(([e,t])=>e.mul(t).floor().div(t));let Kx=null;class Qx extends Vp{static get type(){return"ViewportSharedTextureNode"}constructor(e=Kl,t=null){null===Kx&&(Kx=new Y),super(e,t,Kx)}getTextureForReference(){return Kx}updateReference(){return this}}const Yx=nn(Qx).setParameterLength(0,2),Zx=new t;class Jx extends Pl{static get type(){return"PassTextureNode"}constructor(e,t){super(t),this.passNode=e,this.isPassTextureNode=!0,this.setUpdateMatrix(!1)}setup(e){return e.getNodeProperties(this).passNode=this.passNode,super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}}class eT extends Jx{static get type(){return"PassMultipleTextureNode"}constructor(e,t,r=!1){super(e,null),this.textureName=t,this.previousTexture=r,this.isPassMultipleTextureNode=!0}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){const e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}class tT extends pi{static get type(){return"PassNode"}constructor(e,t,r,s={}){super("vec4"),this.scope=e,this.scene=t,this.camera=r,this.options=s,this._pixelRatio=1,this._width=1,this._height=1;const i=new J;i.isRenderTargetTexture=!0,i.name="depth";const n=new ae(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:_e,...s});n.texture.name="output",n.depthTexture=i,this.renderTarget=n,this.overrideMaterial=null,this.transparent=!0,this.opaque=!0,this.contextNode=null,this._contextNodeCache=null,this._textures={output:n.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Na(0),this._cameraFar=Na(0),this._mrt=null,this._layers=null,this._resolutionScale=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=ti.FRAME,this.global=!0}setResolutionScale(e){return this._resolutionScale=e,this}getResolutionScale(){return this._resolutionScale}setResolution(e){return d("PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead."),this.setResolutionScale(e)}getResolution(){return d("PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead."),this.getResolutionScale()}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];if(void 0===t){t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)}return t}getPreviousTexture(e){let t=this._previousTextures[e];return void 0===t&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){const t=this._previousTextures[e];if(void 0!==t){const r=this._textures[e],s=this.renderTarget.textures.indexOf(r);this.renderTarget.textures[s]=t,this._textures[e]=t,this._previousTextures[e]=r,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e="output"){let t=this._textureNodes[e];return void 0===t&&(t=new eT(this,e),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e="output"){let t=this._previousTextureNodes[e];return void 0===t&&(void 0===this._textureNodes[e]&&this.getTextureNode(e),t=new eT(this,e,!0),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e="depth"){let t=this._viewZNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar;this._viewZNodes[e]=t=Zp(this.getTextureNode(e),r,s)}return t}getLinearDepthNode(e="depth"){let t=this._linearDepthNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Xp(i,r,s)}return t}async compileAsync(e){const t=e.getRenderTarget(),r=e.getMRT();e.setRenderTarget(this.renderTarget),e.setMRT(this._mrt),await e.compileAsync(this.scene,this.camera),e.setRenderTarget(t),e.setMRT(r)}setup({renderer:e}){return this.renderTarget.samples=void 0===this.options.samples?e.samples:this.options.samples,this.renderTarget.texture.type=e.getOutputBufferType(),this.scope===tT.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){const{renderer:t}=e,{scene:r}=this;let s,i;const n=t.getOutputRenderTarget();n&&!0===n.isXRRenderTarget?(i=1,s=t.xr.getCamera(),t.xr.updateCamera(s),Zx.set(n.width,n.height)):(s=this.camera,i=t.getPixelRatio(),t.getSize(Zx)),this._pixelRatio=i,this.setSize(Zx.width,Zx.height);const a=t.getRenderTarget(),o=t.getMRT(),u=t.autoClear,l=t.transparent,d=t.opaque,c=s.layers.mask,h=t.contextNode,p=r.overrideMaterial;this._cameraNear.value=s.near,this._cameraFar.value=s.far,null!==this._layers&&(s.layers.mask=this._layers.mask);for(const e in this._previousTextures)this.toggleTexture(e);null!==this.overrideMaterial&&(r.overrideMaterial=this.overrideMaterial),t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.autoClear=!0,t.transparent=this.transparent,t.opaque=this.opaque,null!==this.contextNode&&(null!==this._contextNodeCache&&this._contextNodeCache.version===this.version||(this._contextNodeCache={version:this.version,context:vu({...t.contextNode.getFlowContextData(),...this.contextNode.getFlowContextData()})}),t.contextNode=this._contextNodeCache.context);const g=r.name;r.name=this.name?this.name:r.name,t.render(r,s),r.name=g,r.overrideMaterial=p,t.setRenderTarget(a),t.setMRT(o),t.autoClear=u,t.transparent=l,t.opaque=d,t.contextNode=h,s.layers.mask=c}setSize(e,t){this._width=e,this._height=t;const r=Math.floor(this._width*this._pixelRatio*this._resolutionScale),s=Math.floor(this._height*this._pixelRatio*this._resolutionScale);this.renderTarget.setSize(r,s),null!==this._scissor&&this.renderTarget.scissor.copy(this._scissor),null!==this._viewport&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,r,i){null===e?this._scissor=null:(null===this._scissor&&(this._scissor=new s),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,r,i),this._scissor.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setViewport(e,t,r,i){null===e?this._viewport=null:(null===this._viewport&&(this._viewport=new s),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,r,i),this._viewport.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}}tT.COLOR="color",tT.DEPTH="depth";class rT extends tT{static get type(){return"ToonOutlinePassNode"}constructor(e,t,r,s,i){super(tT.COLOR,e,t),this.colorNode=r,this.thicknessNode=s,this.alphaNode=i,this._materialCache=new WeakMap,this.name="Outline Pass"}updateBefore(e){const{renderer:t}=e,r=t.getRenderObjectFunction();t.setRenderObjectFunction((e,r,s,i,n,a,o,u)=>{if((n.isMeshToonMaterial||n.isMeshToonNodeMaterial)&&!1===n.wireframe){const l=this._getOutlineMaterial(n);t.renderObject(e,r,s,i,l,a,o,u)}t.renderObject(e,r,s,i,n,a,o,u)}),super.updateBefore(e),t.setRenderObjectFunction(r)}_createMaterial(){const e=new yg;e.isMeshToonOutlineMaterial=!0,e.name="Toon_Outline",e.side=L;const t=oc.negate(),r=Td.mul(Wd),s=fn(1),i=r.mul(wn(Qd,1)),n=r.mul(wn(Qd.add(t),1)),a=So(i.sub(n));return e.vertexNode=i.add(a.mul(this.thicknessNode).mul(i.w).mul(s)),e.colorNode=wn(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return void 0===t&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}}const sT=dn(([e,t])=>e.mul(t).clamp()).setLayout({name:"linearToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),iT=dn(([e,t])=>(e=e.mul(t)).div(e.add(1)).clamp()).setLayout({name:"reinhardToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),nT=dn(([e,t])=>{const r=(e=(e=e.mul(t)).sub(.004).max(0)).mul(e.mul(6.2).add(.5)),s=e.mul(e.mul(6.2).add(1.7)).add(.06);return r.div(s).pow(2.2)}).setLayout({name:"cineonToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),aT=dn(([e])=>{const t=e.mul(e.add(.0245786)).sub(90537e-9),r=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(r)}),oT=dn(([e,t])=>{const r=Ln(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),s=Ln(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=r.mul(e),e=aT(e),(e=s.mul(e)).clamp()}).setLayout({name:"acesFilmicToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),uT=Ln(Sn(1.6605,-.1246,-.0182),Sn(-.5876,1.1329,-.1006),Sn(-.0728,-.0083,1.1187)),lT=Ln(Sn(.6274,.0691,.0164),Sn(.3293,.9195,.088),Sn(.0433,.0113,.8956)),dT=dn(([e])=>{const t=Sn(e).toVar(),r=Sn(t.mul(t)).toVar(),s=Sn(r.mul(r)).toVar();return fn(15.5).mul(s.mul(r)).sub(Pa(40.14,s.mul(t))).add(Pa(31.96,s).sub(Pa(6.868,r.mul(t))).add(Pa(.4298,r).add(Pa(.1191,t).sub(.00232))))}),cT=dn(([e,t])=>{const r=Sn(e).toVar(),s=Ln(Sn(.856627153315983,.137318972929847,.11189821299995),Sn(.0951212405381588,.761241990602591,.0767994186031903),Sn(.0482516061458583,.101439036467562,.811302368396859)),i=Ln(Sn(1.1271005818144368,-.1413297634984383,-.14132976349843826),Sn(-.11060664309660323,1.157823702216272,-.11060664309660294),Sn(-.016493938717834573,-.016493938717834257,1.2519364065950405)),n=fn(-12.47393),a=fn(4.026069);return r.mulAssign(t),r.assign(lT.mul(r)),r.assign(s.mul(r)),r.assign(jo(r,1e-10)),r.assign(xo(r)),r.assign(r.sub(n).div(a.sub(n))),r.assign(uu(r,0,1)),r.assign(dT(r)),r.assign(i.mul(r)),r.assign(eu(jo(Sn(0),r),Sn(2.2))),r.assign(uT.mul(r)),r.assign(uu(r,0,1)),r}).setLayout({name:"agxToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),hT=dn(([e,t])=>{const r=fn(.76),s=fn(.15);e=e.mul(t);const i=qo(e.r,qo(e.g,e.b)),n=Tu(i.lessThan(.08),i.sub(Pa(6.25,i.mul(i))),.04);e.subAssign(n);const a=jo(e.r,jo(e.g,e.b));pn(a.lessThan(r),()=>e);const o=La(1,r),u=La(1,o.mul(o).div(a.add(o.sub(r))));e.mulAssign(u.div(a));const l=La(1,Da(1,s.mul(a.sub(u)).add(1)));return ou(e,Sn(u),l)}).setLayout({name:"neutralToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]});class pT extends di{static get type(){return"CodeNode"}constructor(e="",t=[],r=""){super("code"),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=r}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){const t=this.getIncludes(e);for(const r of t)r.build(e);const r=e.getCodeFromNode(this,this.getNodeType(e));return r.code=this.code,r.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}}const gT=nn(pT).setParameterLength(1,3);class mT extends pT{static get type(){return"FunctionNode"}constructor(e="",t=[],r=""){super(e,t,r)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){const r=this.getNodeType(e);return e.getStructTypeNode(r).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){const t=e.getDataFromNode(this);let r=t.nodeFunction;return void 0===r&&(r=e.parser.parseFunction(this.code),t.nodeFunction=r),r}generate(e,t){super.generate(e);const r=this.getNodeFunction(e),s=r.name,i=r.type,n=e.getCodeFromNode(this,i);""!==s&&(n.name=s);const a=e.getPropertyName(n),o=this.getNodeFunction(e).getCode(a);return n.code=o+"\n","property"===t?a:e.format(`${a}()`,i,t)}}const fT=(e,t=[],r="")=>{for(let e=0;es.call(...e);return i.functionNode=s,i};function yT(e){let t;const r=e.context.getViewZ;return void 0!==r&&(t=r(this)),(t||ec.z).negate()}const bT=dn(([e,t],r)=>{const s=yT(r);return cu(e,t,s)}),xT=dn(([e],t)=>{const r=yT(t);return e.mul(e,r,r).negate().exp().oneMinus()}),TT=dn(([e,t],r)=>{const s=yT(r),i=t.sub(Zd.y).max(0).toConst().mul(s).toConst();return e.mul(e,i,i).negate().exp().oneMinus()}),_T=dn(([e,t])=>wn(t.toFloat().mix(aa.rgb,e.toVec3()),aa.a));let vT=null,NT=null;class ST extends di{static get type(){return"RangeNode"}constructor(e=fn(),t=fn()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){const t=this.getConstNode(this.minNode),r=this.getConstNode(this.maxNode),s=e.getTypeLength(Xs(t.value)),i=e.getTypeLength(Xs(r.value));return s>i?s:i}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):"float"}getConstNode(e){let t=null;if(e.traverse(e=>{!0===e.isConstNode&&(t=e)}),null===t)throw new Fl('THREE.TSL: No "ConstNode" found in node graph.',this.stackTrace);return t}setup(e){const t=e.object;let r=null;if(t.count>1){const i=this.getConstNode(this.minNode),n=this.getConstNode(this.maxNode),a=i.value,o=n.value,u=e.getTypeLength(Xs(a)),d=e.getTypeLength(Xs(o));vT=vT||new s,NT=NT||new s,vT.setScalar(0),NT.setScalar(0),1===u?vT.setScalar(a):a.isColor?vT.set(a.r,a.g,a.b,1):vT.set(a.x,a.y,a.z||0,a.w||0),1===d?NT.setScalar(o):o.isColor?NT.set(o.r,o.g,o.b,1):NT.set(o.x,o.y,o.z||0,o.w||0);const c=4,h=c*t.count,p=new Float32Array(h);for(let e=0;enew ET(e,t),wT=AT("numWorkgroups","uvec3"),CT=AT("workgroupId","uvec3"),MT=AT("globalId","uvec3"),BT=AT("localId","uvec3"),FT=AT("subgroupSize","uint");class LT extends di{constructor(e){super(),this.scope=e}generate(e){const{scope:t}=this,{renderer:r}=e;!0===r.backend.isWebGLBackend?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}const PT=nn(LT);class DT extends ci{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let r;const s=e.context.assign;if(r=super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}class UT extends di{constructor(e,t,r=0){super(t),this.bufferType=t,this.bufferCount=r,this.isWorkgroupInfoNode=!0,this.elementType=t,this.scope=e,this.name=""}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setScope(e){return this.scope=e,this}getElementType(){return this.elementType}getInputType(){return`${this.scope}Array`}element(e){return new DT(this,e)}generate(e){const t=""!==this.name?this.name:`${this.scope}Array_${this.id}`;return e.getScopedArray(t,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}}class IT extends di{static get type(){return"AtomicFunctionNode"}constructor(e,t,r){super("uint"),this.method=e,this.pointerNode=t,this.valueNode=r,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){const t=e.getNodeProperties(this),r=t.parents,s=this.method,i=this.getNodeType(e),n=this.getInputType(e),a=this.pointerNode,o=this.valueNode,u=[];u.push(`&${a.build(e,n)}`),null!==o&&u.push(o.build(e,n));const l=`${e.getMethod(s,i)}( ${u.join(", ")} )`;if(!(!!r&&(1===r.length&&!0===r[0].isStackNode)))return void 0===t.constNode&&(t.constNode=fl(l,i).toConst()),t.constNode.build(e);e.addLineFlowCode(l,this)}}IT.ATOMIC_LOAD="atomicLoad",IT.ATOMIC_STORE="atomicStore",IT.ATOMIC_ADD="atomicAdd",IT.ATOMIC_SUB="atomicSub",IT.ATOMIC_MAX="atomicMax",IT.ATOMIC_MIN="atomicMin",IT.ATOMIC_AND="atomicAnd",IT.ATOMIC_OR="atomicOr",IT.ATOMIC_XOR="atomicXor";const OT=nn(IT),VT=(e,t,r)=>OT(e,t,r).toStack();class kT extends pi{static get type(){return"SubgroupFunctionNode"}constructor(e,t=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=r}getInputType(e){const t=this.aNode?this.aNode.getNodeType(e):null,r=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(r)?0:e.getTypeLength(r))?t:r}getNodeType(e){const t=this.method;return t===kT.SUBGROUP_ELECT?"bool":t===kT.SUBGROUP_BALLOT?"uvec4":this.getInputType(e)}generate(e,t){const r=this.method,s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=[];if(r===kT.SUBGROUP_BROADCAST||r===kT.SUBGROUP_SHUFFLE||r===kT.QUAD_BROADCAST){const t=a.getNodeType(e);o.push(n.build(e,s),a.build(e,"float"===t?"int":s))}else r===kT.SUBGROUP_SHUFFLE_XOR||r===kT.SUBGROUP_SHUFFLE_DOWN||r===kT.SUBGROUP_SHUFFLE_UP?o.push(n.build(e,s),a.build(e,"uint")):(null!==n&&o.push(n.build(e,i)),null!==a&&o.push(a.build(e,i)));const u=0===o.length?"()":`( ${o.join(", ")} )`;return e.format(`${e.getMethod(r,s)}${u}`,s,t)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}kT.SUBGROUP_ELECT="subgroupElect",kT.SUBGROUP_BALLOT="subgroupBallot",kT.SUBGROUP_ADD="subgroupAdd",kT.SUBGROUP_INCLUSIVE_ADD="subgroupInclusiveAdd",kT.SUBGROUP_EXCLUSIVE_AND="subgroupExclusiveAdd",kT.SUBGROUP_MUL="subgroupMul",kT.SUBGROUP_INCLUSIVE_MUL="subgroupInclusiveMul",kT.SUBGROUP_EXCLUSIVE_MUL="subgroupExclusiveMul",kT.SUBGROUP_AND="subgroupAnd",kT.SUBGROUP_OR="subgroupOr",kT.SUBGROUP_XOR="subgroupXor",kT.SUBGROUP_MIN="subgroupMin",kT.SUBGROUP_MAX="subgroupMax",kT.SUBGROUP_ALL="subgroupAll",kT.SUBGROUP_ANY="subgroupAny",kT.SUBGROUP_BROADCAST_FIRST="subgroupBroadcastFirst",kT.QUAD_SWAP_X="quadSwapX",kT.QUAD_SWAP_Y="quadSwapY",kT.QUAD_SWAP_DIAGONAL="quadSwapDiagonal",kT.SUBGROUP_BROADCAST="subgroupBroadcast",kT.SUBGROUP_SHUFFLE="subgroupShuffle",kT.SUBGROUP_SHUFFLE_XOR="subgroupShuffleXor",kT.SUBGROUP_SHUFFLE_UP="subgroupShuffleUp",kT.SUBGROUP_SHUFFLE_DOWN="subgroupShuffleDown",kT.QUAD_BROADCAST="quadBroadcast";const GT=on(kT,kT.SUBGROUP_ELECT).setParameterLength(0),$T=on(kT,kT.SUBGROUP_BALLOT).setParameterLength(1),zT=on(kT,kT.SUBGROUP_ADD).setParameterLength(1),WT=on(kT,kT.SUBGROUP_INCLUSIVE_ADD).setParameterLength(1),HT=on(kT,kT.SUBGROUP_EXCLUSIVE_AND).setParameterLength(1),qT=on(kT,kT.SUBGROUP_MUL).setParameterLength(1),jT=on(kT,kT.SUBGROUP_INCLUSIVE_MUL).setParameterLength(1),XT=on(kT,kT.SUBGROUP_EXCLUSIVE_MUL).setParameterLength(1),KT=on(kT,kT.SUBGROUP_AND).setParameterLength(1),QT=on(kT,kT.SUBGROUP_OR).setParameterLength(1),YT=on(kT,kT.SUBGROUP_XOR).setParameterLength(1),ZT=on(kT,kT.SUBGROUP_MIN).setParameterLength(1),JT=on(kT,kT.SUBGROUP_MAX).setParameterLength(1),e_=on(kT,kT.SUBGROUP_ALL).setParameterLength(0),t_=on(kT,kT.SUBGROUP_ANY).setParameterLength(0),r_=on(kT,kT.SUBGROUP_BROADCAST_FIRST).setParameterLength(2),s_=on(kT,kT.QUAD_SWAP_X).setParameterLength(1),i_=on(kT,kT.QUAD_SWAP_Y).setParameterLength(1),n_=on(kT,kT.QUAD_SWAP_DIAGONAL).setParameterLength(1),a_=on(kT,kT.SUBGROUP_BROADCAST).setParameterLength(2),o_=on(kT,kT.SUBGROUP_SHUFFLE).setParameterLength(2),u_=on(kT,kT.SUBGROUP_SHUFFLE_XOR).setParameterLength(2),l_=on(kT,kT.SUBGROUP_SHUFFLE_UP).setParameterLength(2),d_=on(kT,kT.SUBGROUP_SHUFFLE_DOWN).setParameterLength(2),c_=on(kT,kT.QUAD_BROADCAST).setParameterLength(1);let h_;function p_(e){h_=h_||new WeakMap;let t=h_.get(e);return void 0===t&&h_.set(e,t={}),t}function g_(e){const t=p_(e);return t.shadowMatrix||(t.shadowMatrix=Na("mat4").setGroup(Ta).onRenderUpdate(t=>(!0===e.castShadow&&!1!==t.renderer.shadowMap.enabled||(e.shadow.camera.coordinateSystem!==t.camera.coordinateSystem&&(e.shadow.camera.coordinateSystem=t.camera.coordinateSystem,e.shadow.camera.updateProjectionMatrix()),e.shadow.updateMatrices(e)),e.shadow.matrix)))}function m_(e,t=Zd){const r=g_(e).mul(t);return r.xyz.div(r.w)}function f_(e){const t=p_(e);return t.position||(t.position=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.matrixWorld)))}function y_(e){const t=p_(e);return t.targetPosition||(t.targetPosition=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.target.matrixWorld)))}function b_(e){const t=p_(e);return t.viewPosition||(t.viewPosition=Na(new r).setGroup(Ta).onRenderUpdate(({camera:t},s)=>{s.value=s.value||new r,s.value.setFromMatrixPosition(e.matrixWorld),s.value.applyMatrix4(t.matrixWorldInverse)}))}const x_=e=>vd.transformDirection(f_(e).sub(y_(e))),T_=(e,t)=>{for(const r of t)if(r.isAnalyticLightNode&&r.light.id===e)return r;return null},__=new WeakMap,v_=[];class N_ extends di{static get type(){return"LightsNode"}constructor(){super("vec3"),this.totalDiffuseNode=On("vec3","totalDiffuse"),this.totalSpecularNode=On("vec3","totalSpecular"),this.outgoingLightNode=On("vec3","outgoingLight"),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){const e=this._lights;for(let t=0;te.sort((e,t)=>e.id-t.id))(this._lights),i=e.renderer.library;for(const e of s)if(e.isNode)t.push(en(e));else{let s=null;if(null!==r&&(s=T_(e.id,r)),null===s){const r=i.getLightNodeClass(e.constructor);if(null===r){d(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let s=null;__.has(e)?s=__.get(e):(s=new r(e),__.set(e,s)),t.push(s)}}this._lightNodes=t}setupDirectLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.direct({...r,lightNode:t,reflectedLight:i},e)}setupDirectRectAreaLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.directRectArea({...r,lightNode:t,reflectedLight:i},e)}setupLights(e,t){for(const r of t)r.build(e)}getLightNodes(e){return null===this._lightNodes&&this.setupLightsNode(e),this._lightNodes}setup(e){const t=e.lightsNode;e.lightsNode=this;let r=this.outgoingLightNode;const s=e.context,i=s.lightingModel,n=e.getNodeProperties(this);if(i){const{totalDiffuseNode:t,totalSpecularNode:a}=this;s.outgoingLight=r;const o=e.addStack();n.nodes=o.nodes,i.start(e);const{backdrop:u,backdropAlpha:l}=s,{directDiffuse:d,directSpecular:c,indirectDiffuse:h,indirectSpecular:p}=s.reflectedLight;let g=d.add(h);null!==u&&(g=Sn(null!==l?l.mix(g,u):u)),t.assign(g),a.assign(c.add(p)),r.assign(t.add(a)),i.finish(e),r=r.bypass(e.removeStack())}else n.nodes=[];return e.lightsNode=t,r}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}}class S_ extends di{static get type(){return"ShadowBaseNode"}constructor(e){super(),this.light=e,this.updateBeforeType=ti.RENDER,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){R_.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Zd)}}const R_=On("vec3","shadowPositionWorld");function E_(t,r={}){return r.toneMapping=t.toneMapping,r.toneMappingExposure=t.toneMappingExposure,r.outputColorSpace=t.outputColorSpace,r.renderTarget=t.getRenderTarget(),r.activeCubeFace=t.getActiveCubeFace(),r.activeMipmapLevel=t.getActiveMipmapLevel(),r.renderObjectFunction=t.getRenderObjectFunction(),r.pixelRatio=t.getPixelRatio(),r.mrt=t.getMRT(),r.clearColor=t.getClearColor(r.clearColor||new e),r.clearAlpha=t.getClearAlpha(),r.autoClear=t.autoClear,r.scissorTest=t.getScissorTest(),r}function A_(e,t){return t=E_(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}function w_(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}function C_(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}function M_(e,t){return t=C_(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}function B_(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}function F_(e,t,r){return r=M_(t,r=A_(e,r))}function L_(e,t,r){w_(e,r),B_(t,r)}var P_=Object.freeze({__proto__:null,resetRendererAndSceneState:F_,resetRendererState:A_,resetSceneState:M_,restoreRendererAndSceneState:L_,restoreRendererState:w_,restoreSceneState:B_,saveRendererAndSceneState:function(e,t,r={}){return r=C_(t,r=E_(e,r))},saveRendererState:E_,saveSceneState:C_});const D_=new WeakMap,U_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r})=>{let s=Ul(e,t.xy).setName("t_basic");return e.isArrayTexture&&(s=s.depth(r)),s.compare(t.z)}),I_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Pc("radius","float",r).setGroup(Ta),o=Tn(1).div(n),u=a.mul(o.x),l=yx(Yl.xy).mul(6.28318530718);return Fa(i(t.xy.add(bx(0,5,l).mul(u)),t.z),i(t.xy.add(bx(1,5,l).mul(u)),t.z),i(t.xy.add(bx(2,5,l).mul(u)),t.z),i(t.xy.add(bx(3,5,l).mul(u)),t.z),i(t.xy.add(bx(4,5,l).mul(u)),t.z)).mul(.2)}),O_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Tn(1).div(n),o=a.x,u=a.y,l=t.xy,d=Ro(l.mul(n).add(.5));return l.subAssign(d.mul(a)),Fa(i(l,t.z),i(l.add(Tn(o,0)),t.z),i(l.add(Tn(0,u)),t.z),i(l.add(a),t.z),ou(i(l.add(Tn(o.negate(),0)),t.z),i(l.add(Tn(o.mul(2),0)),t.z),d.x),ou(i(l.add(Tn(o.negate(),u)),t.z),i(l.add(Tn(o.mul(2),u)),t.z),d.x),ou(i(l.add(Tn(0,u.negate())),t.z),i(l.add(Tn(0,u.mul(2))),t.z),d.y),ou(i(l.add(Tn(o,u.negate())),t.z),i(l.add(Tn(o,u.mul(2))),t.z),d.y),ou(ou(i(l.add(Tn(o.negate(),u.negate())),t.z),i(l.add(Tn(o.mul(2),u.negate())),t.z),d.x),ou(i(l.add(Tn(o.negate(),u.mul(2))),t.z),i(l.add(Tn(o.mul(2),u.mul(2))),t.z),d.x),d.y)).mul(1/9)}),V_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r},s)=>{let i=Ul(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(r)),i=i.rg;const n=i.x,a=jo(1e-7,i.y.mul(i.y)),o=s.renderer.reversedDepthBuffer?Xo(n,t.z):Xo(t.z,n),u=fn(1).toVar();return pn(o.notEqual(1),()=>{const e=t.z.sub(n);let r=a.div(a.add(e.mul(e)));r=uu(La(r,.3).div(.65)),u.assign(jo(o,r))}),u}),k_=e=>{let t=D_.get(e);return void 0===t&&(t=new yg,t.colorNode=wn(0,0,0,1),t.isShadowPassMaterial=!0,t.name="ShadowMaterial",t.blending=se,t.fog=!1,D_.set(e,t)),t},G_=e=>{const t=D_.get(e);void 0!==t&&(t.dispose(),D_.delete(e))},$_=new fy,z_=[],W_=(e,t,r,s)=>{z_[0]=e,z_[1]=t;let i=$_.get(z_);return void 0!==i&&i.shadowType===r&&i.useVelocity===s||(i=(i,n,a,o,u,l,...d)=>{(!0===i.castShadow||i.receiveShadow&&r===tt)&&(s&&(Qs(i).useVelocity=!0),i.onBeforeShadow(e,i,a,t.camera,o,n.overrideMaterial,l),e.renderObject(i,n,a,o,u,l,...d),i.onAfterShadow(e,i,a,t.camera,o,n.overrideMaterial,l))},i.shadowType=r,i.useVelocity=s,$_.set(z_,i)),z_[0]=null,z_[1]=null,i},H_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanVertical"),a=fn(0).toVar("squareMeanVertical"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(0,l).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),d=d.x,n.addAssign(d),a.addAssign(d.mul(d))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),q_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanHorizontal"),a=fn(0).toVar("squareMeanHorizontal"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(l,0).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),n.addAssign(d.x),a.addAssign(Fa(d.y.mul(d.y),d.x.mul(d.x)))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),j_=[U_,I_,O_,V_];let X_;const K_=new dx;class Q_ extends S_{static get type(){return"ShadowNode"}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._currentShadowType=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n}){const a=s.x.greaterThanEqual(0).and(s.x.lessThanEqual(1)).and(s.y.greaterThanEqual(0)).and(s.y.lessThanEqual(1)).and(s.z.lessThanEqual(1)),o=t({depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n});return a.select(o,fn(1))}setupShadowCoord(e,t){const{shadow:r}=this,{renderer:s}=e,i=r.biasNode||Pc("bias","float",r).setGroup(Ta);let n,a=t;if(r.camera.isOrthographicCamera||!0!==s.logarithmicDepthBuffer)a=a.xyz.div(a.w),n=a.z;else{const e=a.w;a=a.xy.div(e);const t=Pc("near","float",r.camera).setGroup(Ta),s=Pc("far","float",r.camera).setGroup(Ta);n=Jp(e.negate(),t,s)}return a=Sn(a.x,a.y.oneMinus(),s.reversedDepthBuffer?n.sub(i):n.add(i)),a}getShadowFilterFn(e){return j_[e]}setupRenderTarget(e,t){const r=new J(e.mapSize.width,e.mapSize.height);r.name="ShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return s.texture.name="ShadowMap",s.texture.type=e.mapType,s.depthTexture=r,{shadowMap:s,depthTexture:r}}setupShadow(e){const{renderer:t,camera:r}=e,{light:s,shadow:i}=this,{depthTexture:n,shadowMap:a}=this.setupRenderTarget(i,e),o=t.shadowMap.type,u=t.hasCompatibility(E.TEXTURE_COMPARE);if(o!==Je&&o!==et||!u?(n.minFilter=B,n.magFilter=B):(n.minFilter=de,n.magFilter=de),i.camera.coordinateSystem=r.coordinateSystem,i.camera.updateProjectionMatrix(),o===tt&&!0!==i.isPointLightShadow){n.compareFunction=null,a.depth>1?(a._vsmShadowMapVertical||(a._vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapVertical.texture.name="VSMVertical"),this.vsmShadowMapVertical=a._vsmShadowMapVertical,a._vsmShadowMapHorizontal||(a._vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapHorizontal.texture.name="VSMHorizontal"),this.vsmShadowMapHorizontal=a._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}));let t=Ul(n);n.isArrayTexture&&(t=t.depth(this.depthLayer));let r=Ul(this.vsmShadowMapVertical.texture);n.isArrayTexture&&(r=r.depth(this.depthLayer));const s=Pc("blurSamples","float",i).setGroup(Ta),o=Pc("radius","float",i).setGroup(Ta),u=Pc("mapSize","vec2",i).setGroup(Ta);let l=this.vsmMaterialVertical||(this.vsmMaterialVertical=new yg);l.fragmentNode=H_({samples:s,radius:o,size:u,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMVertical",l=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new yg),l.fragmentNode=q_({samples:s,radius:o,size:u,shadowPass:r,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMHorizontal"}const l=Pc("intensity","float",i).setGroup(Ta),d=Pc("normalBias","float",i).setGroup(Ta),c=g_(s).mul(R_.add(hc.mul(d))),h=this.setupShadowCoord(e,c),p=i.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(null===p)throw new Error("THREE.WebGPURenderer: Shadow map type not supported yet.");const g=o===tt&&!0!==i.isPointLightShadow?this.vsmShadowMapHorizontal.texture:n,m=this.setupShadowFilter(e,{filterFn:p,shadowTexture:a.texture,depthTexture:g,shadowCoord:h,shadow:i,depthLayer:this.depthLayer});let f,y;!0===t.shadowMap.transmitted&&(a.texture.isCubeTexture?f=Bc(a.texture,h.xyz):(f=Ul(a.texture,h),n.isArrayTexture&&(f=f.depth(this.depthLayer)))),y=f?ou(1,m.rgb.mix(f,1),l.mul(f.a)).toVar():ou(1,m,l).toVar(),this.shadowMap=a,this.shadow.map=a;const b=`${this.light.type} Shadow [ ${this.light.name||"ID: "+this.light.id} ]`;return f&&y.toInspector(`${b} / Color`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture):Ul(this.shadowMap.texture)),y.toInspector(`${b} / Depth`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture).r.oneMinus():Il(this.shadowMap.depthTexture,Al().mul(Cl(Ul(this.shadowMap.depthTexture)))).r.oneMinus())}setup(e){if(!1!==e.renderer.shadowMap.enabled)return dn(()=>{const t=e.renderer.shadowMap.type;this._currentShadowType!==t&&(this._reset(),this._node=null);let r=this._node;return this.setupShadowPosition(e),null===r&&(this._node=r=this.setupShadow(e),this._currentShadowType=t),e.material.receivedShadowNode&&(r=e.material.receivedShadowNode(r)),r})()}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e;t.updateMatrices(s),r.setSize(t.mapSize.width,t.mapSize.height,r.depth);const a=n.name;n.name=`Shadow Map [ ${s.name||"ID: "+s.id} ]`,i.render(n,t.camera),n.name=a}updateShadow(e){const{shadowMap:t,light:r,shadow:s}=this,{renderer:i,scene:n,camera:a}=e,o=i.shadowMap.type,u=t.depthTexture.version;this._depthVersionCached=u;const l=s.camera.layers.mask;4294967294&s.camera.layers.mask||(s.camera.layers.mask=a.layers.mask);const d=i.getRenderObjectFunction(),c=i.getMRT(),h=!!c&&c.has("velocity");X_=F_(i,n,X_),n.overrideMaterial=k_(r),i.setRenderObjectFunction(W_(i,s,o,h)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(d),o===tt&&!0!==s.isPointLightShadow&&this.vsmPass(i),s.camera.layers.mask=l,L_(i,n,X_)}vsmPass(e){const{shadow:t}=this,r=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,r),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,r),e.setRenderTarget(this.vsmShadowMapVertical),K_.material=this.vsmMaterialVertical,K_.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),K_.material=this.vsmMaterialHorizontal,K_.render(e)}dispose(){this._reset(),super.dispose()}_reset(){this._currentShadowType=null,G_(this.light),this.shadowMap&&(this.shadowMap.dispose(),this.shadowMap=null),null!==this.vsmShadowMapVertical&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),null!==this.vsmShadowMapHorizontal&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null)}updateBefore(e){const{shadow:t}=this;let r=t.needsUpdate||t.autoUpdate;r&&(this._cameraFrameId[e.camera]===e.frameId&&(r=!1),this._cameraFrameId[e.camera]=e.frameId),r&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}}const Y_=(e,t)=>new Q_(e,t),Z_=new e,J_=new a,ev=new r,tv=new r,rv=[new r(1,0,0),new r(-1,0,0),new r(0,-1,0),new r(0,1,0),new r(0,0,1),new r(0,0,-1)],sv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,-1),new r(0,0,1),new r(0,-1,0),new r(0,-1,0)],iv=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],nv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],av=dn(({depthTexture:e,bd3D:t,dp:r})=>Bc(e,t).compare(r)),ov=dn(({depthTexture:e,bd3D:t,dp:r,shadow:s})=>{const i=Pc("radius","float",s).setGroup(Ta),n=Pc("mapSize","vec2",s).setGroup(Ta),a=i.div(n.x),o=Fo(t),u=So(Jo(t,o.x.greaterThan(o.z).select(Sn(0,1,0),Sn(1,0,0)))),l=Jo(t,u),d=yx(Yl.xy).mul(6.28318530718),c=bx(0,5,d),h=bx(1,5,d),p=bx(2,5,d),g=bx(3,5,d),m=bx(4,5,d);return Bc(e,t.add(u.mul(c.x).add(l.mul(c.y)).mul(a))).compare(r).add(Bc(e,t.add(u.mul(h.x).add(l.mul(h.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(p.x).add(l.mul(p.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(g.x).add(l.mul(g.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(m.x).add(l.mul(m.y)).mul(a))).compare(r)).mul(.2)}),uv=dn(({filterFn:e,depthTexture:t,shadowCoord:r,shadow:s},i)=>{const n=r.xyz.toConst(),a=n.abs().toConst(),o=a.x.max(a.y).max(a.z),u=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.near),l=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.far),d=Pc("bias","float",s).setGroup(Ta),c=fn(1).toVar();return pn(o.sub(l).lessThanEqual(0).and(o.sub(u).greaterThanEqual(0)),()=>{let r;i.renderer.reversedDepthBuffer?(r=Yp(o.negate(),u,l),r.subAssign(d)):(r=Qp(o.negate(),u,l),r.addAssign(d));const a=n.normalize();c.assign(e({depthTexture:t,bd3D:a,dp:r,shadow:s}))}),c});class lv extends Q_{static get type(){return"PointShadowNode"}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return e===rt?av:ov}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i}){return uv({filterFn:t,depthTexture:r,shadowCoord:s,shadow:i})}setupRenderTarget(e,t){const r=new st(e.mapSize.width);r.name="PointShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createCubeRenderTarget(e.mapSize.width);return s.texture.name="PointShadowMap",s.depthTexture=r,{shadowMap:s,depthTexture:r}}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e,a=t.camera,o=t.matrix,u=i.coordinateSystem===h,l=u?rv:iv,d=u?sv:nv;r.setSize(t.mapSize.width,t.mapSize.width);const c=i.autoClear,p=i.getClearColor(Z_),g=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha);for(let e=0;e<6;e++){i.setRenderTarget(r,e),i.clear();const u=s.distance||a.far;u!==a.far&&(a.far=u,a.updateProjectionMatrix()),ev.setFromMatrixPosition(s.matrixWorld),a.position.copy(ev),tv.copy(a.position),tv.add(l[e]),a.up.copy(d[e]),a.lookAt(tv),a.updateMatrixWorld(),o.makeTranslation(-ev.x,-ev.y,-ev.z),J_.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),t._frustum.setFromProjectionMatrix(J_,a.coordinateSystem,a.reversedDepth);const c=n.name;n.name=`Point Light Shadow [ ${s.name||"ID: "+s.id} ] - Face ${e+1}`,i.render(n,a),n.name=c}i.autoClear=c,i.setClearColor(p,g)}}const dv=(e,t)=>new lv(e,t);class cv extends Lp{static get type(){return"AnalyticLightNode"}constructor(t=null){super(),this.light=t,this.color=new e,this.colorNode=t&&t.colorNode||Na(this.color).setGroup(Ta),this.baseColorNode=null,this.shadowNode=null,this.shadowColorNode=null,this.isAnalyticLightNode=!0,this.updateType=ti.FRAME,t&&t.shadow&&(this._shadowDisposeListener=()=>{this.disposeShadow()},t.addEventListener("dispose",this._shadowDisposeListener))}dispose(){this._shadowDisposeListener&&this.light.removeEventListener("dispose",this._shadowDisposeListener),super.dispose()}disposeShadow(){null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null),this.shadowColorNode=null,null!==this.baseColorNode&&(this.colorNode=this.baseColorNode,this.baseColorNode=null)}getHash(){return this.light.uuid}getLightVector(e){return b_(this.light).sub(e.context.positionView||ec)}setupDirect(){}setupDirectRectArea(){}setupShadowNode(){return Y_(this.light)}setupShadow(e){const{renderer:t}=e;if(!1===t.shadowMap.enabled)return;let r=this.shadowColorNode;if(null===r){const e=this.light.shadow.shadowNode;let t;t=void 0!==e?en(e):this.setupShadowNode(),this.shadowNode=t,this.shadowColorNode=r=this.colorNode.mul(t),this.baseColorNode=this.colorNode}e.context.getShadow&&(r=e.context.getShadow(this,e)),this.colorNode=r}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null,this.shadowColorNode=null);const t=this.setupDirect(e),r=this.setupDirectRectArea(e);t&&e.lightsNode.setupDirectLight(e,this,t),r&&e.lightsNode.setupDirectRectAreaLight(e,this,r)}update(){const{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}}const hv=dn(({lightDistance:e,cutoffDistance:t,decayExponent:r})=>{const s=e.pow(r).max(.01).reciprocal();return t.greaterThan(0).select(s.mul(e.div(t).pow4().oneMinus().clamp().pow2()),s)}),pv=({color:e,lightVector:t,cutoffDistance:r,decayExponent:s})=>{const i=t.normalize(),n=t.length(),a=hv({lightDistance:n,cutoffDistance:r,decayExponent:s});return{lightDirection:i,lightColor:e.mul(a)}};class gv extends cv{static get type(){return"PointLightNode"}constructor(e=null){super(e),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(2).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setupShadowNode(){return dv(this.light)}setupDirect(e){return pv({color:this.colorNode,lightVector:this.getLightVector(e),cutoffDistance:this.cutoffDistanceNode,decayExponent:this.decayExponentNode})}}const mv=dn(([e=Al()])=>{const t=e.mul(2),r=t.x.floor(),s=t.y.floor();return r.add(s).mod(2).sign()}),fv=dn(([e=Al()],{renderer:t,material:r})=>{const s=au(e.mul(2).sub(1));let i;if(r.alphaToCoverage&&t.currentSamples>0){const e=fn(s.fwidth()).toVar();i=cu(e.oneMinus(),e.add(1),s).oneMinus()}else i=Tu(s.greaterThan(1),0,1);return i}),yv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=xn(e).toVar();return Tu(n,i,s)}).setLayout({name:"mx_select",type:"float",inputs:[{name:"b",type:"bool"},{name:"t",type:"float"},{name:"f",type:"float"}]}),bv=dn(([e,t])=>{const r=xn(t).toVar(),s=fn(e).toVar();return Tu(r,s.negate(),s)}).setLayout({name:"mx_negate_if",type:"float",inputs:[{name:"val",type:"float"},{name:"b",type:"bool"}]}),xv=dn(([e])=>{const t=fn(e).toVar();return yn(vo(t))}).setLayout({name:"mx_floor",type:"int",inputs:[{name:"x",type:"float"}]}),Tv=dn(([e,t])=>{const r=fn(e).toVar();return t.assign(xv(r)),r.sub(fn(t))}),_v=Db([dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=fn(s).toVar(),l=fn(r).toVar(),d=fn(t).toVar(),c=fn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"}]}),dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=Sn(s).toVar(),l=Sn(r).toVar(),d=Sn(t).toVar(),c=Sn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"}]})]),vv=Db([dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=fn(o).toVar(),m=fn(a).toVar(),f=fn(n).toVar(),y=fn(i).toVar(),b=fn(s).toVar(),x=fn(r).toVar(),T=fn(t).toVar(),_=fn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"v4",type:"float"},{name:"v5",type:"float"},{name:"v6",type:"float"},{name:"v7",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]}),dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=Sn(o).toVar(),m=Sn(a).toVar(),f=Sn(n).toVar(),y=Sn(i).toVar(),b=Sn(s).toVar(),x=Sn(r).toVar(),T=Sn(t).toVar(),_=Sn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"v4",type:"vec3"},{name:"v5",type:"vec3"},{name:"v6",type:"vec3"},{name:"v7",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]})]),Nv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=bn(e).toVar(),a=bn(n.bitAnd(bn(7))).toVar(),o=fn(yv(a.lessThan(bn(4)),i,s)).toVar(),u=fn(Pa(2,yv(a.lessThan(bn(4)),s,i))).toVar();return bv(o,xn(a.bitAnd(bn(1)))).add(bv(u,xn(a.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_0",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Sv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=bn(e).toVar(),u=bn(o.bitAnd(bn(15))).toVar(),l=fn(yv(u.lessThan(bn(8)),a,n)).toVar(),d=fn(yv(u.lessThan(bn(4)),n,yv(u.equal(bn(12)).or(u.equal(bn(14))),a,i))).toVar();return bv(l,xn(u.bitAnd(bn(1)))).add(bv(d,xn(u.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_1",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),Rv=Db([Nv,Sv]),Ev=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=En(e).toVar();return Sn(Rv(n.x,i,s),Rv(n.y,i,s),Rv(n.z,i,s))}).setLayout({name:"mx_gradient_vec3_0",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Av=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=En(e).toVar();return Sn(Rv(o.x,a,n,i),Rv(o.y,a,n,i),Rv(o.z,a,n,i))}).setLayout({name:"mx_gradient_vec3_1",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),wv=Db([Ev,Av]),Cv=dn(([e])=>{const t=fn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Mv=dn(([e])=>{const t=fn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Bv=Db([Cv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Fv=Db([Mv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Lv=dn(([e,t])=>{const r=yn(t).toVar(),s=bn(e).toVar();return s.shiftLeft(r).bitOr(s.shiftRight(yn(32).sub(r)))}).setLayout({name:"mx_rotl32",type:"uint",inputs:[{name:"x",type:"uint"},{name:"k",type:"int"}]}),Pv=dn(([e,t,r])=>{e.subAssign(r),e.bitXorAssign(Lv(r,yn(4))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(6))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(8))),t.addAssign(e),e.subAssign(r),e.bitXorAssign(Lv(r,yn(16))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(19))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(4))),t.addAssign(e)}),Dv=dn(([e,t,r])=>{const s=bn(r).toVar(),i=bn(t).toVar(),n=bn(e).toVar();return s.bitXorAssign(i),s.subAssign(Lv(i,yn(14))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(11))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(25))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(16))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(4))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(14))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(24))),s}).setLayout({name:"mx_bjfinal",type:"uint",inputs:[{name:"a",type:"uint"},{name:"b",type:"uint"},{name:"c",type:"uint"}]}),Uv=dn(([e])=>{const t=bn(e).toVar();return fn(t).div(fn(bn(yn(4294967295))))}).setLayout({name:"mx_bits_to_01",type:"float",inputs:[{name:"bits",type:"uint"}]}),Iv=dn(([e])=>{const t=fn(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:"mx_fade",type:"float",inputs:[{name:"t",type:"float"}]}),Ov=Db([dn(([e])=>{const t=yn(e).toVar(),r=bn(bn(1)).toVar(),s=bn(bn(yn(3735928559)).add(r.shiftLeft(bn(2))).add(bn(13))).toVar();return Dv(s.add(bn(t)),s,s)}).setLayout({name:"mx_hash_int_0",type:"uint",inputs:[{name:"x",type:"int"}]}),dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(bn(2)).toVar(),n=bn().toVar(),a=bn().toVar(),o=bn().toVar();return n.assign(a.assign(o.assign(bn(yn(3735928559)).add(i.shiftLeft(bn(2))).add(bn(13))))),n.addAssign(bn(s)),a.addAssign(bn(r)),Dv(n,a,o)}).setLayout({name:"mx_hash_int_1",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(bn(3)).toVar(),o=bn().toVar(),u=bn().toVar(),l=bn().toVar();return o.assign(u.assign(l.assign(bn(yn(3735928559)).add(a.shiftLeft(bn(2))).add(bn(13))))),o.addAssign(bn(n)),u.addAssign(bn(i)),l.addAssign(bn(s)),Dv(o,u,l)}).setLayout({name:"mx_hash_int_2",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]}),dn(([e,t,r,s])=>{const i=yn(s).toVar(),n=yn(r).toVar(),a=yn(t).toVar(),o=yn(e).toVar(),u=bn(bn(4)).toVar(),l=bn().toVar(),d=bn().toVar(),c=bn().toVar();return l.assign(d.assign(c.assign(bn(yn(3735928559)).add(u.shiftLeft(bn(2))).add(bn(13))))),l.addAssign(bn(o)),d.addAssign(bn(a)),c.addAssign(bn(n)),Pv(l,d,c),l.addAssign(bn(i)),Dv(l,d,c)}).setLayout({name:"mx_hash_int_3",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"}]}),dn(([e,t,r,s,i])=>{const n=yn(i).toVar(),a=yn(s).toVar(),o=yn(r).toVar(),u=yn(t).toVar(),l=yn(e).toVar(),d=bn(bn(5)).toVar(),c=bn().toVar(),h=bn().toVar(),p=bn().toVar();return c.assign(h.assign(p.assign(bn(yn(3735928559)).add(d.shiftLeft(bn(2))).add(bn(13))))),c.addAssign(bn(l)),h.addAssign(bn(u)),p.addAssign(bn(o)),Pv(c,h,p),c.addAssign(bn(a)),h.addAssign(bn(n)),Dv(c,h,p)}).setLayout({name:"mx_hash_int_4",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"},{name:"yy",type:"int"}]})]),Vv=Db([dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(Ov(s,r)).toVar(),n=En().toVar();return n.x.assign(i.bitAnd(yn(255))),n.y.assign(i.shiftRight(yn(8)).bitAnd(yn(255))),n.z.assign(i.shiftRight(yn(16)).bitAnd(yn(255))),n}).setLayout({name:"mx_hash_vec3_0",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(Ov(n,i,s)).toVar(),o=En().toVar();return o.x.assign(a.bitAnd(yn(255))),o.y.assign(a.shiftRight(yn(8)).bitAnd(yn(255))),o.z.assign(a.shiftRight(yn(16)).bitAnd(yn(255))),o}).setLayout({name:"mx_hash_vec3_1",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]})]),kv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=fn(_v(Rv(Ov(r,s),i,n),Rv(Ov(r.add(yn(1)),s),i.sub(1),n),Rv(Ov(r,s.add(yn(1))),i,n.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=fn(vv(Rv(Ov(r,s,i),n,a,o),Rv(Ov(r.add(yn(1)),s,i),n.sub(1),a,o),Rv(Ov(r,s.add(yn(1)),i),n,a.sub(1),o),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),Rv(Ov(r,s,i.add(yn(1))),n,a,o.sub(1)),Rv(Ov(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),Rv(Ov(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"}]})]),Gv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=Sn(_v(wv(Vv(r,s),i,n),wv(Vv(r.add(yn(1)),s),i.sub(1),n),wv(Vv(r,s.add(yn(1))),i,n.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=Sn(vv(wv(Vv(r,s,i),n,a,o),wv(Vv(r.add(yn(1)),s,i),n.sub(1),a,o),wv(Vv(r,s.add(yn(1)),i),n,a.sub(1),o),wv(Vv(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),wv(Vv(r,s,i.add(yn(1))),n,a,o.sub(1)),wv(Vv(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),wv(Vv(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"}]})]),$v=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Uv(Ov(r))}).setLayout({name:"mx_cell_noise_float_0",type:"float",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Uv(Ov(r,s))}).setLayout({name:"mx_cell_noise_float_1",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Uv(Ov(r,s,i))}).setLayout({name:"mx_cell_noise_float_2",type:"float",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Uv(Ov(r,s,i,n))}).setLayout({name:"mx_cell_noise_float_3",type:"float",inputs:[{name:"p",type:"vec4"}]})]),zv=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Sn(Uv(Ov(r,yn(0))),Uv(Ov(r,yn(1))),Uv(Ov(r,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Sn(Uv(Ov(r,s,yn(0))),Uv(Ov(r,s,yn(1))),Uv(Ov(r,s,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Sn(Uv(Ov(r,s,i,yn(0))),Uv(Ov(r,s,i,yn(1))),Uv(Ov(r,s,i,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_2",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Sn(Uv(Ov(r,s,i,n,yn(0))),Uv(Ov(r,s,i,n,yn(1))),Uv(Ov(r,s,i,n,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_3",type:"vec3",inputs:[{name:"p",type:"vec4"}]})]),Wv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=fn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(kv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_float",type:"float",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Hv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(Gv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_vec3",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),qv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar();return Tn(Wv(o,a,n,i),Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i))}).setLayout({name:"mx_fractal_noise_vec2",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),jv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(Hv(o,a,n,i)).toVar(),l=fn(Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i)).toVar();return wn(u,l)}).setLayout({name:"mx_fractal_noise_vec4",type:"vec4",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Xv=Db([dn(([e,t,r,s,i,n,a])=>{const o=yn(a).toVar(),u=fn(n).toVar(),l=yn(i).toVar(),d=yn(s).toVar(),c=yn(r).toVar(),h=yn(t).toVar(),p=Tn(e).toVar(),g=Sn(zv(Tn(h.add(d),c.add(l)))).toVar(),m=Tn(g.x,g.y).toVar();m.subAssign(.5),m.mulAssign(u),m.addAssign(.5);const f=Tn(Tn(fn(h),fn(c)).add(m)).toVar(),y=Tn(f.sub(p)).toVar();return pn(o.equal(yn(2)),()=>Fo(y.x).add(Fo(y.y))),pn(o.equal(yn(3)),()=>jo(Fo(y.x),Fo(y.y))),Zo(y,y)}).setLayout({name:"mx_worley_distance_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),dn(([e,t,r,s,i,n,a,o,u])=>{const l=yn(u).toVar(),d=fn(o).toVar(),c=yn(a).toVar(),h=yn(n).toVar(),p=yn(i).toVar(),g=yn(s).toVar(),m=yn(r).toVar(),f=yn(t).toVar(),y=Sn(e).toVar(),b=Sn(zv(Sn(f.add(p),m.add(h),g.add(c)))).toVar();b.subAssign(.5),b.mulAssign(d),b.addAssign(.5);const x=Sn(Sn(fn(f),fn(m),fn(g)).add(b)).toVar(),T=Sn(x.sub(y)).toVar();return pn(l.equal(yn(2)),()=>Fo(T.x).add(Fo(T.y)).add(Fo(T.z))),pn(l.equal(yn(3)),()=>jo(Fo(T.x),Fo(T.y),Fo(T.z))),Zo(T,T)}).setLayout({name:"mx_worley_distance_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"zoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Kv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();l.assign(qo(l,r))})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Qv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.y.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec2_0",type:"vec2",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Yv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(r)}).ElseIf(r.lessThan(l.z),()=>{l.z.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Zv=Db([Kv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();d.assign(qo(d,n))})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Jv=Db([Qv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.y.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec2_1",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),eN=Db([Yv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.z.assign(d.y),d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.z.assign(d.y),d.y.assign(n)}).ElseIf(n.lessThan(d.z),()=>{d.z.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),tN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Tn(t).toVar(),p=Tn(r).toVar(),g=Tn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(Sn(v,0),x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise2d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"texcoord",type:"vec2"},{name:"freq",type:"vec2"},{name:"offset",type:"vec2"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),rN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Sn(t).toVar(),p=Sn(r).toVar(),g=Sn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(v,x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise3d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"position",type:"vec3"},{name:"freq",type:"vec3"},{name:"offset",type:"vec3"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),sN=dn(([e])=>{const t=e.y,r=e.z,s=Sn().toVar();return pn(t.lessThan(1e-4),()=>{s.assign(Sn(r,r,r))}).Else(()=>{let i=e.x;i=i.sub(vo(i)).mul(6).toVar();const n=yn(Go(i)),a=i.sub(fn(n)),o=r.mul(t.oneMinus()),u=r.mul(t.mul(a).oneMinus()),l=r.mul(t.mul(a.oneMinus()).oneMinus());pn(n.equal(yn(0)),()=>{s.assign(Sn(r,l,o))}).ElseIf(n.equal(yn(1)),()=>{s.assign(Sn(u,r,o))}).ElseIf(n.equal(yn(2)),()=>{s.assign(Sn(o,r,l))}).ElseIf(n.equal(yn(3)),()=>{s.assign(Sn(o,u,r))}).ElseIf(n.equal(yn(4)),()=>{s.assign(Sn(l,o,r))}).Else(()=>{s.assign(Sn(r,o,u))})}),s}).setLayout({name:"mx_hsvtorgb",type:"vec3",inputs:[{name:"hsv",type:"vec3"}]}),iN=dn(([e])=>{const t=Sn(e).toVar(),r=fn(t.x).toVar(),s=fn(t.y).toVar(),i=fn(t.z).toVar(),n=fn(qo(r,qo(s,i))).toVar(),a=fn(jo(r,jo(s,i))).toVar(),o=fn(a.sub(n)).toVar(),u=fn().toVar(),l=fn().toVar(),d=fn().toVar();return d.assign(a),pn(a.greaterThan(0),()=>{l.assign(o.div(a))}).Else(()=>{l.assign(0)}),pn(l.lessThanEqual(0),()=>{u.assign(0)}).Else(()=>{pn(r.greaterThanEqual(a),()=>{u.assign(s.sub(i).div(o))}).ElseIf(s.greaterThanEqual(a),()=>{u.assign(Fa(2,i.sub(r).div(o)))}).Else(()=>{u.assign(Fa(4,r.sub(s).div(o)))}),u.mulAssign(1/6),pn(u.lessThan(0),()=>{u.addAssign(1)})}),Sn(u,l,d)}).setLayout({name:"mx_rgbtohsv",type:"vec3",inputs:[{name:"c",type:"vec3"}]}),nN=dn(([e])=>{const t=Sn(e).toVar(),r=An(ka(t,Sn(.04045))).toVar(),s=Sn(t.div(12.92)).toVar(),i=Sn(eu(jo(t.add(Sn(.055)),Sn(0)).div(1.055),Sn(2.4))).toVar();return ou(s,i,r)}).setLayout({name:"mx_srgb_texture_to_lin_rec709",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),aN=(e,t)=>{e=fn(e),t=fn(t);const r=Tn(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return cu(e.sub(r),e.add(r),t)},oN=(e,t,r,s)=>ou(e,t,r[s].clamp()),uN=(e,t,r,s,i)=>ou(e,t,aN(r,s[i])),lN=dn(([e,t,r])=>{const s=So(e).toVar(),i=La(fn(.5).mul(t.sub(r)),Zd).div(s).toVar(),n=La(fn(-.5).mul(t.sub(r)),Zd).div(s).toVar(),a=Sn().toVar();a.x=s.x.greaterThan(fn(0)).select(i.x,n.x),a.y=s.y.greaterThan(fn(0)).select(i.y,n.y),a.z=s.z.greaterThan(fn(0)).select(i.z,n.z);const o=qo(a.x,a.y,a.z).toVar();return Zd.add(s.mul(o)).toVar().sub(r)}),dN=dn(([e,t])=>{const r=e.x,s=e.y,i=e.z;let n=t.element(0).mul(.886227);return n=n.add(t.element(1).mul(1.023328).mul(s)),n=n.add(t.element(2).mul(1.023328).mul(i)),n=n.add(t.element(3).mul(1.023328).mul(r)),n=n.add(t.element(4).mul(.858086).mul(r).mul(s)),n=n.add(t.element(5).mul(.858086).mul(s).mul(i)),n=n.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),n=n.add(t.element(7).mul(.858086).mul(r).mul(i)),n=n.add(t.element(8).mul(.429043).mul(Pa(r,r).sub(Pa(s,s)))),n});var cN=Object.freeze({__proto__:null,BRDF_GGX:tm,BRDF_Lambert:kg,BasicPointShadowFilter:av,BasicShadowFilter:U_,Break:Ap,Const:Bu,Continue:()=>fl("continue").toStack(),DFGLUT:im,D_GGX:Zg,Discard:yl,EPSILON:no,F_Schlick:Vg,Fn:dn,HALF_PI:co,INFINITY:ao,If:pn,Loop:Ep,NodeAccess:si,NodeShaderStage:ei,NodeType:ri,NodeUpdateType:ti,OnBeforeMaterialUpdate:e=>_x(Tx.BEFORE_MATERIAL,e),OnBeforeObjectUpdate:e=>_x(Tx.BEFORE_OBJECT,e),OnMaterialUpdate:e=>_x(Tx.MATERIAL,e),OnObjectUpdate:e=>_x(Tx.OBJECT,e),PCFShadowFilter:I_,PCFSoftShadowFilter:O_,PI:oo,PI2:uo,PointShadowFilter:ov,Return:()=>fl("return").toStack(),Schlick_to_F0:om,ShaderNode:Ji,Stack:gn,Switch:(...e)=>Ni.Switch(...e),TBNViewMatrix:oh,TWO_PI:lo,VSMShadowFilter:V_,V_GGX_SmithCorrelated:Qg,Var:Mu,VarIntent:Fu,abs:Fo,acesFilmicToneMapping:oT,acos:Mo,add:Fa,addMethodChaining:Ri,addNodeElement:function(e){d("TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add",e)},agxToneMapping:cT,all:ho,alphaT:Zn,and:za,anisotropy:Jn,anisotropyB:ta,anisotropyT:ea,any:po,append:e=>(d("TSL: append() has been renamed to Stack().",new Us),gn(e)),array:Ra,arrayBuffer:e=>new _i(e,"ArrayBuffer"),asin:Co,assign:Aa,atan:Bo,atomicAdd:(e,t)=>VT(IT.ATOMIC_ADD,e,t),atomicAnd:(e,t)=>VT(IT.ATOMIC_AND,e,t),atomicFunc:VT,atomicLoad:e=>VT(IT.ATOMIC_LOAD,e,null),atomicMax:(e,t)=>VT(IT.ATOMIC_MAX,e,t),atomicMin:(e,t)=>VT(IT.ATOMIC_MIN,e,t),atomicOr:(e,t)=>VT(IT.ATOMIC_OR,e,t),atomicStore:(e,t)=>VT(IT.ATOMIC_STORE,e,t),atomicSub:(e,t)=>VT(IT.ATOMIC_SUB,e,t),atomicXor:(e,t)=>VT(IT.ATOMIC_XOR,e,t),attenuationColor:ga,attenuationDistance:pa,attribute:El,attributeArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new Nx(e,r,s);return up(i,t,e)},backgroundBlurriness:wx,backgroundIntensity:Cx,backgroundRotation:Mx,batch:_p,bentNormalView:lh,billboarding:Gb,bitAnd:ja,bitNot:Xa,bitOr:Ka,bitXor:Qa,bitangentGeometry:sh,bitangentLocal:ih,bitangentView:nh,bitangentWorld:ah,bitcast:pb,blendBurn:dg,blendColor:gg,blendDodge:cg,blendOverlay:pg,blendScreen:hg,blur:uf,bool:xn,buffer:Vl,bufferAttribute:tl,builtin:Wl,builtinAOContext:Eu,builtinShadowContext:Ru,bumpMap:yh,bvec2:Nn,bvec3:An,bvec4:Bn,bypass:cl,cache:ll,call:Ca,cameraFar:xd,cameraIndex:yd,cameraNear:bd,cameraNormalMatrix:Sd,cameraPosition:Rd,cameraProjectionMatrix:Td,cameraProjectionMatrixInverse:_d,cameraViewMatrix:vd,cameraViewport:Ed,cameraWorldMatrix:Nd,cbrt:nu,cdl:jx,ceil:No,checker:mv,cineonToneMapping:nT,clamp:uu,clearcoat:Hn,clearcoatNormalView:pc,clearcoatRoughness:qn,clipSpace:Xd,code:gT,color:mn,colorSpaceToWorking:zu,colorToDirection:e=>en(e).mul(2).sub(1),compute:al,computeKernel:nl,computeSkinning:(e,t=null)=>{const r=new Np(e);return r.positionNode=up(new j(e.geometry.getAttribute("position").array,3),"vec3").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinIndexNode=up(new j(new Uint32Array(e.geometry.getAttribute("skinIndex").array),4),"uvec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinWeightNode=up(new j(e.geometry.getAttribute("skinWeight").array,4),"vec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.bindMatrixNode=Na(e.bindMatrix,"mat4"),r.bindMatrixInverseNode=Na(e.bindMatrixInverse,"mat4"),r.boneMatricesNode=Vl(e.skeleton.boneMatrices,"mat4",e.skeleton.bones.length),r.toPositionNode=t,en(r)},context:vu,convert:Un,convertColorSpace:(e,t,r)=>new Gu(en(e),t,r),convertToTexture:(e,...t)=>e.isSampleNode||e.isTextureNode?e:e.isPassNode?e.getTextureNode():px(e,...t),cos:Ao,countLeadingZeros:bb,countOneBits:xb,countTrailingZeros:yb,cross:Jo,cubeTexture:Bc,cubeTextureBase:Mc,dFdx:Io,dFdy:Oo,dashSize:oa,debug:_l,decrement:ro,decrementBefore:eo,defaultBuildStages:ni,defaultShaderStages:ii,defined:Yi,degrees:mo,deltaTime:Ib,densityFogFactor:xT,depth:tg,depthPass:(e,t,r)=>new tT(tT.DEPTH,e,t,r),determinant:Wo,difference:Yo,diffuseColor:kn,diffuseContribution:Gn,directPointLight:pv,directionToColor:dh,directionToFaceDirection:nc,dispersion:ma,disposeShadowMaterial:G_,distance:Qo,div:Da,dot:Zo,drawIndex:mp,dynamicBufferAttribute:(e,t=null,r=0,s=0)=>el(e,t,r,s,x),element:Dn,emissive:$n,equal:Ia,equirectUV:Eg,exp:fo,exp2:yo,exponentialHeightFogFactor:TT,expression:fl,faceDirection:ic,faceForward:hu,faceforward:yu,float:fn,floatBitsToInt:e=>new hb(e,"int","float"),floatBitsToUint:gb,floor:vo,fog:_T,fract:Ro,frameGroup:xa,frameId:Ob,frontFacing:sc,fwidth:$o,gain:(e,t)=>e.lessThan(.5)?_b(e.mul(2),t).div(2):La(1,_b(Pa(La(1,e),2),t).div(2)),gapSize:ua,getConstNodeType:Zi,getCurrentStack:hn,getDirection:sf,getDistanceAttenuation:hv,getGeometryRoughness:Xg,getNormalFromDepth:fx,getParallaxCorrectNormal:lN,getRoughness:Kg,getScreenPosition:mx,getShIrradianceAt:dN,getShadowMaterial:k_,getShadowRenderObjectFunction:W_,getTextureIndex:lb,getViewPosition:gx,ggxConvolution:hf,globalId:MT,glsl:(e,t)=>gT(e,t,"glsl"),glslFn:(e,t)=>fT(e,t,"glsl"),grayscale:$x,greaterThan:ka,greaterThanEqual:$a,hash:Tb,highpModelNormalViewMatrix:jd,highpModelViewMatrix:qd,hue:Hx,increment:to,incrementBefore:Ja,inspector:Sl,instance:yp,instanceIndex:cp,instancedArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new vx(e,r,s);return up(i,t,i.count)},instancedBufferAttribute:rl,instancedDynamicBufferAttribute:sl,instancedMesh:xp,int:yn,intBitsToFloat:e=>new hb(e,"float","int"),interleavedGradientNoise:yx,inverse:Ho,inverseSqrt:_o,inversesqrt:bu,invocationLocalIndex:gp,invocationSubgroupIndex:pp,ior:da,iridescence:Kn,iridescenceIOR:Qn,iridescenceThickness:Yn,isolate:ul,ivec2:_n,ivec3:Rn,ivec4:Cn,js:(e,t)=>gT(e,t,"js"),label:Au,length:Po,lengthSq:au,lessThan:Va,lessThanEqual:Ga,lightPosition:f_,lightProjectionUV:m_,lightShadowMatrix:g_,lightTargetDirection:x_,lightTargetPosition:y_,lightViewPosition:b_,lightingContext:Up,lights:(e=[])=>(new N_).setLights(e),linearDepth:rg,linearToneMapping:sT,localId:BT,log:bo,log2:xo,logarithmicDepthToViewZ:(e,t,r)=>{const s=e.mul(bo(r.div(t)));return fn(Math.E).pow(s).mul(t).negate()},luminance:qx,mat2:Fn,mat3:Ln,mat4:Pn,matcapUV:Qf,materialAO:rp,materialAlphaTest:Th,materialAnisotropy:Vh,materialAnisotropyVector:sp,materialAttenuationColor:jh,materialAttenuationDistance:qh,materialClearcoat:Lh,materialClearcoatNormal:Dh,materialClearcoatRoughness:Ph,materialColor:_h,materialDispersion:ep,materialEmissive:Nh,materialEnvIntensity:vc,materialEnvRotation:Nc,materialIOR:Hh,materialIridescence:kh,materialIridescenceIOR:Gh,materialIridescenceThickness:$h,materialLightMap:tp,materialLineDashOffset:Zh,materialLineDashSize:Kh,materialLineGapSize:Qh,materialLineScale:Xh,materialLineWidth:Yh,materialMetalness:Bh,materialNormal:Fh,materialOpacity:Sh,materialPointSize:Jh,materialReference:Ic,materialReflectivity:Ch,materialRefractionRatio:_c,materialRotation:Uh,materialRoughness:Mh,materialSheen:Ih,materialSheenRoughness:Oh,materialShininess:vh,materialSpecular:Rh,materialSpecularColor:Ah,materialSpecularIntensity:Eh,materialSpecularStrength:wh,materialThickness:Wh,materialTransmission:zh,max:jo,maxMipLevel:Bl,mediumpModelViewMatrix:Hd,metalness:Wn,min:qo,mix:ou,mixElement:gu,mod:Ua,modInt:so,modelDirection:Ud,modelNormalMatrix:$d,modelPosition:Od,modelRadius:Gd,modelScale:Vd,modelViewMatrix:Wd,modelViewPosition:kd,modelViewProjection:ip,modelWorldMatrix:Id,modelWorldMatrixInverse:zd,morphReference:Fp,mrt:cb,mul:Pa,mx_aastep:aN,mx_add:(e,t=fn(0))=>Fa(e,t),mx_atan2:(e=fn(0),t=fn(1))=>Bo(e,t),mx_cell_noise_float:(e=Al())=>$v(e.convert("vec2|vec3")),mx_contrast:(e,t=1,r=.5)=>fn(e).sub(r).mul(t).add(r),mx_divide:(e,t=fn(1))=>Da(e,t),mx_fractal_noise_float:(e=Al(),t=3,r=2,s=.5,i=1)=>Wv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec2:(e=Al(),t=3,r=2,s=.5,i=1)=>qv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec3:(e=Al(),t=3,r=2,s=.5,i=1)=>Hv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec4:(e=Al(),t=3,r=2,s=.5,i=1)=>jv(e,yn(t),r,s).mul(i),mx_frame:()=>Ob,mx_heighttonormal:(e,t)=>(e=Sn(e),t=fn(t),yh(e,t)),mx_hsvtorgb:sN,mx_ifequal:(e,t,r,s)=>e.equal(t).mix(r,s),mx_ifgreater:(e,t,r,s)=>e.greaterThan(t).mix(r,s),mx_ifgreatereq:(e,t,r,s)=>e.greaterThanEqual(t).mix(r,s),mx_invert:(e,t=fn(1))=>La(t,e),mx_modulo:(e,t=fn(1))=>Ua(e,t),mx_multiply:(e,t=fn(1))=>Pa(e,t),mx_noise_float:(e=Al(),t=1,r=0)=>kv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec3:(e=Al(),t=1,r=0)=>Gv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec4:(e=Al(),t=1,r=0)=>{e=e.convert("vec2|vec3");return wn(Gv(e),kv(e.add(Tn(19,73)))).mul(t).add(r)},mx_place2d:(e,t=Tn(.5,.5),r=Tn(1,1),s=fn(0),i=Tn(0,0))=>{let n=e;if(t&&(n=n.sub(t)),r&&(n=n.mul(r)),s){const e=s.mul(Math.PI/180),t=e.cos(),r=e.sin();n=Tn(n.x.mul(t).sub(n.y.mul(r)),n.x.mul(r).add(n.y.mul(t)))}return t&&(n=n.add(t)),i&&(n=n.add(i)),n},mx_power:(e,t=fn(1))=>eu(e,t),mx_ramp4:(e,t,r,s,i=Al())=>{const n=i.x.clamp(),a=i.y.clamp(),o=ou(e,t,n),u=ou(r,s,n);return ou(o,u,a)},mx_ramplr:(e,t,r=Al())=>oN(e,t,r,"x"),mx_ramptb:(e,t,r=Al())=>oN(e,t,r,"y"),mx_rgbtohsv:iN,mx_rotate2d:(e,t)=>{e=Tn(e);const r=(t=fn(t)).mul(Math.PI/180);return ey(e,r)},mx_rotate3d:(e,t,r)=>{e=Sn(e),t=fn(t),r=Sn(r);const s=t.mul(Math.PI/180),i=r.normalize(),n=s.cos(),a=s.sin(),o=fn(1).sub(n);return e.mul(n).add(i.cross(e).mul(a)).add(i.mul(i.dot(e)).mul(o))},mx_safepower:(e,t=1)=>(e=fn(e)).abs().pow(t).mul(e.sign()),mx_separate:(e,t=null)=>{if("string"==typeof t){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3},s=t.replace(/^out/,"").toLowerCase();if(void 0!==r[s])return e.element(r[s])}if("number"==typeof t)return e.element(t);if("string"==typeof t&&1===t.length){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3};if(void 0!==r[t])return e.element(r[t])}return e},mx_splitlr:(e,t,r,s=Al())=>uN(e,t,r,s,"x"),mx_splittb:(e,t,r,s=Al())=>uN(e,t,r,s,"y"),mx_srgb_texture_to_lin_rec709:nN,mx_subtract:(e,t=fn(0))=>La(e,t),mx_timer:()=>Ub,mx_transform_uv:(e=1,t=0,r=Al())=>r.mul(e).add(t),mx_unifiednoise2d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>tN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_unifiednoise3d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>rN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_worley_noise_float:(e=Al(),t=1)=>Zv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec2:(e=Al(),t=1)=>Jv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec3:(e=Al(),t=1)=>eN(e.convert("vec2|vec3"),t,yn(1)),negate:Do,neutralToneMapping:hT,nodeArray:sn,nodeImmutable:an,nodeObject:en,nodeObjectIntent:tn,nodeObjects:rn,nodeProxy:nn,nodeProxyIntent:on,normalFlat:uc,normalGeometry:ac,normalLocal:oc,normalMap:ph,normalView:cc,normalViewGeometry:lc,normalWorld:hc,normalWorldGeometry:dc,normalize:So,not:Ha,notEqual:Oa,numWorkgroups:wT,objectDirection:Cd,objectGroup:_a,objectPosition:Bd,objectRadius:Pd,objectScale:Fd,objectViewPosition:Ld,objectWorldMatrix:Md,oneMinus:Uo,or:Wa,orthographicDepthToViewZ:Kp,oscSawtooth:(e=Ub)=>e.fract(),oscSine:(e=Ub)=>e.add(.75).mul(2*Math.PI).sin().mul(.5).add(.5),oscSquare:(e=Ub)=>e.fract().round(),oscTriangle:(e=Ub)=>e.add(.5).fract().mul(2).sub(1).abs(),output:aa,outputStruct:nb,overloadingFn:Db,packHalf2x16:Rb,packSnorm2x16:Nb,packUnorm2x16:Sb,parabola:_b,parallaxDirection:uh,parallaxUV:(e,t)=>e.sub(uh.mul(t)),parameter:(e,t)=>new Jy(e,t),pass:(e,t,r)=>new tT(tT.COLOR,e,t,r),passTexture:(e,t)=>new Jx(e,t),pcurve:(e,t,r)=>eu(Da(eu(e,t),Fa(eu(e,t),eu(La(1,e),r))),1/t),perspectiveDepthToViewZ:Zp,pmremTexture:Df,pointShadow:dv,pointUV:Rx,pointWidth:la,positionGeometry:Kd,positionLocal:Qd,positionPrevious:Yd,positionView:ec,positionViewDirection:tc,positionWorld:Zd,positionWorldDirection:Jd,posterize:Xx,pow:eu,pow2:tu,pow3:ru,pow4:su,premultiplyAlpha:mg,property:On,quadBroadcast:c_,quadSwapDiagonal:n_,quadSwapX:s_,quadSwapY:i_,radians:go,rand:pu,range:RT,rangeFogFactor:bT,reciprocal:ko,reference:Pc,referenceBuffer:Dc,reflect:Ko,reflectVector:Ec,reflectView:Sc,reflector:e=>new nx(e),refract:du,refractVector:Ac,refractView:Rc,reinhardToneMapping:iT,remap:pl,remapClamp:gl,renderGroup:Ta,renderOutput:xl,rendererReference:ju,replaceDefaultUV:function(e,t=null){return vu(t,{getUV:"function"==typeof e?e:()=>e})},rotate:ey,rotateUV:Vb,roughness:zn,round:Vo,rtt:px,sRGBTransferEOTF:Ou,sRGBTransferOETF:Vu,sample:(e,t=null)=>new xx(e,en(t)),sampler:e=>(!0===e.isNode?e:Ul(e)).convert("sampler"),samplerComparison:e=>(!0===e.isNode?e:Ul(e)).convert("samplerComparison"),saturate:lu,saturation:zx,screenCoordinate:Yl,screenDPR:Xl,screenSize:Ql,screenUV:Kl,select:Tu,setCurrentStack:cn,setName:Su,shaderStages:ai,shadow:Y_,shadowPositionWorld:R_,shapeCircle:fv,sharedUniformGroup:ba,sheen:jn,sheenRoughness:Xn,shiftLeft:Ya,shiftRight:Za,shininess:na,sign:Lo,sin:Eo,sinc:(e,t)=>Eo(oo.mul(t.mul(e).sub(1))).div(oo.mul(t.mul(e).sub(1))),skinning:Sp,smoothstep:cu,smoothstepElement:mu,specularColor:ra,specularColorBlended:sa,specularF90:ia,spherizeUV:kb,split:(e,t)=>new fi(en(e),t),spritesheetUV:zb,sqrt:To,stack:tb,step:Xo,stepElement:fu,storage:up,storageBarrier:()=>PT("storage").toStack(),storageTexture:Fx,string:(e="")=>new _i(e,"string"),struct:(e,t=null)=>{const r=new rb(e,t),s=(...t)=>{let s=null;if(t.length>0)if(t[0].isNode){s={};const r=Object.keys(e);for(let e=0;eDx(e,t).level(r),texture3DLoad:(...e)=>Dx(...e).setSampler(!1),textureBarrier:()=>PT("texture").toStack(),textureBicubic:Am,textureBicubicLevel:Em,textureCubeUV:nf,textureLevel:(e,t,r)=>Ul(e,t).level(r),textureLoad:Il,textureSize:Cl,textureStore:(e,t,r)=>{let s;return!0===e.isStorageTextureNode?(s=e.clone(),s.uvNode=t,s.storeNode=r):s=Fx(e,t,r),null!==r&&s.toStack(),s},thickness:ha,time:Ub,toneMapping:Ku,toneMappingExposure:Qu,toonOutlinePass:(t,r,s=new e(0,0,0),i=.003,n=1)=>new rT(t,r,en(s),en(i),en(n)),transformDirection:iu,transformNormal:gc,transformNormalToView:mc,transformedClearcoatNormalView:bc,transformedNormalView:fc,transformedNormalWorld:yc,transmission:ca,transpose:zo,triNoise3D:Fb,triplanarTexture:(...e)=>Wb(...e),triplanarTextures:Wb,trunc:Go,uint:bn,uintBitsToFloat:e=>new hb(e,"float","uint"),uniform:Na,uniformArray:$l,uniformCubeTexture:(e=wc)=>Mc(e),uniformFlow:Nu,uniformGroup:ya,uniformTexture:(e=Ll)=>Ul(e),unpackHalf2x16:Cb,unpackNormal:ch,unpackSnorm2x16:Ab,unpackUnorm2x16:wb,unpremultiplyAlpha:fg,userData:(e,t,r)=>new Ux(e,t,r),uv:Al,uvec2:vn,uvec3:En,uvec4:Mn,varying:Uu,varyingProperty:Vn,vec2:Tn,vec3:Sn,vec4:wn,vectorComponents:oi,velocity:Gx,vertexColor:lg,vertexIndex:dp,vertexStage:Iu,vibrance:Wx,viewZToLogarithmicDepth:Jp,viewZToOrthographicDepth:Xp,viewZToPerspectiveDepth:Qp,viewZToReversedOrthographicDepth:(e,t,r)=>e.add(r).div(r.sub(t)),viewZToReversedPerspectiveDepth:Yp,viewport:Zl,viewportCoordinate:ed,viewportDepthTexture:qp,viewportLinearDepth:sg,viewportMipTexture:Gp,viewportOpaqueMipTexture:zp,viewportResolution:rd,viewportSafeUV:$b,viewportSharedTexture:Yx,viewportSize:Jl,viewportTexture:kp,viewportUV:td,vogelDiskSample:bx,wgsl:(e,t)=>gT(e,t,"wgsl"),wgslFn:(e,t)=>fT(e,t,"wgsl"),workgroupArray:(e,t)=>new UT("Workgroup",e,t),workgroupBarrier:()=>PT("workgroup").toStack(),workgroupId:CT,workingToColorSpace:$u,xor:qa});const hN=new Zy;class pN extends _y{constructor(e,t){super(),this.renderer=e,this.nodes=t}update(e,t,r){const s=this.renderer,i=this.nodes.getBackgroundNode(e)||e.background;let n=!1;if(null===i)s._clearColor.getRGB(hN),hN.a=s._clearColor.a;else if(!0===i.isColor)i.getRGB(hN),hN.a=1,n=!0;else if(!0===i.isNode){const u=this.get(e),l=i;hN.copy(s._clearColor);let d=u.backgroundMesh;if(void 0===d){const h=wn(l).mul(Cx).context({getUV:()=>Mx.mul(dc),getTextureLevel:()=>wx}),p=Td.element(3).element(3).equal(1),g=Da(1,Td.element(1).element(1)).mul(3),m=p.select(Qd.mul(g),Qd),f=Wd.mul(wn(m,0));let y=Td.mul(wn(f.xyz,1));y=y.setZ(y.w);const b=new yg;function x(){i.removeEventListener("dispose",x),d.material.dispose(),d.geometry.dispose()}b.name="Background.material",b.side=L,b.depthTest=!1,b.depthWrite=!1,b.allowOverride=!1,b.fog=!1,b.lights=!1,b.vertexNode=y,b.colorNode=h,u.backgroundMeshNode=h,u.backgroundMesh=d=new ue(new it(1,32,32),b),d.frustumCulled=!1,d.name="Background.mesh",i.addEventListener("dispose",x)}const c=l.getCacheKey();u.backgroundCacheKey!==c&&(u.backgroundMeshNode.node=wn(l).mul(Cx),u.backgroundMeshNode.needsUpdate=!0,d.material.needsUpdate=!0,u.backgroundCacheKey=c),t.unshift(d,d.geometry,d.material,0,0,null,null)}else o("Renderer: Unsupported background configuration.",i);const a=s.xr.getEnvironmentBlendMode();if("additive"===a?hN.set(0,0,0,1):"alpha-blend"===a&&hN.set(0,0,0,0),!0===s.autoClear||!0===n){const T=r.clearColorValue;T.r=hN.r,T.g=hN.g,T.b=hN.b,T.a=hN.a,!0!==s.backend.isWebGLBackend&&!0!==s.alpha||(T.r*=T.a,T.g*=T.a,T.b*=T.a),r.depthClearValue=s.getClearDepth(),r.stencilClearValue=s.getClearStencil(),r.clearColor=!0===s.autoClearColor,r.clearDepth=!0===s.autoClearDepth,r.clearStencil=!0===s.autoClearStencil}else r.clearColor=!1,r.clearDepth=!1,r.clearStencil=!1}}let gN=0;class mN{constructor(e="",t=[],r=0){this.name=e,this.bindings=t,this.index=r,this.id=gN++}}class fN{constructor(e,t,r,s,i,n,a,o,u,l=[]){this.vertexShader=e,this.fragmentShader=t,this.computeShader=r,this.transforms=l,this.nodeAttributes=s,this.bindings=i,this.updateNodes=n,this.updateBeforeNodes=a,this.updateAfterNodes=o,this.observer=u,this.usedTimes=0}createBindings(){const e=[];for(const t of this.bindings){if(!0!==t.bindings[0].groupNode.shared){const r=new mN(t.name,[],t.index);e.push(r);for(const e of t.bindings)r.bindings.push(e.clone())}else e.push(t)}return e}}class yN{constructor(e,t,r=null){this.isNodeAttribute=!0,this.name=e,this.type=t,this.node=r}}class bN{constructor(e,t,r){this.isNodeUniform=!0,this.name=e,this.type=t,this.node=r}get value(){return this.node.value}set value(e){this.node.value=e}get id(){return this.node.id}get groupNode(){return this.node.groupNode}}class xN{constructor(e,t,r=!1,s=null){this.isNodeVar=!0,this.name=e,this.type=t,this.readOnly=r,this.count=s}}class TN extends xN{constructor(e,t,r=null,s=null){super(e,t),this.needsInterpolation=!1,this.isNodeVarying=!0,this.interpolationType=r,this.interpolationSampling=s}}class _N{constructor(e,t,r=""){this.name=e,this.type=t,this.code=r,Object.defineProperty(this,"isNodeCode",{value:!0})}}let vN=0;class NN{constructor(e=null){this.id=vN++,this.nodesData=new WeakMap,this.parent=e}getData(e){let t=this.nodesData.get(e);return void 0===t&&null!==this.parent&&(t=this.parent.getData(e)),t}setData(e,t){this.nodesData.set(e,t)}}class SN{constructor(e,t){this.name=e,this.members=t,this.output=!1}}class RN{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0,this.index=-1}setValue(e){this.value=e}getValue(){return this.value}}class EN extends RN{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}}class AN extends RN{constructor(e,r=new t){super(e,r),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}}class wN extends RN{constructor(e,t=new r){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}}class CN extends RN{constructor(e,t=new s){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}}class MN extends RN{constructor(t,r=new e){super(t,r),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}}class BN extends RN{constructor(e,t=new i){super(e,t),this.isMatrix2Uniform=!0,this.boundary=8,this.itemSize=4}}class FN extends RN{constructor(e,t=new n){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}}class LN extends RN{constructor(e,t=new a){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}}class PN extends EN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class DN extends AN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class UN extends wN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class IN extends CN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class ON extends MN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class VN extends BN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class kN extends FN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class GN extends LN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}let $N=0;const zN=new WeakMap,WN=new WeakMap,HN=new Map([[Int8Array,"int"],[Int16Array,"int"],[Int32Array,"int"],[Uint8Array,"uint"],[Uint16Array,"uint"],[Uint32Array,"uint"],[Float32Array,"float"]]),qN=e=>/e/g.test(e)?String(e).replace(/\+/g,""):(e=Number(e))+(e%1?"":".0");class jN{constructor(e,t,r){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=r,this.scene=null,this.camera=null,this.nodes=[],this.sequentialNodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.observer=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:"",fragment:"",compute:""},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.types={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.declarations={},this.flow={code:""},this.chaining=[],this.stack=tb(),this.stacks=[],this.tab="\t",this.currentFunctionNode=null,this.context={material:this.material},this.cache=new NN,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.subBuildLayers=[],this.activeStacks=[],this.subBuildFn=null,this.fnCall=null,Object.defineProperty(this,"id",{value:$N++})}isFlatShading(){return!0===this.material.flatShading||!1===this.geometry.hasAttribute("normal")}isOpaque(){const e=this.material;return!1===e.transparent&&e.blending===ze&&!1===e.alphaToCoverage}createRenderTarget(e,t,r){return new ae(e,t,r)}createCubeRenderTarget(e,t){return new Ag(e,t)}includes(e){return this.nodes.includes(e)}getOutputStructName(){}_getBindGroup(e,t){const r=t[0].groupNode;let s,i=r.shared;if(i)for(let e=1;ee.nodeUniform.node.id-t.nodeUniform.node.id);for(const t of e.uniforms)r+=t.nodeUniform.node.id}else r+=e.nodeUniform.id;const i=this.renderer._currentRenderContext||this.renderer;let n=zN.get(i);void 0===n&&(n=new Map,zN.set(i,n));const a=Os(r);s=n.get(a),void 0===s&&(s=new mN(e,t,this.bindingsIndexes[e].group),n.set(a,s))}else s=new mN(e,t,this.bindingsIndexes[e].group);return s}getBindGroupArray(e,t){const r=this.bindings[t];let s=r[e];return void 0===s&&(void 0===this.bindingsIndexes[e]&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),r[e]=s=[]),s}getBindings(){let e=this.bindGroups;if(null===e){const t={},r=this.bindings;for(const e of ai)for(const s in r[e]){const i=r[e][s],n=t[s]||(t[s]=[]);for(const e of i)!1===n.includes(e)&&n.push(e)}e=[];for(const r in t){const s=t[r],i=this._getBindGroup(r,s);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){const e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(n)}u`:"0u";if("bool"===i)return n?"true":"false";if("color"===i)return`${this.getType("vec3")}( ${qN(n.r)}, ${qN(n.g)}, ${qN(n.b)} )`;const a=this.getTypeLength(i),o=this.getComponentType(i),u=e=>this.generateConst(o,e);if(2===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)} )`;if(3===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)} )`;if(4===a&&"mat2"!==i)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)}, ${u(n.w)} )`;if(a>=4&&n&&(n.isMatrix2||n.isMatrix3||n.isMatrix4))return`${this.getType(i)}( ${n.elements.map(u).join(", ")} )`;if(a>4)return`${this.getType(i)}()`;throw new Error(`NodeBuilder: Type '${i}' not found in generate constant attempt.`)}getType(e){return"color"===e?"vec3":e}hasGeometryAttribute(e){return this.geometry&&void 0!==this.geometry.getAttribute(e)}getAttribute(e,t){const r=this.attributes;for(const t of r)if(t.name===e)return t;const s=new yN(e,t);return this.registerDeclaration(s),r.push(s),s}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return"void"===e||"property"===e||"sampler"===e||"samplerComparison"===e||"texture"===e||"cubeTexture"===e||"storageTexture"===e||"depthTexture"===e||"texture3D"===e}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){const t=e.type;if(e.isDataTexture){if(t===R)return"int";if(t===S)return"uint"}return"float"}getElementType(e){return"mat2"===e?"vec2":"mat3"===e?"vec3":"mat4"===e?"vec4":this.getComponentType(e)}getComponentType(e){if("float"===(e=this.getVectorType(e))||"bool"===e||"int"===e||"uint"===e)return e;const t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return null===t?null:"b"===t[1]?"bool":"i"===t[1]?"int":"u"===t[1]?"uint":"float"}getVectorType(e){return"color"===e?"vec3":"texture"===e||"cubeTexture"===e||"storageTexture"===e||"texture3D"===e?"vec4":e}getTypeFromLength(e,t="float"){if(1===e)return t;let r=zs(e);const s="float"===t?"":t[0];return!0===/mat2/.test(t)&&(r=r.replace("vec","mat")),s+r}getTypeFromArray(e){return HN.get(e.constructor)}isInteger(e){return/int|uint|(i|u)vec/.test(e)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);const r=t.array,s=e.itemSize,i=e.normalized;let n;return e instanceof ot||!0===i||(n=this.getTypeFromArray(r)),this.getTypeFromLength(s,n)}getTypeLength(e){const t=this.getVectorType(e),r=/vec([2-4])/.exec(t);return null!==r?Number(r[1]):"float"===t||"bool"===t||"int"===t||"uint"===t?1:!0===/mat2/.test(e)?4:!0===/mat3/.test(e)?9:!0===/mat4/.test(e)?16:0}getVectorFromMatrix(e){return e.replace("mat","vec")}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){const t=this.getComponentType(e);return"int"===t||"uint"===t?e:this.changeComponentType(e,"int")}setActiveStack(e){this.activeStacks.push(e)}removeActiveStack(e){if(this.activeStacks[this.activeStacks.length-1]!==e)throw new Error("NodeBuilder: Invalid active stack removal.");this.activeStacks.pop()}getActiveStack(){return this.activeStacks[this.activeStacks.length-1]}getBaseStack(){return this.activeStacks[0]}addStack(){this.stack=tb(this.stack);const e=hn();return this.stacks.push(e),cn(this.stack),this.stack}removeStack(){const e=this.stack;for(const t of e.nodes){this.getDataFromNode(t).stack=e}return this.stack=e.parent,cn(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,r=null){let s=(r=null===r?e.isGlobal(this)?this.globalCache:this.cache:r).getData(e);void 0===s&&(s={},r.setData(e,s)),void 0===s[t]&&(s[t]={});let i=s[t];const n=s.any?s.any.subBuilds:null,a=this.getClosestSubBuild(n);return a&&(void 0===i.subBuildsCache&&(i.subBuildsCache={}),i=i.subBuildsCache[a]||(i.subBuildsCache[a]={}),i.subBuilds=n),i}getNodeProperties(e,t="any"){const r=this.getDataFromNode(e,t);return r.properties||(r.properties={outputNode:null})}getBufferAttributeFromNode(e,t){const r=this.getDataFromNode(e,"vertex");let s=r.bufferAttribute;if(void 0===s){const i=this.uniforms.index++;s=new yN("nodeAttribute"+i,t,e),this.bufferAttributes.push(s),r.bufferAttribute=s}return s}getStructTypeNode(e,t=this.shaderStage){return this.types[t][e]||null}getStructTypeFromNode(e,t,r=null,s=this.shaderStage){const i=this.getDataFromNode(e,s,this.globalCache);let n=i.structType;if(void 0===n){const a=this.structs.index++;null===r&&(r="StructType"+a),n=new SN(r,t),this.structs[s].push(n),this.types[s][r]=e,i.structType=n}return n}getOutputStructTypeFromNode(e,t){const r=this.getStructTypeFromNode(e,t,"OutputType","fragment");return r.output=!0,r}getUniformFromNode(e,t,r=this.shaderStage,s=null){const i=this.getDataFromNode(e,r,this.globalCache);let n=i.uniform;if(void 0===n){const a=this.uniforms.index++;n=new bN(s||"nodeUniform"+a,t,e),this.uniforms[r].push(n),this.registerDeclaration(n),i.uniform=n}return n}getVarFromNode(e,t=null,r=e.getNodeType(this),s=this.shaderStage,i=!1){const n=this.getDataFromNode(e,s),a=this.getSubBuildProperty("variable",n.subBuilds);let o=n[a];if(void 0===o){const u=i?"_const":"_var",l=this.vars[s]||(this.vars[s]=[]),d=this.vars[u]||(this.vars[u]=0);null===t&&(t=(i?"nodeConst":"nodeVar")+d,this.vars[u]++),"variable"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds));const c=e.getArrayCount(this);o=new xN(t,r,i,c),i||l.push(o),this.registerDeclaration(o),n[a]=o}return o}isDeterministic(e){if(e.isMathNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode))&&(!e.cNode||this.isDeterministic(e.cNode));if(e.isOperatorNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode));if(e.isArrayNode){if(null!==e.values)for(const t of e.values)if(!this.isDeterministic(t))return!1;return!0}return!!e.isConstNode}getVaryingFromNode(e,t=null,r=e.getNodeType(this),s=null,i=null){const n=this.getDataFromNode(e,"any"),a=this.getSubBuildProperty("varying",n.subBuilds);let o=n[a];if(void 0===o){const e=this.varyings,u=e.length;null===t&&(t="nodeVarying"+u),"varying"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds)),o=new TN(t,r,s,i),e.push(o),this.registerDeclaration(o),n[a]=o}return o}registerDeclaration(e){const t=this.shaderStage,r=this.declarations[t]||(this.declarations[t]={}),s=this.getPropertyName(e);let i=1,n=s;for(;void 0!==r[n];)n=s+"_"+i++;i>1&&(e.name=n,d(`TSL: Declaration name '${s}' of '${e.type}' already in use. Renamed to '${n}'.`)),r[n]=e}getCodeFromNode(e,t,r=this.shaderStage){const s=this.getDataFromNode(e);let i=s.code;if(void 0===i){const e=this.codes[r]||(this.codes[r]=[]),n=e.length;i=new _N("nodeCode"+n,t),e.push(i),s.code=i}return i}addFlowCodeHierarchy(e,t){const{flowCodes:r,flowCodeBlock:s}=this.getDataFromNode(e);let i=!0,n=t;for(;n;){if(!0===s.get(n)){i=!1;break}n=this.getDataFromNode(n).parentNodeBlock}if(i)for(const e of r)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,r){const s=this.getDataFromNode(e),i=s.flowCodes||(s.flowCodes=[]),n=s.flowCodeBlock||(s.flowCodeBlock=new WeakMap);i.push(t),n.set(r,!0)}addLineFlowCode(e,t=null){return""===e||(null!==t&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=";\n"),this.flow.code+=e),this}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+="\t",this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){const t=e.getNodeType(this),r=this.flowChildNode(e,t);return this.flowsData.set(e,r),r}addInclude(e){null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(e)}buildFunctionNode(e){const t=new mT,r=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=r,t}flowShaderNode(e){const t=e.layout,r={[Symbol.iterator](){let e=0;const t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(const e of t.inputs)r[e.name]=new Jy(e.type,e.name);e.layout=null;const s=e.call(r),i=this.flowStagesNode(s,t.type);return e.layout=t,i}flowBuildStage(e,t,r=null){const s=this.getBuildStage();this.setBuildStage(t);const i=e.build(this,r);return this.setBuildStage(s),i}flowStagesNode(e,t=null){const r=this.flow,s=this.vars,i=this.declarations,n=this.cache,a=this.buildStage,o=this.stack,u={code:""};this.flow=u,this.vars={},this.declarations={},this.cache=new NN,this.stack=tb();for(const r of ni)this.setBuildStage(r),u.result=e.build(this,t);return u.vars=this.getVars(this.shaderStage),this.flow=r,this.vars=s,this.declarations=i,this.cache=n,this.stack=o,this.setBuildStage(a),u}getFunctionOperator(){return null}buildFunctionCode(){d("Abstract function.")}flowChildNode(e,t=null){const r=this.flow,s={code:""};return this.flow=s,s.result=e.build(this,t),this.flow=r,s}flowNodeFromShaderStage(e,t,r=null,s=null){const i=this.tab,n=this.cache,a=this.shaderStage,o=this.context;this.setShaderStage(e);const u={...this.context};delete u.nodeBlock,this.cache=this.globalCache,this.tab="\t",this.context=u;let l=null;if("generate"===this.buildStage){const i=this.flowChildNode(t,r);null!==s&&(i.code+=`${this.tab+s} = ${i.result};\n`),this.flowCode[e]=this.flowCode[e]+i.code,l=i}else l=t.build(this);return this.setShaderStage(a),this.cache=n,this.tab=i,this.context=o,l}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){d("Abstract function.")}getVaryings(){d("Abstract function.")}getVar(e,t,r=null){return`${null!==r?this.generateArrayDeclaration(e,r):this.getType(e)} ${t}`}getVars(e){let t="";const r=this.vars[e];if(void 0!==r)for(const e of r)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){d("Abstract function.")}getCodes(e){const t=this.codes[e];let r="";if(void 0!==t)for(const e of t)r+=e.code+"\n";return r}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){d("Abstract function.")}get subBuild(){return this.subBuildLayers[this.subBuildLayers.length-1]||null}addSubBuild(e){this.subBuildLayers.push(e)}removeSubBuild(){return this.subBuildLayers.pop()}getClosestSubBuild(e){let t;if(t=e&&e.isNode?e.isShaderCallNodeInternal?e.shaderNode.subBuilds:e.isStackNode?[e.subBuild]:this.getDataFromNode(e,"any").subBuilds:e instanceof Set?[...e]:e,!t)return null;const r=this.subBuildLayers;for(let e=t.length-1;e>=0;e--){const s=t[e];if(r.includes(s))return s}return null}getSubBuildOutput(e){return this.getSubBuildProperty("outputNode",e)}getSubBuildProperty(e="",t=null){let r,s;return r=null!==t?this.getClosestSubBuild(t):this.subBuildFn,s=r?e?r+"_"+e:r:e,s}build(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}async buildAsync(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this);await ut()}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getSharedDataFromNode(e){let t=WN.get(e);return void 0===t&&(t={}),t}getNodeUniform(e,t){const r=this.getSharedDataFromNode(e);let s=r.cache;if(void 0===s){if("float"===t||"int"===t||"uint"===t)s=new PN(e);else if("vec2"===t||"ivec2"===t||"uvec2"===t)s=new DN(e);else if("vec3"===t||"ivec3"===t||"uvec3"===t)s=new UN(e);else if("vec4"===t||"ivec4"===t||"uvec4"===t)s=new IN(e);else if("color"===t)s=new ON(e);else if("mat2"===t)s=new VN(e);else if("mat3"===t)s=new kN(e);else{if("mat4"!==t)throw new Error(`Uniform "${t}" not implemented.`);s=new GN(e)}r.cache=s}return s}format(e,t,r){if((t=this.getVectorType(t))===(r=this.getVectorType(r))||null===r||this.isReference(r))return e;const s=this.getTypeLength(t),i=this.getTypeLength(r);return 16===s&&9===i?`${this.getType(r)}( ${e}[ 0 ].xyz, ${e}[ 1 ].xyz, ${e}[ 2 ].xyz )`:9===s&&4===i?`${this.getType(r)}( ${e}[ 0 ].xy, ${e}[ 1 ].xy )`:s>4||i>4||0===i?e:s===i?`${this.getType(r)}( ${e} )`:s>i?(e="bool"===r?`all( ${e} )`:`${e}.${"xyz".slice(0,i)}`,this.format(e,this.getTypeFromLength(i,this.getComponentType(t)),r)):4===i&&s>1?`${this.getType(r)}( ${this.format(e,t,"vec3")}, 1.0 )`:2===s?`${this.getType(r)}( ${this.format(e,t,"vec2")}, 0.0 )`:(1===s&&i>1&&t!==this.getComponentType(r)&&(e=`${this.getType(this.getComponentType(r))}( ${e} )`),`${this.getType(r)}( ${e} )`)}getSignature(){return`// Three.js r${lt} - Node System\n`}needsPreviousData(){const e=this.renderer.getMRT();return e&&e.has("velocity")||!0===Qs(this.object).useVelocity}}class XN{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let r=e.get(t);return void 0===r&&(r={renderId:0,frameId:0},e.set(t,r)),r}updateBeforeNode(e){const t=e.getUpdateBeforeType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateBeforeMap,r);if(t.frameId!==this.frameId){const r=t.frameId;t.frameId=this.frameId,!1===e.updateBefore(this)&&(t.frameId=r)}}else if(t===ti.RENDER){const t=this._getMaps(this.updateBeforeMap,r);if(t.renderId!==this.renderId){const r=t.renderId;t.renderId=this.renderId,!1===e.updateBefore(this)&&(t.renderId=r)}}else t===ti.OBJECT&&e.updateBefore(this)}updateAfterNode(e){const t=e.getUpdateAfterType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateAfterMap,r);t.frameId!==this.frameId&&!1!==e.updateAfter(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateAfterMap,r);t.renderId!==this.renderId&&!1!==e.updateAfter(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.updateAfter(this)}updateNode(e){const t=e.getUpdateType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateMap,r);t.frameId!==this.frameId&&!1!==e.update(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateMap,r);t.renderId!==this.renderId&&!1!==e.update(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.update(this)}update(){this.frameId++,void 0===this.lastTime&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}}class KN{constructor(e,t,r=null,s="",i=!1){this.type=e,this.name=t,this.count=r,this.qualifier=s,this.isConst=i}}KN.isNodeFunctionInput=!0;class QN extends cv{static get type(){return"AmbientLightNode"}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}}class YN extends cv{static get type(){return"DirectionalLightNode"}constructor(e=null){super(e)}setupDirect(){const e=this.colorNode;return{lightDirection:x_(this.light),lightColor:e}}}class ZN extends cv{static get type(){return"HemisphereLightNode"}constructor(t=null){super(t),this.lightPositionNode=f_(t),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=Na(new e).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){const{colorNode:t,groundColorNode:r,lightDirectionNode:s}=this,i=hc.dot(s).mul(.5).add(.5),n=ou(r,t,i);e.context.irradiance.addAssign(n)}}class JN extends cv{static get type(){return"SpotLightNode"}constructor(e=null){super(e),this.coneCosNode=Na(0).setGroup(Ta),this.penumbraCosNode=Na(0).setGroup(Ta),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(0).setGroup(Ta),this.colorNode=Na(this.color).setGroup(Ta)}update(e){super.update(e);const{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e,t){const{coneCosNode:r,penumbraCosNode:s}=this;return cu(r,s,t)}getLightCoord(e){const t=e.getNodeProperties(this);let r=t.projectionUV;return void 0===r&&(r=m_(this.light,e.context.positionWorld),t.projectionUV=r),r}setupDirect(e){const{colorNode:t,cutoffDistanceNode:r,decayExponentNode:s,light:i}=this,n=this.getLightVector(e),a=n.normalize(),o=a.dot(x_(i)),u=this.getSpotAttenuation(e,o),l=n.length(),d=hv({lightDistance:l,cutoffDistance:r,decayExponent:s});let c,h,p=t.mul(u).mul(d);if(i.colorNode?(h=this.getLightCoord(e),c=i.colorNode(h)):i.map&&(h=this.getLightCoord(e),c=Ul(i.map,h.xy).onRenderUpdate(()=>i.map)),c){p=h.mul(2).sub(1).abs().lessThan(1).all().select(p.mul(c),p)}return{lightColor:p,lightDirection:a}}}class eS extends JN{static get type(){return"IESSpotLightNode"}getSpotAttenuation(e,t){const r=this.light.iesMap;let s=null;if(r&&!0===r.isTexture){const e=t.acos().mul(1/Math.PI);s=Ul(r,Tn(e,0),0).r}else s=super.getSpotAttenuation(t);return s}}class tS extends cv{static get type(){return"LightProbeNode"}constructor(e=null){super(e);const t=[];for(let e=0;e<9;e++)t.push(new r);this.lightProbe=$l(t)}update(e){const{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){const t=dN(hc,this.lightProbe);e.context.irradiance.addAssign(t)}}const rS=dn(([e,t])=>{const r=e.abs().sub(t);return Po(jo(r,0)).add(qo(jo(r.x,r.y),0))});class sS extends JN{static get type(){return"ProjectorLightNode"}update(e){super.update(e);const t=this.light;if(this.penumbraCosNode.value=Math.min(Math.cos(t.angle*(1-t.penumbra)),.99999),null===t.aspect){let e=1;null!==t.map&&(e=t.map.width/t.map.height),t.shadow.aspect=e}else t.shadow.aspect=t.aspect}getSpotAttenuation(e){const t=fn(0),r=this.penumbraCosNode,s=g_(this.light).mul(e.context.positionWorld||Zd);return pn(s.w.greaterThan(0),()=>{const e=s.xyz.div(s.w),i=rS(e.xy.sub(Tn(.5)),Tn(.5)),n=Da(-1,La(1,Mo(r)).sub(1));t.assign(lu(i.mul(-2).mul(n)))}),t}}const iS=new a,nS=new a;let aS=null;class oS extends cv{static get type(){return"RectAreaLightNode"}constructor(e=null){super(e),this.halfHeight=Na(new r).setGroup(Ta),this.halfWidth=Na(new r).setGroup(Ta),this.updateType=ti.RENDER}update(e){super.update(e);const{light:t}=this,r=e.camera.matrixWorldInverse;nS.identity(),iS.copy(t.matrixWorld),iS.premultiply(r),nS.extractRotation(iS),this.halfWidth.value.set(.5*t.width,0,0),this.halfHeight.value.set(0,.5*t.height,0),this.halfWidth.value.applyMatrix4(nS),this.halfHeight.value.applyMatrix4(nS)}setupDirectRectArea(e){let t,r;e.isAvailable("float32Filterable")?(t=Ul(aS.LTC_FLOAT_1),r=Ul(aS.LTC_FLOAT_2)):(t=Ul(aS.LTC_HALF_1),r=Ul(aS.LTC_HALF_2));const{colorNode:s,light:i}=this;return{lightColor:s,lightPosition:b_(i),halfWidth:this.halfWidth,halfHeight:this.halfHeight,ltc_1:t,ltc_2:r}}static setLTC(e){aS=e}}class uS{parseFunction(){d("Abstract function.")}}class lS{constructor(e,t,r="",s=""){this.type=e,this.inputs=t,this.name=r,this.precision=s}getCode(){d("Abstract function.")}}lS.isNodeFunction=!0;const dS=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,cS=/[a-z_0-9]+/gi,hS="#pragma main";class pS extends lS{constructor(e){const{type:t,inputs:r,name:s,precision:i,inputsCode:n,blockCode:a,headerCode:o}=(e=>{const t=(e=e.trim()).indexOf(hS),r=-1!==t?e.slice(t+12):e,s=r.match(dS);if(null!==s&&5===s.length){const i=s[4],n=[];let a=null;for(;null!==(a=cS.exec(i));)n.push(a);const o=[];let u=0;for(;u{let r=this._createNodeBuilder(e,e.material);try{t?await r.buildAsync():r.build()}catch(s){r=this._createNodeBuilder(e,new yg),t?await r.buildAsync():r.build(),o("TSL: "+s)}return r})().then(e=>(s=this._createNodeBuilderState(e),i.set(n,s),s.usedTimes++,r.nodeBuilderState=s,s));{let t=this._createNodeBuilder(e,e.material);try{t.build()}catch(r){t=this._createNodeBuilder(e,new yg),t.build();let s=r.stackTrace;!s&&r.stack&&(s=new Us(r.stack)),o("TSL: "+r,s)}s=this._createNodeBuilderState(t),i.set(n,s)}}s.usedTimes++,r.nodeBuilderState=s}return s}getForRenderAsync(e){const t=this.getForRender(e,!0);return t.then?t:Promise.resolve(t)}getForRenderDeferred(e){const t=this.get(e);if(void 0!==t.nodeBuilderState)return t.nodeBuilderState;const r=this.getForRenderCacheKey(e),s=this.nodeBuilderCache.get(r);return void 0!==s?(s.usedTimes++,t.nodeBuilderState=s,s):(!0!==t.pendingBuild&&(t.pendingBuild=!0,this._buildQueue.push(()=>this.getForRenderAsync(e).then(()=>{t.pendingBuild=!1})),this._processBuildQueue()),null)}_processBuildQueue(){if(this._buildInProgress||0===this._buildQueue.length)return;this._buildInProgress=!0;this._buildQueue.shift()().then(()=>{this._buildInProgress=!1,this._processBuildQueue()})}delete(e){if(e.isRenderObject){const t=this.get(e).nodeBuilderState;t.usedTimes--,0===t.usedTimes&&this.nodeBuilderCache.delete(this.getForRenderCacheKey(e))}return super.delete(e)}getForCompute(e){const t=this.get(e);let r=t.nodeBuilderState;if(void 0===r){const s=this.backend.createNodeBuilder(e,this.renderer);s.build(),r=this._createNodeBuilderState(s),t.nodeBuilderState=r}return r}_createNodeBuilderState(e){return new fN(e.vertexShader,e.fragmentShader,e.computeShader,e.getAttributesArray(),e.getBindings(),e.updateNodes,e.updateBeforeNodes,e.updateAfterNodes,e.observer,e.transforms)}getEnvironmentNode(e){this.updateEnvironment(e);let t=null;if(e.environmentNode&&e.environmentNode.isNode)t=e.environmentNode;else{const r=this.get(e);r.environmentNode&&(t=r.environmentNode)}return t}getBackgroundNode(e){this.updateBackground(e);let t=null;if(e.backgroundNode&&e.backgroundNode.isNode)t=e.backgroundNode;else{const r=this.get(e);r.backgroundNode&&(t=r.backgroundNode)}return t}getFogNode(e){return this.updateFog(e),e.fogNode||this.get(e).fogNode||null}getCacheKey(e,t){fS[0]=e,fS[1]=t;const r=this.renderer.info.calls,s=this.callHashCache.get(fS)||{};if(s.callId!==r){const i=this.getEnvironmentNode(e),n=this.getFogNode(e);t&&yS.push(t.getCacheKey(!0)),i&&yS.push(i.getCacheKey()),n&&yS.push(n.getCacheKey()),yS.push(this.renderer.getOutputRenderTarget()&&this.renderer.getOutputRenderTarget().multiview?1:0),yS.push(this.renderer.shadowMap.enabled?1:0),yS.push(this.renderer.shadowMap.type),s.callId=r,s.cacheKey=Vs(yS),this.callHashCache.set(fS,s),yS.length=0}return fS[0]=null,fS[1]=null,s.cacheKey}get isToneMappingState(){return!this.renderer.getRenderTarget()}updateBackground(e){const t=this.get(e),r=e.background;if(r){const s=0===e.backgroundBlurriness&&t.backgroundBlurriness>0||e.backgroundBlurriness>0&&0===t.backgroundBlurriness;if(t.background!==r||s){const i=this.getCacheNode("background",r,()=>{if(!0===r.isCubeTexture||r.mapping===he||r.mapping===pe||r.mapping===we){if(e.backgroundBlurriness>0||r.mapping===we)return Df(r);{let e;return e=!0===r.isCubeTexture?Bc(r):Ul(r),Fg(e)}}if(!0===r.isTexture)return Ul(r,Kl.flipY()).setUpdateMatrix(!0);!0!==r.isColor&&o("WebGPUNodes: Unsupported background configuration.",r)},s);t.backgroundNode=i,t.background=r,t.backgroundBlurriness=e.backgroundBlurriness}}else t.backgroundNode&&(delete t.backgroundNode,delete t.background)}getCacheNode(e,t,r,s=!1){const i=this.cacheLib[e]||(this.cacheLib[e]=new WeakMap);let n=i.get(t);return(void 0===n||s)&&(n=r(),i.set(t,n)),n}updateFog(e){const t=this.get(e),r=e.fog;if(r){if(t.fog!==r){const e=this.getCacheNode("fog",r,()=>{if(r.isFogExp2){const e=Pc("color","color",r).setGroup(Ta),t=Pc("density","float",r).setGroup(Ta);return _T(e,xT(t))}if(r.isFog){const e=Pc("color","color",r).setGroup(Ta),t=Pc("near","float",r).setGroup(Ta),s=Pc("far","float",r).setGroup(Ta);return _T(e,bT(t,s))}o("Renderer: Unsupported fog configuration.",r)});t.fogNode=e,t.fog=r}}else delete t.fogNode,delete t.fog}updateEnvironment(e){const t=this.get(e),r=e.environment;if(r){if(t.environment!==r){const e=this.getCacheNode("environment",r,()=>!0===r.isCubeTexture?Bc(r):!0===r.isTexture?Ul(r):void o("Nodes: Unsupported environment configuration.",r));t.environmentNode=e,t.environment=r}}else t.environmentNode&&(delete t.environmentNode,delete t.environment)}getNodeFrame(e=this.renderer,t=null,r=null,s=null,i=null){const n=this.nodeFrame;return n.renderer=e,n.scene=t,n.object=r,n.camera=s,n.material=i,n}getNodeFrameForRender(e){return this.getNodeFrame(e.renderer,e.scene,e.object,e.camera,e.material)}getOutputCacheKey(){const e=this.renderer;return e.toneMapping+","+e.currentColorSpace+","+e.xr.isPresenting}hasOutputChange(e){return mS.get(e)!==this.getOutputCacheKey()}getOutputNode(e){const t=this.renderer,r=this.getOutputCacheKey(),s=e.isArrayTexture?Dx(e,Sn(Kl,Wl("gl_ViewID_OVR"))).renderOutput(t.toneMapping,t.currentColorSpace):Ul(e,Kl).renderOutput(t.toneMapping,t.currentColorSpace);return mS.set(e,r),s}updateBefore(e){const t=e.getNodeBuilderState();for(const r of t.updateBeforeNodes)this.getNodeFrameForRender(e).updateBeforeNode(r)}updateAfter(e){const t=e.getNodeBuilderState();for(const r of t.updateAfterNodes)this.getNodeFrameForRender(e).updateAfterNode(r)}updateForCompute(e){const t=this.getNodeFrame(),r=this.getForCompute(e);for(const e of r.updateNodes)t.updateNode(e)}updateForRender(e){const t=this.getNodeFrameForRender(e),r=e.getNodeBuilderState();for(const e of r.updateNodes)t.updateNode(e)}needsRefresh(e){const t=this.getNodeFrameForRender(e);return e.getMonitor().needsRefresh(e,t)}dispose(){super.dispose(),this.nodeFrame=new XN,this.nodeBuilderCache=new Map,this.cacheLib={}}}const xS=new Xe;class TS{constructor(e=null){this.version=0,this.clipIntersection=null,this.cacheKey="",this.shadowPass=!1,this.viewNormalMatrix=new n,this.clippingGroupContexts=new WeakMap,this.intersectionPlanes=[],this.unionPlanes=[],this.parentVersion=null,null!==e&&(this.viewNormalMatrix=e.viewNormalMatrix,this.clippingGroupContexts=e.clippingGroupContexts,this.shadowPass=e.shadowPass,this.viewMatrix=e.viewMatrix)}projectPlanes(e,t,r){const s=e.length;for(let i=0;i0,alpha:!0,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:this.getFramebufferScaleFactor()},i=new XRWebGLLayer(e,s,r);this._glBaseLayer=i,e.updateRenderState({baseLayer:i}),t.setPixelRatio(1),t._setXRLayerSize(i.framebufferWidth,i.framebufferHeight),this._xrRenderTarget=new wS(i.framebufferWidth,i.framebufferHeight,{format:Ae,type:$e,colorSpace:t.outputColorSpace,stencilBuffer:t.stencil,resolveDepthBuffer:!1===i.ignoreDepthValues,resolveStencilBuffer:!1===i.ignoreDepthValues}),this._xrRenderTarget._isOpaqueFramebuffer=!0,this._referenceSpace=await e.requestReferenceSpace(this.getReferenceSpaceType())}this.setFoveation(this.getFoveation()),t._animation.setAnimationLoop(this._onAnimationFrame),t._animation.setContext(e),t._animation.start(),this.isPresenting=!0,this.dispatchEvent({type:"sessionstart"})}}updateCamera(e){const t=this._session;if(null===t)return;const r=e.near,s=e.far,i=this._cameraXR,n=this._cameraL,a=this._cameraR;i.near=a.near=n.near=r,i.far=a.far=n.far=s,i.isMultiViewCamera=this._useMultiview,this._currentDepthNear===i.near&&this._currentDepthFar===i.far||(t.updateRenderState({depthNear:i.near,depthFar:i.far}),this._currentDepthNear=i.near,this._currentDepthFar=i.far),i.layers.mask=6|e.layers.mask,n.layers.mask=-5&i.layers.mask,a.layers.mask=-3&i.layers.mask;const o=e.parent,u=i.cameras;FS(i,o);for(let e=0;e=0&&(r[n]=null,t[n].disconnect(i))}for(let s=0;s=r.length){r.push(i),n=e;break}if(null===r[e]){r[e]=i,n=e;break}}if(-1===n)break}const a=t[n];a&&a.connect(i)}}function US(e){return"quad"===e.type?this._glBinding.createQuadLayer({transform:new XRRigidTransform(e.translation,e.quaternion),width:e.width/2,height:e.height/2,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1}):this._glBinding.createCylinderLayer({transform:new XRRigidTransform(e.translation,e.quaternion),radius:e.radius,centralAngle:e.centralAngle,aspectRatio:e.aspectRatio,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1})}function IS(e,t){if(void 0===t)return;const r=this._cameraXR,i=this._renderer,n=i.backend,a=this._glBaseLayer,o=this.getReferenceSpace(),u=t.getViewerPose(o);if(this._xrFrame=t,null!==u){const e=u.views;null!==this._glBaseLayer&&n.setXRTarget(a.framebuffer);let t=!1;e.length!==r.cameras.length&&(r.cameras.length=0,t=!0);for(let i=0;i{await this.compileAsync(e,t);const s=this._renderLists.get(e,t),i=this._renderContexts.get(this._renderTarget,this._mrt),n=e.overrideMaterial||r.material,a=this._objects.get(r,n,e,t,s.lightsNode,i,i.clippingContext),{fragmentShader:o,vertexShader:u}=a.getNodeBuilderState();return{fragmentShader:o,vertexShader:u}}}}async init(){return null!==this._initPromise||(this._initPromise=new Promise(async(e,t)=>{let r=this.backend;try{await r.init(this)}catch(e){if(null===this._getFallback)return void t(e);try{this.backend=r=this._getFallback(e),await r.init(this)}catch(e){return void t(e)}}this._nodes=new bS(this,r),this._animation=new my(this,this._nodes,this.info),this._attributes=new Ay(r),this._background=new pN(this,this._nodes),this._geometries=new By(this._attributes,this.info),this._textures=new Yy(this,r,this.info),this._pipelines=new Oy(r,this._nodes),this._bindings=new Vy(r,this._nodes,this._textures,this._attributes,this._pipelines,this.info),this._objects=new Ty(this,this._nodes,this._geometries,this._pipelines,this._bindings,this.info),this._renderLists=new Hy(this.lighting),this._bundles=new NS,this._renderContexts=new Ky(this),this._animation.start(),this._initialized=!0,this._inspector.init(),e(this)})),this._initPromise}get domElement(){return this._canvasTarget.domElement}get coordinateSystem(){return this.backend.coordinateSystem}async compileAsync(e,t,r=null){if(!0===this._isDeviceLost)return;!1===this._initialized&&await this.init();const s=this._nodes.nodeFrame,i=s.renderId,n=this._currentRenderContext,a=this._currentRenderObjectFunction,o=this._handleObjectFunction,u=this._compilationPromises;null===r&&(r=e);const l=!0===e.isScene?e:!0===r.isScene?r:VS,d=this.needsFrameBufferTarget&&null===this._renderTarget?this._getFrameBufferTarget():this._renderTarget||this._outputRenderTarget,c=this._renderContexts.get(d,this._mrt),h=this._activeMipmapLevel,p=[];this._currentRenderContext=c,this._currentRenderObjectFunction=this.renderObject,this._handleObjectFunction=this._createObjectPipeline,this._compilationPromises=p,s.renderId++,s.update(),c.depth=this.depth,c.stencil=this.stencil,c.clippingContext||(c.clippingContext=new TS),c.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,d);const g=this._renderLists.get(l,t);if(g.begin(),this._projectObject(e,t,0,g,c.clippingContext),r!==e&&r.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&g.pushLight(e)}),g.finish(),null!==d){this._textures.updateRenderTarget(d,h);const e=this._textures.get(d);c.textures=e.textures,c.depthTexture=e.depthTexture}else c.textures=null,c.depthTexture=null;r!==e?this._background.update(r,g,c):this._background.update(l,g,c);const m=g.opaque,f=g.transparent,y=g.transparentDoublePass,b=g.lightsNode;!0===this.opaque&&m.length>0&&this._renderObjects(m,t,l,b),!0===this.transparent&&f.length>0&&this._renderTransparents(f,y,t,l,b),s.renderId=i,this._currentRenderContext=n,this._currentRenderObjectFunction=a,this._handleObjectFunction=o,this._compilationPromises=u;for(const e of p){const t=this._objects.get(e.object,e.material,e.scene,e.camera,e.lightsNode,e.renderContext,e.clippingContext,e.passId);t.drawRange=e.object.geometry.drawRange,t.group=e.group,this._geometries.updateForRender(t),await this._nodes.getForRenderAsync(t),this._nodes.updateBefore(t),this._nodes.updateForRender(t),this._bindings.updateForRender(t);const r=[];this._pipelines.getForRender(t,r),r.length>0&&await Promise.all(r),this._nodes.updateAfter(t),await ut()}}async renderAsync(e,t){v('Renderer: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.render(e,t)}async waitForGPU(){o("Renderer: waitForGPU() has been removed. Read https://github.com/mrdoob/three.js/issues/32012 for more information.")}set inspector(e){null!==this._inspector&&this._inspector.setRenderer(null),this._inspector=e,this._inspector.setRenderer(this)}get inspector(){return this._inspector}set highPrecision(e){const t=this.contextNode.value;!0===e?(t.modelViewMatrix=qd,t.modelNormalViewMatrix=jd):this.highPrecision&&(delete t.modelViewMatrix,delete t.modelNormalViewMatrix)}get highPrecision(){const e=this.contextNode.value;return e.modelViewMatrix===qd&&e.modelNormalViewMatrix===jd}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getOutputBufferType(){return this._outputBufferType}getColorBufferType(){return v('Renderer: ".getColorBufferType()" has been renamed to ".getOutputBufferType()".'),this.getOutputBufferType()}_onDeviceLost(e){let t=`THREE.WebGPURenderer: ${e.api} Device Lost:\n\nMessage: ${e.message}`;e.reason&&(t+=`\nReason: ${e.reason}`),o(t),this._isDeviceLost=!0}_renderBundle(e,t,r){const{bundleGroup:s,camera:i,renderList:n}=e,a=this._currentRenderContext,o=this._bundles.get(s,i),u=this.backend.get(o);void 0===u.renderContexts&&(u.renderContexts=new Set);const l=s.version!==u.version,d=!1===u.renderContexts.has(a)||l;if(u.renderContexts.add(a),d){this.backend.beginBundle(a),(void 0===u.renderObjects||l)&&(u.renderObjects=[]),this._currentRenderBundle=o;const{transparentDoublePass:e,transparent:d,opaque:c}=n;!0===this.opaque&&c.length>0&&this._renderObjects(c,i,t,r),!0===this.transparent&&d.length>0&&this._renderTransparents(d,e,i,t,r),this._currentRenderBundle=null,this.backend.finishBundle(a,o),u.version=s.version}else{const{renderObjects:e}=u;for(let t=0,r=e.length;t>=h,g.viewportValue.height>>=h,g.viewportValue.minDepth=T,g.viewportValue.maxDepth=_,g.viewport=!1===g.viewportValue.equals(GS),g.scissorValue.copy(b).multiplyScalar(x).floor(),g.scissor=f._scissorTest&&!1===g.scissorValue.equals(GS),g.scissorValue.width>>=h,g.scissorValue.height>>=h,g.clippingContext||(g.clippingContext=new TS),g.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,p);const v=t.isArrayCamera?zS:$S;t.isArrayCamera||(WS.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),v.setFromProjectionMatrix(WS,t.coordinateSystem,t.reversedDepth));const N=this._renderLists.get(e,t);if(N.begin(),this._projectObject(e,t,0,N,g.clippingContext),N.finish(),!0===this.sortObjects&&N.sort(this._opaqueSort,this._transparentSort),null!==p){this._textures.updateRenderTarget(p,h);const e=this._textures.get(p);g.textures=e.textures,g.depthTexture=e.depthTexture,g.width=e.width,g.height=e.height,g.renderTarget=p,g.depth=p.depthBuffer,g.stencil=p.stencilBuffer}else g.textures=null,g.depthTexture=null,g.width=kS.width,g.height=kS.height,g.depth=this.depth,g.stencil=this.stencil;g.width>>=h,g.height>>=h,g.activeCubeFace=c,g.activeMipmapLevel=h,g.occlusionQueryCount=N.occlusionQueryCount,g.scissorValue.max(HS.set(0,0,0,0)),g.scissorValue.x+g.scissorValue.width>g.width&&(g.scissorValue.width=Math.max(g.width-g.scissorValue.x,0)),g.scissorValue.y+g.scissorValue.height>g.height&&(g.scissorValue.height=Math.max(g.height-g.scissorValue.y,0)),this._background.update(l,N,g),g.camera=t,this.backend.beginRender(g);const{bundles:S,lightsNode:R,transparentDoublePass:E,transparent:A,opaque:w}=N;return S.length>0&&this._renderBundles(S,l,R),!0===this.opaque&&w.length>0&&this._renderObjects(w,t,l,R),!0===this.transparent&&A.length>0&&this._renderTransparents(A,E,t,l,R),this.backend.finishRender(g),i.renderId=n,this._currentRenderContext=a,this._currentRenderObjectFunction=o,this._handleObjectFunction=u,this._callDepth--,null!==s&&(this.setRenderTarget(d,c,h),this._renderOutput(p)),l.onAfterRender(this,e,t,p),this.inspector.finishRender(this.backend.getTimestampUID(g)),g}_setXRLayerSize(e,t){this._canvasTarget._width=e,this._canvasTarget._height=t,this.setViewport(0,0,e,t)}_renderOutput(e){const t=this._quad;this._nodes.hasOutputChange(e.texture)&&(t.material.fragmentNode=this._nodes.getOutputNode(e.texture),t.material.needsUpdate=!0);const r=this.autoClear,s=this.xr.enabled;this.autoClear=!1,this.xr.enabled=!1,this._renderScene(t,t.camera,!1),this.autoClear=r,this.xr.enabled=s}getMaxAnisotropy(){return this.backend.getMaxAnisotropy()}getActiveCubeFace(){return this._activeCubeFace}getActiveMipmapLevel(){return this._activeMipmapLevel}async setAnimationLoop(e){!1===this._initialized&&await this.init(),this._animation.setAnimationLoop(e)}getAnimationLoop(){return this._animation.getAnimationLoop()}async getArrayBufferAsync(e){return await this.backend.getArrayBufferAsync(e)}getContext(){return this.backend.getContext()}getPixelRatio(){return this._canvasTarget.getPixelRatio()}getDrawingBufferSize(e){return this._canvasTarget.getDrawingBufferSize(e)}getSize(e){return this._canvasTarget.getSize(e)}setPixelRatio(e=1){this._canvasTarget.setPixelRatio(e)}setDrawingBufferSize(e,t,r){this.xr&&this.xr.isPresenting||this._canvasTarget.setDrawingBufferSize(e,t,r)}setSize(e,t,r=!0){this.xr&&this.xr.isPresenting||this._canvasTarget.setSize(e,t,r)}setOpaqueSort(e){this._opaqueSort=e}setTransparentSort(e){this._transparentSort=e}getScissor(e){return this._canvasTarget.getScissor(e)}setScissor(e,t,r,s){this._canvasTarget.setScissor(e,t,r,s)}getScissorTest(){return this._canvasTarget.getScissorTest()}setScissorTest(e){this._canvasTarget.setScissorTest(e),this.backend.setScissorTest(e)}getViewport(e){return this._canvasTarget.getViewport(e)}setViewport(e,t,r,s,i=0,n=1){this._canvasTarget.setViewport(e,t,r,s,i,n)}getClearColor(e){return e.copy(this._clearColor)}setClearColor(e,t=1){this._clearColor.set(e),this._clearColor.a=t}getClearAlpha(){return this._clearColor.a}setClearAlpha(e){this._clearColor.a=e}getClearDepth(){return!0===this.reversedDepthBuffer?1-this._clearDepth:this._clearDepth}setClearDepth(e){this._clearDepth=e}getClearStencil(){return this._clearStencil}setClearStencil(e){this._clearStencil=e}isOccluded(e){const t=this._currentRenderContext;return t&&this.backend.isOccluded(t,e)}clear(e=!0,t=!0,r=!0){if(!1===this._initialized)throw new Error('Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.');const s=this._renderTarget||this._getFrameBufferTarget();let i=null;if(null!==s){this._textures.updateRenderTarget(s);const e=this._textures.get(s);i=this._renderContexts.get(s),i.textures=e.textures,i.depthTexture=e.depthTexture,i.width=e.width,i.height=e.height,i.renderTarget=s,i.depth=s.depthBuffer,i.stencil=s.stencilBuffer;const t=this.backend.getClearColor();i.clearColorValue.r=t.r,i.clearColorValue.g=t.g,i.clearColorValue.b=t.b,i.clearColorValue.a=t.a,i.clearDepthValue=this.getClearDepth(),i.clearStencilValue=this.getClearStencil(),i.activeCubeFace=this.getActiveCubeFace(),i.activeMipmapLevel=this.getActiveMipmapLevel()}this.backend.clear(e,t,r,i),null!==s&&null===this._renderTarget&&this._renderOutput(s)}clearColor(){this.clear(!0,!1,!1)}clearDepth(){this.clear(!1,!0,!1)}clearStencil(){this.clear(!1,!1,!0)}async clearAsync(e=!0,t=!0,r=!0){v('Renderer: "clearAsync()" has been deprecated. Use "clear()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.clear(e,t,r)}async clearColorAsync(){v('Renderer: "clearColorAsync()" has been deprecated. Use "clearColor()" and "await renderer.init();" when creating the renderer.'),this.clear(!0,!1,!1)}async clearDepthAsync(){v('Renderer: "clearDepthAsync()" has been deprecated. Use "clearDepth()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!0,!1)}async clearStencilAsync(){v('Renderer: "clearStencilAsync()" has been deprecated. Use "clearStencil()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!1,!0)}get needsFrameBufferTarget(){const e=this.currentToneMapping!==m,t=this.currentColorSpace!==p.workingColorSpace;return e||t}get samples(){return this._samples}get currentSamples(){let e=this._samples;return null!==this._renderTarget?e=this._renderTarget.samples:this.needsFrameBufferTarget&&(e=0),e}get currentToneMapping(){return this.isOutputTarget?this.toneMapping:m}get currentColorSpace(){return this.isOutputTarget?this.outputColorSpace:p.workingColorSpace}get isOutputTarget(){return this._renderTarget===this._outputRenderTarget||null===this._renderTarget}dispose(){!0===this._initialized&&(this.info.dispose(),this.backend.dispose(),this._animation.dispose(),this._objects.dispose(),this._geometries.dispose(),this._pipelines.dispose(),this._nodes.dispose(),this._bindings.dispose(),this._renderLists.dispose(),this._renderContexts.dispose(),this._textures.dispose(),null!==this._frameBufferTarget&&this._frameBufferTarget.dispose(),Object.values(this.backend.timestampQueryPool).forEach(e=>{null!==e&&e.dispose()})),this.setRenderTarget(null),this.setAnimationLoop(null)}setRenderTarget(e,t=0,r=0){this._renderTarget=e,this._activeCubeFace=t,this._activeMipmapLevel=r}getRenderTarget(){return this._renderTarget}setOutputRenderTarget(e){this._outputRenderTarget=e}getOutputRenderTarget(){return this._outputRenderTarget}setCanvasTarget(e){this._canvasTarget.removeEventListener("resize",this._onCanvasTargetResize),this._canvasTarget=e,this._canvasTarget.addEventListener("resize",this._onCanvasTargetResize)}getCanvasTarget(){return this._canvasTarget}_resetXRState(){this.backend.setXRTarget(null),this.setOutputRenderTarget(null),this.setRenderTarget(null),this._frameBufferTarget.dispose(),this._frameBufferTarget=null}setRenderObjectFunction(e){this._renderObjectFunction=e}getRenderObjectFunction(){return this._renderObjectFunction}compute(e,t=null){if(!0===this._isDeviceLost)return;if(!1===this._initialized)return d("Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead."),this.computeAsync(e,t);const r=this._nodes.nodeFrame,s=r.renderId;this.info.calls++,this.info.compute.calls++,this.info.compute.frameCalls++,r.renderId=this.info.calls,this.backend.updateTimeStampUID(e),this.inspector.beginCompute(this.backend.getTimestampUID(e),e);const i=this.backend,n=this._pipelines,a=this._bindings,o=this._nodes,u=Array.isArray(e)?e:[e];if(void 0===u[0]||!0!==u[0].isComputeNode)throw new Error("THREE.Renderer: .compute() expects a ComputeNode.");i.beginCompute(e);for(const r of u){if(!1===n.has(r)){const e=()=>{r.removeEventListener("dispose",e),n.delete(r),a.deleteForCompute(r),o.delete(r)};r.addEventListener("dispose",e);const t=r.onInitFunction;null!==t&&t.call(r,{renderer:this})}o.updateForCompute(r),a.updateForCompute(r);const s=a.getForCompute(r),u=n.getForCompute(r,s);i.compute(e,r,s,u,t)}i.finishCompute(e),r.renderId=s,this.inspector.finishCompute(this.backend.getTimestampUID(e))}async computeAsync(e,t=null){!1===this._initialized&&await this.init(),this.compute(e,t)}async hasFeatureAsync(e){return v('Renderer: "hasFeatureAsync()" has been deprecated. Use "hasFeature()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.hasFeature(e)}async resolveTimestampsAsync(e="render"){return!1===this._initialized&&await this.init(),this.backend.resolveTimestampsAsync(e)}hasFeature(e){if(!1===this._initialized)throw new Error('Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.');return this.backend.hasFeature(e)}hasInitialized(){return this._initialized}async initTextureAsync(e){v('Renderer: "initTextureAsync()" has been deprecated. Use "initTexture()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.initTexture(e)}initTexture(e){if(!1===this._initialized)throw new Error('Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateTexture(e)}initRenderTarget(e){if(!1===this._initialized)throw new Error('Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateRenderTarget(e);const t=this._textures.get(e),r=this._renderContexts.get(e);r.textures=t.textures,r.depthTexture=t.depthTexture,r.width=t.width,r.height=t.height,r.renderTarget=e,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,this.backend.initRenderTarget(r)}copyFramebufferToTexture(e,t=null){if(null!==t)if(t.isVector2)t=HS.set(t.x,t.y,e.image.width,e.image.height).floor();else{if(!t.isVector4)return void o("Renderer.copyFramebufferToTexture: Invalid rectangle.");t=HS.copy(t).floor()}else t=HS.set(0,0,e.image.width,e.image.height);let r,s=this._currentRenderContext;null!==s?r=s.renderTarget:(r=this._renderTarget||this._getFrameBufferTarget(),null!==r&&(this._textures.updateRenderTarget(r),s=this._textures.get(r))),this._textures.updateTexture(e,{renderTarget:r}),this.backend.copyFramebufferToTexture(e,s,t),this._inspector.copyFramebufferToTexture(e)}copyTextureToTexture(e,t,r=null,s=null,i=0,n=0){this._textures.updateTexture(e),this._textures.updateTexture(t),this.backend.copyTextureToTexture(e,t,r,s,i,n),this._inspector.copyTextureToTexture(e,t)}async readRenderTargetPixelsAsync(e,t,r,s,i,n=0,a=0){return this.backend.copyTextureToBuffer(e.textures[n],t,r,s,i,a)}_projectObject(e,t,r,s,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)r=e.renderOrder,e.isClippingGroup&&e.enabled&&(i=i.getGroupContext(e));else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)s.pushLight(e);else if(e.isSprite){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsSprite(e,t)){!0===this.sortObjects&&HS.setFromMatrixPosition(e.matrixWorld).applyMatrix4(WS);const{geometry:t,material:n}=e;n.visible&&s.push(e,t,n,r,HS.z,null,i)}}else if(e.isLineLoop)o("Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.");else if(e.isMesh||e.isLine||e.isPoints){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsObject(e,t)){const{geometry:t,material:n}=e;if(!0===this.sortObjects&&(null===t.boundingSphere&&t.computeBoundingSphere(),HS.copy(t.boundingSphere.center).applyMatrix4(e.matrixWorld).applyMatrix4(WS)),Array.isArray(n)){const a=t.groups;for(let o=0,u=a.length;o0){for(const{material:e}of t)e.side=L;this._renderObjects(t,r,s,i,"backSide");for(const{material:e}of t)e.side=ht;this._renderObjects(e,r,s,i);for(const{material:e}of t)e.side=P}else this._renderObjects(e,r,s,i)}_renderObjects(e,t,r,s,i=null){for(let n=0,a=e.length;n(t.not().discard(),e))(u)}}e.depthNode&&e.depthNode.isNode&&(l=e.depthNode),e.castShadowPositionNode&&e.castShadowPositionNode.isNode?o=e.castShadowPositionNode:e.positionNode&&e.positionNode.isNode&&(o=e.positionNode),r={version:t,colorNode:u,depthNode:l,positionNode:o},this._cacheShadowNodes.set(e,r)}return r}renderObject(e,t,r,s,i,n,a,o=null,u=null){let l,d,c,h,p=!1;if(e.onBeforeRender(this,t,r,s,i,n),!0===i.allowOverride&&null!==t.overrideMaterial){const e=t.overrideMaterial;if(p=!0,l=e.isNodeMaterial?e.colorNode:null,d=e.isNodeMaterial?e.depthNode:null,c=e.isNodeMaterial?e.positionNode:null,h=t.overrideMaterial.side,i.positionNode&&i.positionNode.isNode&&(e.positionNode=i.positionNode),e.alphaTest=i.alphaTest,e.alphaMap=i.alphaMap,e.transparent=i.transparent||i.transmission>0||i.transmissionNode&&i.transmissionNode.isNode||i.backdropNode&&i.backdropNode.isNode,e.isShadowPassMaterial){const{colorNode:t,depthNode:r,positionNode:s}=this._getShadowNodes(i);this.shadowMap.type===tt?e.side=null!==i.shadowSide?i.shadowSide:i.side:e.side=null!==i.shadowSide?i.shadowSide:qS[i.side],null!==t&&(e.colorNode=t),null!==r&&(e.depthNode=r),null!==s&&(e.positionNode=s)}i=e}!0===i.transparent&&i.side===P&&!1===i.forceSinglePass?(i.side=L,this._handleObjectFunction(e,i,t,r,a,n,o,"backSide"),i.side=ht,this._handleObjectFunction(e,i,t,r,a,n,o,u),i.side=P):this._handleObjectFunction(e,i,t,r,a,n,o,u),p&&(t.overrideMaterial.colorNode=l,t.overrideMaterial.depthNode=d,t.overrideMaterial.positionNode=c,t.overrideMaterial.side=h),e.onAfterRender(this,t,r,s,i,n)}hasCompatibility(e){return this.backend.hasCompatibility(e)}_renderObjectDirect(e,t,r,s,i,n,a,o){const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);if(u.drawRange=e.geometry.drawRange,u.group=n,null!==this._currentRenderBundle){this.backend.get(this._currentRenderBundle).renderObjects.push(u),u.bundle=this._currentRenderBundle.bundleGroup}const l=this._nodes.needsRefresh(u);l&&(this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u)),this._pipelines.updateForRender(u),this._pipelines.isReady(u)&&(this.backend.draw(u,this.info),l&&this._nodes.updateAfter(u))}_createObjectPipeline(e,t,r,s,i,n,a,o){if(null!==this._compilationPromises)return void this._compilationPromises.push({object:e,material:t,scene:r,camera:s,lightsNode:i,group:n,clippingContext:a,passId:o,renderContext:this._currentRenderContext});const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);u.drawRange=e.geometry.drawRange,u.group=n,this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u),this._pipelines.getForRender(u,this._compilationPromises),this._nodes.updateAfter(u)}_onCanvasTargetResize(){this._initialized&&this.backend.updateSize()}get compile(){return this.compileAsync}}class XS{constructor(e=""){this.name=e,this.visibility=0}setVisibility(e){this.visibility|=e}getVisibility(){return this.visibility}clone(){return Object.assign(new this.constructor,this)}}class KS extends XS{constructor(e,t=null){super(e),this.isBuffer=!0,this.bytesPerElement=Float32Array.BYTES_PER_ELEMENT,this._buffer=t,this._updateRanges=[]}get updateRanges(){return this._updateRanges}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}get byteLength(){return(e=this._buffer.byteLength)+(Ey-e%Ey)%Ey;var e}get buffer(){return this._buffer}update(){return!0}}class QS extends KS{constructor(e,t=null){super(e,t),this.isUniformBuffer=!0}}let YS=0;class ZS extends QS{constructor(e,t){super("UniformBuffer_"+YS++,e?e.value:null),this.nodeUniform=e,this.groupNode=t,this.isNodeUniformBuffer=!0}set updateRanges(e){this.nodeUniform.updateRanges=e}get updateRanges(){return this.nodeUniform.updateRanges}addUpdateRange(e,t){this.nodeUniform.addUpdateRange(e,t)}clearUpdateRanges(){this.nodeUniform.clearUpdateRanges()}get buffer(){return this.nodeUniform.value}}class JS extends QS{constructor(e){super(e),this.isUniformsGroup=!0,this._values=null,this.uniforms=[],this._updateRangeCache=new Map}addUniformUpdateRange(e){const t=e.index;if(!0!==this._updateRangeCache.has(t)){const r=this.updateRanges,s={start:e.offset,count:e.itemSize};r.push(s),this._updateRangeCache.set(t,s)}}clearUpdateRanges(){this._updateRangeCache.clear(),super.clearUpdateRanges()}addUniform(e){return this.uniforms.push(e),this}removeUniform(e){const t=this.uniforms.indexOf(e);return-1!==t&&this.uniforms.splice(t,1),this}get values(){return null===this._values&&(this._values=Array.from(this.buffer)),this._values}get buffer(){let e=this._buffer;if(null===e){const t=this.byteLength;e=new Float32Array(new ArrayBuffer(t)),this._buffer=e}return e}get byteLength(){const e=this.bytesPerElement;let t=0;for(let r=0,s=this.uniforms.length;r{this.generation=null,this.version=-1},this.texture=t,this.version=t?t.version:-1,this.generation=null,this.samplerKey="",this.isSampler=!0}set texture(e){this._texture!==e&&(this._texture&&this._texture.removeEventListener("dispose",this._onTextureDispose),this._texture=e,this.generation=null,this.version=-1,this._texture&&this._texture.addEventListener("dispose",this._onTextureDispose))}get texture(){return this._texture}update(){const{texture:e,version:t}=this;return t!==e.version&&(this.version=e.version,!0)}clone(){const e=super.clone();return e._texture=null,e._onTextureDispose=()=>{e.generation=null,e.version=-1},e.texture=this.texture,e}}let sR=0;class iR extends rR{constructor(e,t){super(e,t),this.id=sR++,this.store=!1,this.mipLevel=0,this.isSampledTexture=!0}}class nR extends iR{constructor(e,t,r,s=null){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r,this.access=s}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class aR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledCubeTexture=!0}}class oR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledTexture3D=!0}}const uR={bitcast_int_uint:new pT("uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }"),bitcast_uint_int:new pT("uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }")},lR={textureDimensions:"textureSize",equals:"equal",bitcast_float_int:"floatBitsToInt",bitcast_int_float:"intBitsToFloat",bitcast_uint_float:"uintBitsToFloat",bitcast_float_uint:"floatBitsToUint",bitcast_uint_int:"tsl_bitcast_uint_to_int",bitcast_int_uint:"tsl_bitcast_int_to_uint",floatpack_snorm_2x16:"packSnorm2x16",floatpack_unorm_2x16:"packUnorm2x16",floatpack_float16_2x16:"packHalf2x16",floatunpack_snorm_2x16:"unpackSnorm2x16",floatunpack_unorm_2x16:"unpackUnorm2x16",floatunpack_float16_2x16:"unpackHalf2x16"},dR={low:"lowp",medium:"mediump",high:"highp"},cR={swizzleAssign:!0,storageBuffer:!1},hR={perspective:"smooth",linear:"noperspective"},pR={centroid:"centroid"},gR="\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision highp sampler2DShadow;\nprecision highp sampler2DArrayShadow;\nprecision highp samplerCubeShadow;\n";class mR extends jN{constructor(e,t){super(e,t,new gS),this.uniformGroups={},this.transforms=[],this.extensions={},this.builtins={vertex:[],fragment:[],compute:[]}}needsToWorkingColorSpace(e){return!0===e.isVideoTexture&&e.colorSpace!==T}_include(e){const t=uR[e];return t.build(this),this.addInclude(t),t}getMethod(e){return void 0!==uR[e]&&this._include(e),lR[e]||e}getBitcastMethod(e,t){return this.getMethod(`bitcast_${t}_${e}`)}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`${e} ? ${t} : ${r}`}getOutputStructName(){return""}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(this.getType(e.type)+" "+e.name);return`${this.getType(t.type)} ${t.name}( ${s.join(", ")} ) {\n\n\t${r.vars}\n\n${r.code}\n\treturn ${r.result};\n\n}`}setupPBO(e){const t=e.value;if(void 0===t.pbo){const e=t.array,r=t.count*t.itemSize,{itemSize:s}=t,i=t.array.constructor.name.toLowerCase().includes("int");let n=i?_t:vt;2===s?n=i?Et:W:3===s?n=i?At:wt:4===s&&(n=i?Ct:Ae);const a={Float32Array:Q,Uint8Array:$e,Uint16Array:Rt,Uint32Array:S,Int8Array:St,Int16Array:Nt,Int32Array:R,Uint8ClampedArray:$e},o=Math.pow(2,Math.ceil(Math.log2(Math.sqrt(r/s))));let u=Math.ceil(r/s/o);o*u*s0?i:"";t=`${r.name} {\n\t${s} ${e.name}[${n}];\n};\n`}else{const t=e.groupNode.name;if(void 0===s[t]){const e=this.uniformGroups[t];if(void 0!==e){const r=[];for(const t of e.uniforms){const e=t.getType(),s=this.getVectorType(e),i=t.nodeUniform.node.precision;let n=`${s} ${t.name};`;null!==i&&(n=dR[i]+" "+n),r.push("\t"+n)}s[t]=r}}i=!0}if(!i){const s=e.node.precision;null!==s&&(t=dR[s]+" "+t),t="uniform "+t,r.push(t)}}let i="";for(const e in s){const t=s[e];i+=this._getGLSLUniformStruct(e,t.join("\n"))+"\n"}return i+=r.join("\n"),i}getTypeFromAttribute(e){let t=super.getTypeFromAttribute(e);if(/^[iu]/.test(t)&&e.gpuType!==R){let r=e;e.isInterleavedBufferAttribute&&(r=e.data);const s=r.array;!1==(s instanceof Uint32Array||s instanceof Int32Array)&&(t=t.slice(1))}return t}getAttributes(e){let t="";if("vertex"===e||"compute"===e){const e=this.getAttributesArray();let r=0;for(const s of e)t+=`layout( location = ${r++} ) in ${s.type} ${s.name};\n`}return t}getStructMembers(e){const t=[];for(const r of e.members)t.push(`\t${r.type} ${r.name};`);return t.join("\n")}getStructs(e){const t=[],r=this.structs[e],s=[];for(const e of r)if(e.output)for(const t of e.members)s.push(`layout( location = ${t.index} ) out ${t.type} ${t.name};`);else{let r="struct "+e.name+" {\n";r+=this.getStructMembers(e),r+="\n};\n",t.push(r)}return 0===s.length&&s.push("layout( location = 0 ) out vec4 fragColor;"),"\n"+s.join("\n")+"\n\n"+t.join("\n")}getVaryings(e){let t="";const r=this.varyings;if("vertex"===e||"compute"===e)for(const s of r){"compute"===e&&(s.needsInterpolation=!0);const r=this.getType(s.type);if(s.needsInterpolation)if(s.interpolationType){t+=`${hR[s.interpolationType]||s.interpolationType} ${pR[s.interpolationSampling]||""} out ${r} ${s.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}out ${r} ${s.name};\n`}else t+=`${r} ${s.name};\n`}else if("fragment"===e)for(const e of r)if(e.needsInterpolation){const r=this.getType(e.type);if(e.interpolationType){t+=`${hR[e.interpolationType]||e.interpolationType} ${pR[e.interpolationSampling]||""} in ${r} ${e.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}in ${r} ${e.name};\n`}}for(const r of this.builtins[e])t+=`${r};\n`;return t}getVertexIndex(){return"uint( gl_VertexID )"}getInstanceIndex(){return"uint( gl_InstanceID )"}getInvocationLocalIndex(){return`uint( gl_InstanceID ) % ${this.object.workgroupSize.reduce((e,t)=>e*t,1)}u`}getSubgroupSize(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node")}getInvocationSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node")}getSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node")}getDrawIndex(){return this.renderer.backend.extensions.has("WEBGL_multi_draw")?"uint( gl_DrawID )":null}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord.xy"}getFragDepth(){return"gl_FragDepth"}enableExtension(e,t,r=this.shaderStage){const s=this.extensions[r]||(this.extensions[r]=new Map);!1===s.has(e)&&s.set(e,{name:e,behavior:t})}getExtensions(e){const t=[];if("vertex"===e){const t=this.renderer.backend.extensions;this.object.isBatchedMesh&&t.has("WEBGL_multi_draw")&&this.enableExtension("GL_ANGLE_multi_draw","require",e)}const r=this.extensions[e];if(void 0!==r)for(const{name:e,behavior:s}of r.values())t.push(`#extension ${e} : ${s}`);return t.join("\n")}getClipDistance(){return"gl_ClipDistance"}isAvailable(e){let t=cR[e];if(void 0===t){let r;switch(t=!1,e){case"float32Filterable":r="OES_texture_float_linear";break;case"clipDistance":r="WEBGL_clip_cull_distance"}if(void 0!==r){const e=this.renderer.backend.extensions;e.has(r)&&(e.get(r),t=!0)}cR[e]=t}return t}isFlipY(){return!0}getUniformBufferLimit(){const e=this.renderer.backend.gl;return e.getParameter(e.MAX_UNIFORM_BLOCK_SIZE)}enableHardwareClipping(e){this.enableExtension("GL_ANGLE_clip_cull_distance","require"),this.builtins.vertex.push(`out float gl_ClipDistance[ ${e} ]`)}enableMultiview(){this.enableExtension("GL_OVR_multiview2","require","fragment"),this.enableExtension("GL_OVR_multiview2","require","vertex"),this.builtins.vertex.push("layout(num_views = 2) in")}registerTransform(e,t){this.transforms.push({varyingName:e,attributeNode:t})}getTransforms(){const e=this.transforms;let t="";for(let r=0;r0&&(r+="\n"),r+=`\t// flow -> ${n}\n\t`),r+=`${s.code}\n\t`,e===i&&"compute"!==t&&(r+="// result\n\t","vertex"===t?(r+="gl_Position = ",r+=`${s.result};`):"fragment"===t&&(e.outputNode.isOutputStructNode||(r+="fragColor = ",r+=`${s.result};`)))}const n=e[t];n.extensions=this.getExtensions(t),n.uniforms=this.getUniforms(t),n.attributes=this.getAttributes(t),n.varyings=this.getVaryings(t),n.vars=this.getVars(t),n.structs=this.getStructs(t),n.codes=this.getCodes(t),n.transforms=this.getTransforms(t),n.flow=r}null!==this.material?(this.vertexShader=this._getGLSLVertexCode(e.vertex),this.fragmentShader=this._getGLSLFragmentCode(e.fragment)):this.computeShader=this._getGLSLVertexCode(e.compute)}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);let a=n.uniformGPU;if(void 0===a){const s=e.groupNode,o=s.name,u=this.getBindGroupArray(o,r);if("texture"===t)a=new nR(i.name,i.node,s),u.push(a);else if("cubeTexture"===t||"cubeDepthTexture"===t)a=new aR(i.name,i.node,s),u.push(a);else if("texture3D"===t)a=new oR(i.name,i.node,s),u.push(a);else if("buffer"===t){i.name=`buffer${e.id}`;const t=this.getSharedDataFromNode(e);let r=t.buffer;void 0===r&&(e.name=`NodeBuffer_${e.id}`,r=new ZS(e,s),r.name=e.name,t.buffer=r),u.push(r),a=r}else{let e=this.uniformGroups[o];void 0===e?(e=new tR(o,s),this.uniformGroups[o]=e,u.push(e)):-1===u.indexOf(e)&&u.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}}let fR=null,yR=null;class bR{constructor(e={}){this.parameters=Object.assign({},e),this.data=new WeakMap,this.renderer=null,this.domElement=null,this.timestampQueryPool={[Mt.RENDER]:null,[Mt.COMPUTE]:null},this.trackTimestamp=!0===e.trackTimestamp}async init(e){this.renderer=e}get coordinateSystem(){}beginRender(){}finishRender(){}beginCompute(){}finishCompute(){}draw(){}compute(){}createProgram(){}destroyProgram(){}createBindings(){}updateBindings(){}updateBinding(){}createRenderPipeline(){}createComputePipeline(){}needsRenderUpdate(){}getRenderCacheKey(){}createNodeBuilder(){}updateSampler(){}createDefaultTexture(){}createTexture(){}updateTexture(){}generateMipmaps(){}destroyTexture(){}async copyTextureToBuffer(){}copyTextureToTexture(){}copyFramebufferToTexture(){}createAttribute(){}createIndexAttribute(){}createStorageAttribute(){}updateAttribute(){}destroyAttribute(){}getContext(){}updateSize(){}updateViewport(){}updateTimeStampUID(e){const t=this.get(e),r=this.renderer.info.frame;let s;s=!0===e.isComputeNode?"c:"+this.renderer.info.compute.frameCalls:"r:"+this.renderer.info.render.frameCalls,t.timestampUID=s+":"+e.id+":f"+r}getTimestampUID(e){return this.get(e).timestampUID}getTimestampFrames(e){const t=this.timestampQueryPool[e];return t?t.getTimestampFrames():[]}_getQueryPool(e){const t=e.startsWith("c:")?Mt.COMPUTE:Mt.RENDER;return this.timestampQueryPool[t]}getTimestamp(e){return this._getQueryPool(e).getTimestamp(e)}hasTimestamp(e){return this._getQueryPool(e).hasTimestamp(e)}isOccluded(){}async resolveTimestampsAsync(e="render"){if(!this.trackTimestamp)return void v("WebGPURenderer: Timestamp tracking is disabled.");const t=this.timestampQueryPool[e];if(!t)return;const r=await t.resolveQueriesAsync();return this.renderer.info[e].timestamp=r,r}async getArrayBufferAsync(){}async hasFeatureAsync(){}hasFeature(){}getMaxAnisotropy(){}getDrawingBufferSize(){return fR=fR||new t,this.renderer.getDrawingBufferSize(fR)}setScissorTest(){}getClearColor(){const e=this.renderer;return yR=yR||new Zy,e.getClearColor(yR),yR.getRGB(yR),yR}getDomElement(){let e=this.domElement;return null===e&&(e=void 0!==this.parameters.canvas?this.parameters.canvas:Bt(),"setAttribute"in e&&e.setAttribute("data-engine",`three.js r${lt} webgpu`),this.domElement=e),e}hasCompatibility(){return!1}initRenderTarget(){}set(e,t){this.data.set(e,t)}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}has(e){return this.data.has(e)}delete(e){this.data.delete(e)}deleteBindGroupData(){}dispose(){}}let xR,TR,_R=0;class vR{constructor(e,t){this.buffers=[e.bufferGPU,t],this.type=e.type,this.bufferType=e.bufferType,this.pbo=e.pbo,this.byteLength=e.byteLength,this.bytesPerElement=e.BYTES_PER_ELEMENT,this.version=e.version,this.isInteger=e.isInteger,this.activeBufferIndex=0,this.baseId=e.id}get id(){return`${this.baseId}|${this.activeBufferIndex}`}get bufferGPU(){return this.buffers[this.activeBufferIndex]}get transformBuffer(){return this.buffers[1^this.activeBufferIndex]}switchBuffers(){this.activeBufferIndex^=1}}class NR{constructor(e){this.backend=e}createAttribute(e,t){const r=this.backend,{gl:s}=r,i=e.array,n=e.usage||s.STATIC_DRAW,a=e.isInterleavedBufferAttribute?e.data:e,o=r.get(a);let u,l=o.bufferGPU;if(void 0===l&&(l=this._createBuffer(s,t,i,n),o.bufferGPU=l,o.bufferType=t,o.version=a.version),i instanceof Float32Array)u=s.FLOAT;else if("undefined"!=typeof Float16Array&&i instanceof Float16Array)u=s.HALF_FLOAT;else if(i instanceof Uint16Array)u=e.isFloat16BufferAttribute?s.HALF_FLOAT:s.UNSIGNED_SHORT;else if(i instanceof Int16Array)u=s.SHORT;else if(i instanceof Uint32Array)u=s.UNSIGNED_INT;else if(i instanceof Int32Array)u=s.INT;else if(i instanceof Int8Array)u=s.BYTE;else if(i instanceof Uint8Array)u=s.UNSIGNED_BYTE;else{if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLBackend: Unsupported buffer data format: "+i);u=s.UNSIGNED_BYTE}let d={bufferGPU:l,bufferType:t,type:u,byteLength:i.byteLength,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,pbo:e.pbo,isInteger:u===s.INT||u===s.UNSIGNED_INT||e.gpuType===R,id:_R++};if(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute){const e=this._createBuffer(s,t,i,n);d=new vR(d,e)}r.set(e,d)}updateAttribute(e){const t=this.backend,{gl:r}=t,s=e.array,i=e.isInterleavedBufferAttribute?e.data:e,n=t.get(i),a=n.bufferType,o=e.isInterleavedBufferAttribute?e.data.updateRanges:e.updateRanges;if(r.bindBuffer(a,n.bufferGPU),0===o.length)r.bufferSubData(a,0,s);else{for(let e=0,t=o.length;e0?this.enable(s.SAMPLE_ALPHA_TO_COVERAGE):this.disable(s.SAMPLE_ALPHA_TO_COVERAGE),r>0&&this.currentClippingPlanes!==r){const e=12288;for(let t=0;t<8;t++)t{!function i(){const n=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(n===e.WAIT_FAILED)return e.deleteSync(t),void s();n!==e.TIMEOUT_EXPIRED?(e.deleteSync(t),r()):requestAnimationFrame(i)}()})}}let ER,AR,wR,CR=!1;class MR{constructor(e){this.backend=e,this.gl=e.gl,this.extensions=e.extensions,this.defaultTextures={},this._srcFramebuffer=null,this._dstFramebuffer=null,!1===CR&&(this._init(),CR=!0)}_init(){const e=this.gl;ER={[Gr]:e.REPEAT,[ve]:e.CLAMP_TO_EDGE,[kr]:e.MIRRORED_REPEAT},AR={[B]:e.NEAREST,[$r]:e.NEAREST_MIPMAP_NEAREST,[at]:e.NEAREST_MIPMAP_LINEAR,[de]:e.LINEAR,[nt]:e.LINEAR_MIPMAP_NEAREST,[Z]:e.LINEAR_MIPMAP_LINEAR},wR={[qr]:e.NEVER,[Hr]:e.ALWAYS,[A]:e.LESS,[w]:e.LEQUAL,[Wr]:e.EQUAL,[M]:e.GEQUAL,[C]:e.GREATER,[zr]:e.NOTEQUAL}}getGLTextureType(e){const{gl:t}=this;let r;return r=!0===e.isCubeTexture?t.TEXTURE_CUBE_MAP:!0===e.isArrayTexture||!0===e.isDataArrayTexture||!0===e.isCompressedArrayTexture?t.TEXTURE_2D_ARRAY:!0===e.isData3DTexture?t.TEXTURE_3D:t.TEXTURE_2D,r}getInternalFormat(e,t,r,s,i=!1){const{gl:n,extensions:a}=this;if(null!==e){if(void 0!==n[e])return n[e];d("WebGLBackend: Attempt to use non-existing WebGL internal format '"+e+"'")}let o=t;if(t===n.RED&&(r===n.FLOAT&&(o=n.R32F),r===n.HALF_FLOAT&&(o=n.R16F),r===n.UNSIGNED_BYTE&&(o=n.R8),r===n.UNSIGNED_SHORT&&(o=n.R16),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RED_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.R8UI),r===n.UNSIGNED_SHORT&&(o=n.R16UI),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RG&&(r===n.FLOAT&&(o=n.RG32F),r===n.HALF_FLOAT&&(o=n.RG16F),r===n.UNSIGNED_BYTE&&(o=n.RG8),r===n.UNSIGNED_SHORT&&(o=n.RG16),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RG_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RG8UI),r===n.UNSIGNED_SHORT&&(o=n.RG16UI),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RGB){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGB32F),r===n.HALF_FLOAT&&(o=n.RGB16F),r===n.UNSIGNED_BYTE&&(o=n.RGB8),r===n.UNSIGNED_SHORT&&(o=n.RGB16),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8:n.RGB8),r===n.UNSIGNED_SHORT_5_6_5&&(o=n.RGB565),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGB4),r===n.UNSIGNED_INT_5_9_9_9_REV&&(o=n.RGB9_E5),r===n.UNSIGNED_INT_10F_11F_11F_REV&&(o=n.R11F_G11F_B10F)}if(t===n.RGB_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGB8UI),r===n.UNSIGNED_SHORT&&(o=n.RGB16UI),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I)),t===n.RGBA){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGBA32F),r===n.HALF_FLOAT&&(o=n.RGBA16F),r===n.UNSIGNED_BYTE&&(o=n.RGBA8),r===n.UNSIGNED_SHORT&&(o=n.RGBA16),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8_ALPHA8:n.RGBA8),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGBA4),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1)}return t===n.RGBA_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGBA8UI),r===n.UNSIGNED_SHORT&&(o=n.RGBA16UI),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I)),t===n.DEPTH_COMPONENT&&(r===n.UNSIGNED_SHORT&&(o=n.DEPTH_COMPONENT16),r===n.UNSIGNED_INT&&(o=n.DEPTH_COMPONENT24),r===n.FLOAT&&(o=n.DEPTH_COMPONENT32F)),t===n.DEPTH_STENCIL&&r===n.UNSIGNED_INT_24_8&&(o=n.DEPTH24_STENCIL8),o!==n.R16F&&o!==n.R32F&&o!==n.RG16F&&o!==n.RG32F&&o!==n.RGBA16F&&o!==n.RGBA32F||a.get("EXT_color_buffer_float"),o}setTextureParameters(e,t){const{gl:r,extensions:s,backend:i}=this,n=p.getPrimaries(p.workingColorSpace),a=t.colorSpace===T?null:p.getPrimaries(t.colorSpace),o=t.colorSpace===T||n===a?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,t.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,t.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,o),r.texParameteri(e,r.TEXTURE_WRAP_S,ER[t.wrapS]),r.texParameteri(e,r.TEXTURE_WRAP_T,ER[t.wrapT]),e!==r.TEXTURE_3D&&e!==r.TEXTURE_2D_ARRAY||t.isArrayTexture||r.texParameteri(e,r.TEXTURE_WRAP_R,ER[t.wrapR]),r.texParameteri(e,r.TEXTURE_MAG_FILTER,AR[t.magFilter]);const u=void 0!==t.mipmaps&&t.mipmaps.length>0,l=t.minFilter===de&&u?Z:t.minFilter;if(r.texParameteri(e,r.TEXTURE_MIN_FILTER,AR[l]),t.compareFunction&&(r.texParameteri(e,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(e,r.TEXTURE_COMPARE_FUNC,wR[t.compareFunction])),!0===s.has("EXT_texture_filter_anisotropic")){if(t.magFilter===B)return;if(t.minFilter!==at&&t.minFilter!==Z)return;if(t.type===Q&&!1===s.has("OES_texture_float_linear"))return;if(t.anisotropy>1){const n=s.get("EXT_texture_filter_anisotropic");r.texParameterf(e,n.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,i.getMaxAnisotropy()))}}}createDefaultTexture(e){const{gl:t,backend:r,defaultTextures:s}=this,i=this.getGLTextureType(e);let n=s[i];void 0===n&&(n=t.createTexture(),r.state.bindTexture(i,n),t.texParameteri(i,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(i,t.TEXTURE_MAG_FILTER,t.NEAREST),s[i]=n),r.set(e,{textureGPU:n,glTextureType:i})}createTexture(e,t){const{gl:r,backend:s}=this,{levels:i,width:n,height:a,depth:o}=t,u=s.utils.convert(e.format,e.colorSpace),l=s.utils.convert(e.type),d=this.getInternalFormat(e.internalFormat,u,l,e.colorSpace,e.isVideoTexture),c=r.createTexture(),h=this.getGLTextureType(e);s.state.bindTexture(h,c),this.setTextureParameters(h,e),e.isArrayTexture||e.isDataArrayTexture||e.isCompressedArrayTexture?r.texStorage3D(r.TEXTURE_2D_ARRAY,i,d,n,a,o):e.isData3DTexture?r.texStorage3D(r.TEXTURE_3D,i,d,n,a,o):e.isVideoTexture||r.texStorage2D(h,i,d,n,a),s.set(e,{textureGPU:c,glTextureType:h,glFormat:u,glType:l,glInternalFormat:d})}copyBufferToTexture(e,t){const{gl:r,backend:s}=this,{textureGPU:i,glTextureType:n,glFormat:a,glType:o}=s.get(t),{width:u,height:l}=t.source.data;r.bindBuffer(r.PIXEL_UNPACK_BUFFER,e),s.state.bindTexture(n,i),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.texSubImage2D(n,0,0,0,u,l,a,o,0),r.bindBuffer(r.PIXEL_UNPACK_BUFFER,null),s.state.unbindTexture()}updateTexture(e,t){const{gl:r}=this,{width:s,height:i}=t,{textureGPU:n,glTextureType:a,glFormat:o,glType:u,glInternalFormat:l}=this.backend.get(e);if(!e.isRenderTargetTexture&&void 0!==n)if(this.backend.state.bindTexture(a,n),this.setTextureParameters(a,e),e.isCompressedTexture){const s=e.mipmaps,i=t.image;for(let t=0;t0){const t=Xr(s.width,s.height,e.format,e.type);for(const i of e.layerUpdates){const e=s.data.subarray(i*t/s.data.BYTES_PER_ELEMENT,(i+1)*t/s.data.BYTES_PER_ELEMENT);r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,i,s.width,s.height,1,o,u,e)}e.clearLayerUpdates()}else r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,s.width,s.height,s.depth,o,u,s.data)}else if(e.isData3DTexture){const e=t.image;r.texSubImage3D(r.TEXTURE_3D,0,0,0,0,e.width,e.height,e.depth,o,u,e.data)}else if(e.isVideoTexture)e.update(),r.texImage2D(a,0,l,o,u,t.image);else{const n=e.mipmaps;if(n.length>0)for(let e=0,t=n.length;e0,c=t.renderTarget?t.renderTarget.height:this.backend.getDrawingBufferSize().y;if(d){const r=0!==a||0!==o;let d,h;if(!0===e.isDepthTexture?(d=s.DEPTH_BUFFER_BIT,h=s.DEPTH_ATTACHMENT,t.stencil&&(d|=s.STENCIL_BUFFER_BIT)):(d=s.COLOR_BUFFER_BIT,h=s.COLOR_ATTACHMENT0),r){const e=this.backend.get(t.renderTarget),r=e.framebuffers[t.getCacheKey()],h=e.msaaFrameBuffer;i.bindFramebuffer(s.DRAW_FRAMEBUFFER,r),i.bindFramebuffer(s.READ_FRAMEBUFFER,h);const p=c-o-l;s.blitFramebuffer(a,p,a+u,p+l,a,p,a+u,p+l,d,s.NEAREST),i.bindFramebuffer(s.READ_FRAMEBUFFER,r),i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,p,u,l),i.unbindTexture()}else{const e=s.createFramebuffer();i.bindFramebuffer(s.DRAW_FRAMEBUFFER,e),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,h,s.TEXTURE_2D,n,0),s.blitFramebuffer(0,0,u,l,0,0,u,l,d,s.NEAREST),s.deleteFramebuffer(e)}}else i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,c-l-o,u,l),i.unbindTexture();e.generateMipmaps&&this.generateMipmaps(e),this.backend._setFramebuffer(t)}setupRenderBufferStorage(e,t,r,s=!1){const{gl:i}=this,n=t.renderTarget,{depthTexture:a,depthBuffer:o,stencilBuffer:u,width:l,height:d}=n;if(i.bindRenderbuffer(i.RENDERBUFFER,e),o&&!u){let t=i.DEPTH_COMPONENT24;if(!0===s){this.extensions.get("WEBGL_multisampled_render_to_texture").renderbufferStorageMultisampleEXT(i.RENDERBUFFER,n.samples,t,l,d)}else r>0?(a&&a.isDepthTexture&&a.type===i.FLOAT&&(t=i.DEPTH_COMPONENT32F),i.renderbufferStorageMultisample(i.RENDERBUFFER,r,t,l,d)):i.renderbufferStorage(i.RENDERBUFFER,t,l,d);i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.RENDERBUFFER,e)}else o&&u&&(r>0?i.renderbufferStorageMultisample(i.RENDERBUFFER,r,i.DEPTH24_STENCIL8,l,d):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,l,d),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,e));i.bindRenderbuffer(i.RENDERBUFFER,null)}async copyTextureToBuffer(e,t,r,s,i,n){const{backend:a,gl:o}=this,{textureGPU:u,glFormat:l,glType:d}=this.backend.get(e),c=o.createFramebuffer();a.state.bindFramebuffer(o.READ_FRAMEBUFFER,c);const h=e.isCubeTexture?o.TEXTURE_CUBE_MAP_POSITIVE_X+n:o.TEXTURE_2D;o.framebufferTexture2D(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,h,u,0);const p=this._getTypedArrayType(d),g=s*i*this._getBytesPerTexel(d,l),m=o.createBuffer();o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.bufferData(o.PIXEL_PACK_BUFFER,g,o.STREAM_READ),o.readPixels(t,r,s,i,l,d,0),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),await a.utils._clientWaitAsync();const f=new p(g/p.BYTES_PER_ELEMENT);return o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,f),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),a.state.bindFramebuffer(o.READ_FRAMEBUFFER,null),o.deleteFramebuffer(c),f}_getTypedArrayType(e){const{gl:t}=this;if(e===t.UNSIGNED_BYTE)return Uint8Array;if(e===t.UNSIGNED_SHORT_4_4_4_4)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_5_5_1)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_6_5)return Uint16Array;if(e===t.UNSIGNED_SHORT)return Uint16Array;if(e===t.UNSIGNED_INT)return Uint32Array;if(e===t.HALF_FLOAT)return Uint16Array;if(e===t.FLOAT)return Float32Array;throw new Error(`Unsupported WebGL type: ${e}`)}_getBytesPerTexel(e,t){const{gl:r}=this;let s=0;return e===r.UNSIGNED_BYTE&&(s=1),e!==r.UNSIGNED_SHORT_4_4_4_4&&e!==r.UNSIGNED_SHORT_5_5_5_1&&e!==r.UNSIGNED_SHORT_5_6_5&&e!==r.UNSIGNED_SHORT&&e!==r.HALF_FLOAT||(s=2),e!==r.UNSIGNED_INT&&e!==r.FLOAT||(s=4),t===r.RGBA?4*s:t===r.RGB?3*s:t===r.ALPHA?s:void 0}dispose(){const{gl:e}=this;null!==this._srcFramebuffer&&e.deleteFramebuffer(this._srcFramebuffer),null!==this._dstFramebuffer&&e.deleteFramebuffer(this._dstFramebuffer)}}function BR(e){return e.isDataTexture?e.image.data:"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e:e.data}class FR{constructor(e){this.backend=e,this.gl=this.backend.gl,this.availableExtensions=this.gl.getSupportedExtensions(),this.extensions={}}get(e){let t=this.extensions[e];return void 0===t&&(t=this.gl.getExtension(e),this.extensions[e]=t),t}has(e){return this.availableExtensions.includes(e)}}class LR{constructor(e){this.backend=e,this.maxAnisotropy=null}getMaxAnisotropy(){if(null!==this.maxAnisotropy)return this.maxAnisotropy;const e=this.backend.gl,t=this.backend.extensions;if(!0===t.has("EXT_texture_filter_anisotropic")){const r=t.get("EXT_texture_filter_anisotropic");this.maxAnisotropy=e.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else this.maxAnisotropy=0;return this.maxAnisotropy}}const PR={WEBGL_multi_draw:"WEBGL_multi_draw",WEBGL_compressed_texture_astc:"texture-compression-astc",WEBGL_compressed_texture_etc:"texture-compression-etc2",WEBGL_compressed_texture_etc1:"texture-compression-etc1",WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBGL_compressed_texture_s3tc:"texture-compression-s3tc",EXT_texture_compression_bptc:"texture-compression-bc",EXT_disjoint_timer_query_webgl2:"timestamp-query",OVR_multiview2:"OVR_multiview2"};class DR{constructor(e){this.gl=e.gl,this.extensions=e.extensions,this.info=e.renderer.info,this.mode=null,this.index=0,this.type=null,this.object=null}render(e,t){const{gl:r,mode:s,object:i,type:n,info:a,index:o}=this;0!==o?r.drawElements(s,t,n,e):r.drawArrays(s,e,t),a.update(i,t,1)}renderInstances(e,t,r){const{gl:s,mode:i,type:n,index:a,object:o,info:u}=this;0!==r&&(0!==a?s.drawElementsInstanced(i,t,n,e,r):s.drawArraysInstanced(i,e,t,r),u.update(o,t,r))}renderMultiDraw(e,t,r){const{extensions:s,mode:i,object:n,info:a}=this;if(0===r)return;const o=s.get("WEBGL_multi_draw");if(null===o)for(let s=0;sthis.maxQueries)return v(`WebGLTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryStates.set(t,"inactive"),this.queryOffsets.set(e,t),t}beginQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null==t)return;if(null!==this.activeQuery)return;const r=this.queries[t];if(r)try{"inactive"===this.queryStates.get(t)&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,r),this.activeQuery=t,this.queryStates.set(t,"started"))}catch(e){o("Error in beginQuery:",e),this.activeQuery=null,this.queryStates.set(t,"inactive")}}endQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null!=t&&this.activeQuery===t)try{this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.queryStates.set(t,"ended"),this.activeQuery=null}catch(e){o("Error in endQuery:",e),this.queryStates.set(t,"inactive"),this.activeQuery=null}}async resolveQueriesAsync(){if(!this.trackTimestamp||this.pendingResolve)return this.lastValue;this.pendingResolve=!0;try{const e=new Map;for(const[t,r]of this.queryOffsets){if("ended"===this.queryStates.get(r)){const s=this.queries[r];e.set(t,this.resolveQuery(s))}}if(0===e.size)return this.lastValue;const t={},r=[];for(const[s,i]of e){const e=s.match(/^(.*):f(\d+)$/),n=parseInt(e[2]);!1===r.includes(n)&&r.push(n),void 0===t[n]&&(t[n]=0);const a=await i;this.timestamps.set(s,a),t[n]+=a}const s=t[r[r.length-1]];return this.lastValue=s,this.frames=r,this.currentQueryIndex=0,this.queryOffsets.clear(),this.queryStates.clear(),this.activeQuery=null,s}catch(e){return o("Error resolving queries:",e),this.lastValue}finally{this.pendingResolve=!1}}async resolveQuery(e){return new Promise(t=>{if(this.isDisposed)return void t(this.lastValue);let r,s=!1;const i=e=>{s||(s=!0,r&&(clearTimeout(r),r=null),t(e))},n=()=>{if(this.isDisposed)i(this.lastValue);else try{if(this.gl.getParameter(this.ext.GPU_DISJOINT_EXT))return void i(this.lastValue);if(!this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE))return void(r=setTimeout(n,1));const s=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);t(Number(s)/1e6)}catch(e){o("Error checking query:",e),t(this.lastValue)}};n()})}dispose(){if(!this.isDisposed&&(this.isDisposed=!0,this.trackTimestamp)){for(const e of this.queries)this.gl.deleteQuery(e);this.queries=[],this.queryStates.clear(),this.queryOffsets.clear(),this.lastValue=0,this.activeQuery=null}}}class OR extends bR{constructor(e={}){super(e),this.isWebGLBackend=!0,this.attributeUtils=null,this.extensions=null,this.capabilities=null,this.textureUtils=null,this.bufferRenderer=null,this.gl=null,this.state=null,this.utils=null,this.vaoCache={},this.transformFeedbackCache={},this.discard=!1,this.disjoint=null,this.parallel=null,this._currentContext=null,this._knownBindings=new WeakSet,this._supportsInvalidateFramebuffer="undefined"!=typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),this._xrFramebuffer=null}init(e){super.init(e);const t=this.parameters,r={antialias:e.currentSamples>0,alpha:!0,depth:e.depth,stencil:e.stencil},s=void 0!==t.context?t.context:e.domElement.getContext("webgl2",r);function i(t){t.preventDefault();const r={api:"WebGL",message:t.statusMessage||"Unknown reason",reason:null,originalEvent:t};e.onDeviceLost(r)}this._onContextLost=i,e.domElement.addEventListener("webglcontextlost",i,!1),this.gl=s,this.extensions=new FR(this),this.capabilities=new LR(this),this.attributeUtils=new NR(this),this.textureUtils=new MR(this),this.bufferRenderer=new DR(this),this.state=new SR(this),this.utils=new RR(this),this.extensions.get("EXT_color_buffer_float"),this.extensions.get("WEBGL_clip_cull_distance"),this.extensions.get("OES_texture_float_linear"),this.extensions.get("EXT_color_buffer_half_float"),this.extensions.get("WEBGL_multisampled_render_to_texture"),this.extensions.get("WEBGL_render_shared_exponent"),this.extensions.get("WEBGL_multi_draw"),this.extensions.get("OVR_multiview2"),this.extensions.get("EXT_clip_control"),this.disjoint=this.extensions.get("EXT_disjoint_timer_query_webgl2"),this.parallel=this.extensions.get("KHR_parallel_shader_compile"),this.drawBuffersIndexedExt=this.extensions.get("OES_draw_buffers_indexed"),!0===t.reversedDepthBuffer&&this.extensions.has("EXT_clip_control")&&this.state.setReversedDepth(!0)}get coordinateSystem(){return c}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}async makeXRCompatible(){!0!==this.gl.getContextAttributes().xrCompatible&&await this.gl.makeXRCompatible()}setXRTarget(e){this._xrFramebuffer=e}setXRRenderTargetTextures(e,t,r=null){const s=this.gl;if(this.set(e.texture,{textureGPU:t,glInternalFormat:s.RGBA8}),null!==r){const t=e.stencilBuffer?s.DEPTH24_STENCIL8:s.DEPTH_COMPONENT24;this.set(e.depthTexture,{textureGPU:r,glInternalFormat:t}),!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!0===e._autoAllocateDepthBuffer&&!1===e.multiview&&d("WebGLBackend: Render-to-texture extension was disabled because an external texture was provided"),e._autoAllocateDepthBuffer=!1}}initTimestampQuery(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e]||(this.timestampQueryPool[e]=new IR(this.gl,e,2048));const r=this.timestampQueryPool[e];null!==r.allocateQueriesForContext(t)&&r.beginQuery(t)}prepareTimestampBuffer(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e].endQuery(t)}getContext(){return this.gl}beginRender(e){const{state:t}=this,r=this.get(e);if(e.viewport)this.updateViewport(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.viewport(0,0,e,r)}if(e.scissor)this.updateScissor(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.scissor(0,0,e,r)}this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e)),r.previousContext=this._currentContext,this._currentContext=e,this._setFramebuffer(e),this.clear(e.clearColor,e.clearDepth,e.clearStencil,e,!1);const s=e.occlusionQueryCount;s>0&&(r.currentOcclusionQueries=r.occlusionQueries,r.currentOcclusionQueryObjects=r.occlusionQueryObjects,r.lastOcclusionObject=null,r.occlusionQueries=new Array(s),r.occlusionQueryObjects=new Array(s),r.occlusionQueryIndex=0)}finishRender(e){const{gl:t,state:r}=this,s=this.get(e),i=s.previousContext;r.resetVertexState();const n=e.occlusionQueryCount;n>0&&(n>s.occlusionQueryIndex&&t.endQuery(t.ANY_SAMPLES_PASSED),this.resolveOccludedAsync(e));const a=e.textures;if(null!==a)for(let e=0;e{let a=0;for(let t=0;t{t.isBatchedMesh?null!==t._multiDrawInstances?(v("WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),b.renderMultiDrawInstances(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount,t._multiDrawInstances)):this.hasFeature("WEBGL_multi_draw")?b.renderMultiDraw(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount):v("WebGLBackend: WEBGL_multi_draw not supported."):T>1?b.renderInstances(_,x,T):b.render(_,x)};if(!0===e.camera.isArrayCamera&&e.camera.cameras.length>0&&!1===e.camera.isMultiViewCamera){const r=this.get(e.camera),s=e.camera.cameras,i=e.getBindingGroup("cameraIndex").bindings[0];if(void 0===r.indexesGPU||r.indexesGPU.length!==s.length){const e=new Uint32Array([0,0,0,0]),t=[];for(let r=0,i=s.length;r{const i=this.parallel,n=()=>{r.getProgramParameter(a,i.COMPLETION_STATUS_KHR)?(this._completeCompile(e,s),t()):requestAnimationFrame(n)};n()});return void t.push(i)}this._completeCompile(e,s)}_handleSource(e,t){const r=e.split("\n"),s=[],i=Math.max(t-6,0),n=Math.min(t+6,r.length);for(let e=i;e":" "} ${i}: ${r[e]}`)}return s.join("\n")}_getShaderErrors(e,t,r){const s=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||"").trim();if(s&&""===i)return"";const n=/ERROR: 0:(\d+)/.exec(i);if(n){const s=parseInt(n[1]);return r.toUpperCase()+"\n\n"+i+"\n\n"+this._handleSource(e.getShaderSource(t),s)}return i}_logProgramError(e,t,r){if(this.renderer.debug.checkShaderErrors){const s=this.gl,i=(s.getProgramInfoLog(e)||"").trim();if(!1===s.getProgramParameter(e,s.LINK_STATUS))if("function"==typeof this.renderer.debug.onShaderError)this.renderer.debug.onShaderError(s,e,r,t);else{const n=this._getShaderErrors(s,r,"vertex"),a=this._getShaderErrors(s,t,"fragment");o("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(e,s.VALIDATE_STATUS)+"\n\nProgram Info Log: "+i+"\n"+n+"\n"+a)}else""!==i&&d("WebGLProgram: Program Info Log:",i)}}_completeCompile(e,t){const{state:r,gl:s}=this,i=this.get(t),{programGPU:n,fragmentShader:a,vertexShader:o}=i;!1===s.getProgramParameter(n,s.LINK_STATUS)&&this._logProgramError(n,a,o),r.useProgram(n);const u=e.getBindings();this._setupBindings(u,n),this.set(t,{programGPU:n,pipeline:n})}createComputePipeline(e,t){const{state:r,gl:s}=this,i={stage:"fragment",code:"#version 300 es\nprecision highp float;\nvoid main() {}"};this.createProgram(i);const{computeProgram:n}=e,a=s.createProgram(),o=this.get(i).shaderGPU,u=this.get(n).shaderGPU,l=n.transforms,d=[],c=[];for(let e=0;ePR[t]===e),r=this.extensions;for(let e=0;e1,h=!0===i.isXRRenderTarget,p=!0===h&&!0===i._hasExternalTextures;let g=n.msaaFrameBuffer,m=n.depthRenderbuffer;const f=this.extensions.get("WEBGL_multisampled_render_to_texture"),y=this.extensions.get("OVR_multiview2"),b=this._useMultisampledExtension(i),x=Xy(e);let T;if(l?(n.cubeFramebuffers||(n.cubeFramebuffers={}),T=n.cubeFramebuffers[x]):h&&!1===p?T=this._xrFramebuffer:(n.framebuffers||(n.framebuffers={}),T=n.framebuffers[x]),void 0===T){T=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,T);const s=e.textures,o=[];if(l){n.cubeFramebuffers[x]=T;const{textureGPU:e}=this.get(s[0]),r=this.renderer._activeCubeFace,i=this.renderer._activeMipmapLevel;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,e,i)}else{n.framebuffers[x]=T;for(let r=0;r0&&!1===b&&!i.multiview){if(void 0===g){const s=[];g=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,g);const i=[],l=e.textures;for(let r=0;r0&&!1===this._useMultisampledExtension(s)){const n=i.framebuffers[e.getCacheKey()];let a=t.COLOR_BUFFER_BIT;s.resolveDepthBuffer&&(s.depthBuffer&&(a|=t.DEPTH_BUFFER_BIT),s.stencilBuffer&&s.resolveStencilBuffer&&(a|=t.STENCIL_BUFFER_BIT));const o=i.msaaFrameBuffer,u=i.msaaRenderbuffers,l=e.textures,d=l.length>1;if(r.bindFramebuffer(t.READ_FRAMEBUFFER,o),r.bindFramebuffer(t.DRAW_FRAMEBUFFER,n),d)for(let e=0;e0&&!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!1!==e._autoAllocateDepthBuffer}dispose(){null!==this.textureUtils&&this.textureUtils.dispose();const e=this.extensions.get("WEBGL_lose_context");e&&e.loseContext(),this.renderer.domElement.removeEventListener("webglcontextlost",this._onContextLost)}}const VR="point-list",kR="line-list",GR="line-strip",$R="triangle-list",zR="undefined"!=typeof self&&self.GPUShaderStage?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4},WR="never",HR="less",qR="equal",jR="less-equal",XR="greater",KR="not-equal",QR="greater-equal",YR="always",ZR="store",JR="load",eE="clear",tE="ccw",rE="cw",sE="none",iE="back",nE="uint16",aE="uint32",oE="r8unorm",uE="r8snorm",lE="r8uint",dE="r8sint",cE="r16uint",hE="r16sint",pE="r16float",gE="rg8unorm",mE="rg8snorm",fE="rg8uint",yE="rg8sint",bE="r32uint",xE="r32sint",TE="r32float",_E="rg16uint",vE="rg16sint",NE="rg16float",SE="rgba8unorm",RE="rgba8unorm-srgb",EE="rgba8snorm",AE="rgba8uint",wE="rgba8sint",CE="bgra8unorm",ME="bgra8unorm-srgb",BE="rgb9e5ufloat",FE="rgb10a2unorm",LE="rg11b10ufloat",PE="rg32uint",DE="rg32sint",UE="rg32float",IE="rgba16uint",OE="rgba16sint",VE="rgba16float",kE="rgba32uint",GE="rgba32sint",$E="rgba32float",zE="depth16unorm",WE="depth24plus",HE="depth24plus-stencil8",qE="depth32float",jE="depth32float-stencil8",XE="bc1-rgba-unorm",KE="bc1-rgba-unorm-srgb",QE="bc2-rgba-unorm",YE="bc2-rgba-unorm-srgb",ZE="bc3-rgba-unorm",JE="bc3-rgba-unorm-srgb",eA="bc4-r-unorm",tA="bc4-r-snorm",rA="bc5-rg-unorm",sA="bc5-rg-snorm",iA="bc6h-rgb-ufloat",nA="bc6h-rgb-float",aA="bc7-rgba-unorm",oA="bc7-rgba-unorm-srgb",uA="etc2-rgb8unorm",lA="etc2-rgb8unorm-srgb",dA="etc2-rgb8a1unorm",cA="etc2-rgb8a1unorm-srgb",hA="etc2-rgba8unorm",pA="etc2-rgba8unorm-srgb",gA="eac-r11unorm",mA="eac-r11snorm",fA="eac-rg11unorm",yA="eac-rg11snorm",bA="astc-4x4-unorm",xA="astc-4x4-unorm-srgb",TA="astc-5x4-unorm",_A="astc-5x4-unorm-srgb",vA="astc-5x5-unorm",NA="astc-5x5-unorm-srgb",SA="astc-6x5-unorm",RA="astc-6x5-unorm-srgb",EA="astc-6x6-unorm",AA="astc-6x6-unorm-srgb",wA="astc-8x5-unorm",CA="astc-8x5-unorm-srgb",MA="astc-8x6-unorm",BA="astc-8x6-unorm-srgb",FA="astc-8x8-unorm",LA="astc-8x8-unorm-srgb",PA="astc-10x5-unorm",DA="astc-10x5-unorm-srgb",UA="astc-10x6-unorm",IA="astc-10x6-unorm-srgb",OA="astc-10x8-unorm",VA="astc-10x8-unorm-srgb",kA="astc-10x10-unorm",GA="astc-10x10-unorm-srgb",$A="astc-12x10-unorm",zA="astc-12x10-unorm-srgb",WA="astc-12x12-unorm",HA="astc-12x12-unorm-srgb",qA="clamp-to-edge",jA="repeat",XA="mirror-repeat",KA="linear",QA="nearest",YA="zero",ZA="one",JA="src",ew="one-minus-src",tw="src-alpha",rw="one-minus-src-alpha",sw="dst",iw="one-minus-dst",nw="dst-alpha",aw="one-minus-dst-alpha",ow="src-alpha-saturated",uw="constant",lw="one-minus-constant",dw="add",cw="subtract",hw="reverse-subtract",pw="min",gw="max",mw=0,fw=15,yw="keep",bw="zero",xw="replace",Tw="invert",_w="increment-clamp",vw="decrement-clamp",Nw="increment-wrap",Sw="decrement-wrap",Rw="storage",Ew="read-only-storage",Aw="write-only",ww="read-only",Cw="read-write",Mw="non-filtering",Bw="comparison",Fw="float",Lw="unfilterable-float",Pw="depth",Dw="sint",Uw="uint",Iw="2d",Ow="3d",Vw="2d",kw="2d-array",Gw="cube",$w="3d",zw="all",Ww="vertex",Hw="instance",qw={CoreFeaturesAndLimits:"core-features-and-limits",DepthClipControl:"depth-clip-control",Depth32FloatStencil8:"depth32float-stencil8",TextureCompressionBC:"texture-compression-bc",TextureCompressionBCSliced3D:"texture-compression-bc-sliced-3d",TextureCompressionETC2:"texture-compression-etc2",TextureCompressionASTC:"texture-compression-astc",TextureCompressionASTCSliced3D:"texture-compression-astc-sliced-3d",TimestampQuery:"timestamp-query",IndirectFirstInstance:"indirect-first-instance",ShaderF16:"shader-f16",RG11B10UFloat:"rg11b10ufloat-renderable",BGRA8UNormStorage:"bgra8unorm-storage",Float32Filterable:"float32-filterable",Float32Blendable:"float32-blendable",ClipDistances:"clip-distances",DualSourceBlending:"dual-source-blending",Subgroups:"subgroups",TextureFormatsTier1:"texture-formats-tier1",TextureFormatsTier2:"texture-formats-tier2"},jw={"texture-compression-s3tc":"texture-compression-bc","texture-compression-etc1":"texture-compression-etc2"};class Xw extends rR{constructor(e,t,r){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class Kw extends KS{constructor(e,t){super(e,t?t.array:null),this._attribute=t,this.isStorageBuffer=!0}get attribute(){return this._attribute}}let Qw=0;class Yw extends Kw{constructor(e,t){super("StorageBuffer_"+Qw++,e?e.value:null),this.nodeUniform=e,this.access=e?e.access:si.READ_WRITE,this.groupNode=t}get attribute(){return this.nodeUniform.value}get buffer(){return this.nodeUniform.value.array}}class Zw extends _y{constructor(e){super(),this.device=e;this.mipmapSampler=e.createSampler({minFilter:KA}),this.flipYSampler=e.createSampler({minFilter:QA}),this.flipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(this.flipUniformBuffer,0,new Uint32Array([1])),this.noFlipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM}),this.transferPipelines={},this.mipmapShaderModule=e.createShaderModule({label:"mipmap",code:"\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4f,\n\t@location( 0 ) vTex : vec2f,\n\t@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,\n};\n\n@group( 0 ) @binding ( 2 )\nvar flipY: u32;\n\n@vertex\nfn mainVS(\n\t\t@builtin( vertex_index ) vertexIndex : u32,\n\t\t@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array(\n\t\tvec2f( -1, -1 ),\n\t\tvec2f( -1, 3 ),\n\t\tvec2f( 3, -1 ),\n\t);\n\n\tlet p = pos[ vertexIndex ];\n\tlet mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );\n\tVarys.vTex = p * mult + vec2f( 0.5 );\n\tVarys.Position = vec4f( p, 0, 1 );\n\tVarys.vBaseArrayLayer = instanceIndex;\n\n\treturn Varys;\n\n}\n\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img2d : texture_2d;\n\n@fragment\nfn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2d, imgSampler, Varys.vTex );\n\n}\n\n@group( 0 ) @binding( 1 )\nvar img2dArray : texture_2d_array;\n\n@fragment\nfn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );\n\n}\n\nconst faceMat = array(\n mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1 ), // pos-x\n mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1 ), // neg-x\n mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1 ), // pos-y\n mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1 ), // neg-y\n mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1 ), // pos-z\n mat3x3f( -2, 0, 0, 0, -2, 0, 1, 1, -1 ), // neg-z\n);\n\n@group( 0 ) @binding( 1 )\nvar imgCube : texture_cube;\n\n@fragment\nfn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );\n\n}\n"})}getTransferPipeline(e,t){const r=`${e}-${t=t||"2d-array"}`;let s=this.transferPipelines[r];return void 0===s&&(s=this.device.createRenderPipeline({label:`mipmap-${e}-${t}`,vertex:{module:this.mipmapShaderModule},fragment:{module:this.mipmapShaderModule,entryPoint:`main_${t.replace("-","_")}`,targets:[{format:e}]},layout:"auto"}),this.transferPipelines[r]=s),s}flipY(e,t,r=0){const s=t.format,{width:i,height:n}=t.size,a=this.device.createTexture({size:{width:i,height:n},format:s,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}),o=this.getTransferPipeline(s,e.textureBindingViewDimension),u=this.getTransferPipeline(s,a.textureBindingViewDimension),l=this.device.createCommandEncoder({}),d=(e,t,r,s,i,n)=>{const a=e.getBindGroupLayout(0),o=this.device.createBindGroup({layout:a,entries:[{binding:0,resource:this.flipYSampler},{binding:1,resource:t.createView({dimension:t.textureBindingViewDimension||"2d-array",baseMipLevel:0,mipLevelCount:1})},{binding:2,resource:{buffer:n?this.flipUniformBuffer:this.noFlipUniformBuffer}}]}),u=l.beginRenderPass({colorAttachments:[{view:s.createView({dimension:"2d",baseMipLevel:0,mipLevelCount:1,baseArrayLayer:i,arrayLayerCount:1}),loadOp:eE,storeOp:ZR}]});u.setPipeline(e),u.setBindGroup(0,o),u.draw(3,1,0,r),u.end()};d(o,e,r,a,0,!1),d(u,a,0,e,r,!0),this.device.queue.submit([l.finish()]),a.destroy()}generateMipmaps(e,t=null){const r=this.get(e),s=r.layers||this._mipmapCreateBundles(e),i=t||this.device.createCommandEncoder({label:"mipmapEncoder"});this._mipmapRunBundles(i,s),null===t&&this.device.queue.submit([i.finish()]),r.layers=s}_mipmapCreateBundles(e){const t=e.textureBindingViewDimension||"2d-array",r=this.getTransferPipeline(e.format,t),s=r.getBindGroupLayout(0),i=[];for(let n=1;n0)for(let t=0,n=s.length;t0){for(const s of e.layerUpdates)this._copyBufferToTexture(t.image,r.texture,i,s,e.flipY,s);e.clearLayerUpdates()}else for(let s=0;s0)for(let t=0,n=s.length;t0?e.width:r.size.width,l=a>0?e.height:r.size.height;try{o.queue.copyExternalImageToTexture({source:e,flipY:i},{texture:t,mipLevel:a,origin:{x:0,y:0,z:s},premultipliedAlpha:n},{width:u,height:l,depthOrArrayLayers:1})}catch(e){}}_getPassUtils(){let e=this._passUtils;return null===e&&(this._passUtils=e=new Zw(this.backend.device)),e}_generateMipmaps(e,t=null){this._getPassUtils().generateMipmaps(e,t)}_flipY(e,t,r=0){this._getPassUtils().flipY(e,t,r)}_copyBufferToTexture(e,t,r,s,i,n=0,a=0){const o=this.backend.device,u=e.data,l=this._getBytesPerTexel(r.format),d=e.width*l;o.queue.writeTexture({texture:t,mipLevel:a,origin:{x:0,y:0,z:s}},u,{offset:e.width*e.height*l*n,bytesPerRow:d},{width:e.width,height:e.height,depthOrArrayLayers:1}),!0===i&&this._flipY(t,r,s)}_copyCompressedBufferToTexture(e,t,r){const s=this.backend.device,i=this._getBlockData(r.format),n=r.size.depthOrArrayLayers>1;for(let a=0;a]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i,iC=/([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi,nC={f32:"float",i32:"int",u32:"uint",bool:"bool","vec2":"vec2","vec2":"ivec2","vec2":"uvec2","vec2":"bvec2",vec2f:"vec2",vec2i:"ivec2",vec2u:"uvec2",vec2b:"bvec2","vec3":"vec3","vec3":"ivec3","vec3":"uvec3","vec3":"bvec3",vec3f:"vec3",vec3i:"ivec3",vec3u:"uvec3",vec3b:"bvec3","vec4":"vec4","vec4":"ivec4","vec4":"uvec4","vec4":"bvec4",vec4f:"vec4",vec4i:"ivec4",vec4u:"uvec4",vec4b:"bvec4","mat2x2":"mat2",mat2x2f:"mat2","mat3x3":"mat3",mat3x3f:"mat3","mat4x4":"mat4",mat4x4f:"mat4",sampler:"sampler",texture_1d:"texture",texture_2d:"texture",texture_2d_array:"texture",texture_multisampled_2d:"cubeTexture",texture_depth_2d:"depthTexture",texture_depth_2d_array:"depthTexture",texture_depth_multisampled_2d:"depthTexture",texture_depth_cube:"depthTexture",texture_depth_cube_array:"depthTexture",texture_3d:"texture3D",texture_cube:"cubeTexture",texture_cube_array:"cubeTexture",texture_storage_1d:"storageTexture",texture_storage_2d:"storageTexture",texture_storage_2d_array:"storageTexture",texture_storage_3d:"storageTexture"};class aC extends lS{constructor(e){const{type:t,inputs:r,name:s,inputsCode:i,blockCode:n,outputType:a}=(e=>{const t=(e=e.trim()).match(sC);if(null!==t&&4===t.length){const r=t[2],s=[];let i=null;for(;null!==(i=iC.exec(r));)s.push({name:i[1],type:i[2]});const n=[];for(let e=0;e "+this.outputType:"";return`fn ${e} ( ${this.inputsCode.trim()} ) ${t}`+this.blockCode}}class oC extends uS{parseFunction(e){return new aC(e)}}const uC={[si.READ_ONLY]:"read",[si.WRITE_ONLY]:"write",[si.READ_WRITE]:"read_write"},lC={[Gr]:"repeat",[ve]:"clamp",[kr]:"mirror"},dC={vertex:zR.VERTEX,fragment:zR.FRAGMENT,compute:zR.COMPUTE},cC={instance:!0,swizzleAssign:!1,storageBuffer:!0},hC={"^^":"tsl_xor"},pC={float:"f32",int:"i32",uint:"u32",bool:"bool",color:"vec3",vec2:"vec2",ivec2:"vec2",uvec2:"vec2",bvec2:"vec2",vec3:"vec3",ivec3:"vec3",uvec3:"vec3",bvec3:"vec3",vec4:"vec4",ivec4:"vec4",uvec4:"vec4",bvec4:"vec4",mat2:"mat2x2",mat3:"mat3x3",mat4:"mat4x4"},gC={},mC={tsl_xor:new pT("fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }"),mod_float:new pT("fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }"),mod_vec2:new pT("fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }"),mod_vec3:new pT("fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }"),mod_vec4:new pT("fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }"),equals_bool:new pT("fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }"),equals_bvec2:new pT("fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }"),equals_bvec3:new pT("fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }"),equals_bvec4:new pT("fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }"),repeatWrapping_float:new pT("fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }"),mirrorWrapping_float:new pT("fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }"),clampWrapping_float:new pT("fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }"),biquadraticTexture:new pT("\nfn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n"),biquadraticTextureArray:new pT("\nfn tsl_biquadraticTexture_array( map : texture_2d_array, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n")},fC={dFdx:"dpdx",dFdy:"- dpdy",mod_float:"tsl_mod_float",mod_vec2:"tsl_mod_vec2",mod_vec3:"tsl_mod_vec3",mod_vec4:"tsl_mod_vec4",equals_bool:"tsl_equals_bool",equals_bvec2:"tsl_equals_bvec2",equals_bvec3:"tsl_equals_bvec3",equals_bvec4:"tsl_equals_bvec4",inversesqrt:"inverseSqrt",bitcast:"bitcast",floatpack_snorm_2x16:"pack2x16snorm",floatpack_unorm_2x16:"pack2x16unorm",floatpack_float16_2x16:"pack2x16float",floatunpack_snorm_2x16:"unpack2x16snorm",floatunpack_unorm_2x16:"unpack2x16unorm",floatunpack_float16_2x16:"unpack2x16float"};let yC="";!0!==("undefined"!=typeof navigator&&/Firefox|Deno/g.test(navigator.userAgent))&&(yC+="diagnostic( off, derivative_uniformity );\n");class bC extends jN{constructor(e,t){super(e,t,new oC),this.uniformGroups={},this.uniformGroupsBindings={},this.builtins={},this.directives={},this.scopedArrays=new Map}_generateTextureSample(e,t,r,s,i,n=this.shaderStage){return"fragment"===n?s?i?`textureSample( ${t}, ${t}_sampler, ${r}, ${s}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r}, ${s} )`:i?`textureSample( ${t}, ${t}_sampler, ${r}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r} )`:this.generateTextureSampleLevel(e,t,r,"0",s)}generateTextureSampleLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateWrapFunction(e){const t=`tsl_coord_${lC[e.wrapS]}S_${lC[e.wrapT]}_${e.is3DTexture||e.isData3DTexture?"3d":"2d"}T`;let r=gC[t];if(void 0===r){const s=[],i=e.is3DTexture||e.isData3DTexture?"vec3f":"vec2f";let n=`fn ${t}( coord : ${i} ) -> ${i} {\n\n\treturn ${i}(\n`;const a=(e,t)=>{e===Gr?(s.push(mC.repeatWrapping_float),n+=`\t\ttsl_repeatWrapping_float( coord.${t} )`):e===ve?(s.push(mC.clampWrapping_float),n+=`\t\ttsl_clampWrapping_float( coord.${t} )`):e===kr?(s.push(mC.mirrorWrapping_float),n+=`\t\ttsl_mirrorWrapping_float( coord.${t} )`):(n+=`\t\tcoord.${t}`,d(`WebGPURenderer: Unsupported texture wrap type "${e}" for vertex shader.`))};a(e.wrapS,"x"),n+=",\n",a(e.wrapT,"y"),(e.is3DTexture||e.isData3DTexture)&&(n+=",\n",a(e.wrapR,"z")),n+="\n\t);\n\n}\n",gC[t]=r=new pT(n,s)}return r.build(this),t}generateArrayDeclaration(e,t){return`array< ${this.getType(e)}, ${t} >`}generateTextureDimension(e,t,r){const s=this.getDataFromNode(e,this.shaderStage,this.globalCache);void 0===s.dimensionsSnippet&&(s.dimensionsSnippet={});let i=s.dimensionsSnippet[r];if(void 0===s.dimensionsSnippet[r]){let n,a;const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(e),u=o>1;a=e.is3DTexture||e.isData3DTexture?"vec3":"vec2",n=u||e.isStorageTexture?t:`${t}${r?`, u32( ${r} )`:""}`,i=new wu(new ml(`textureDimensions( ${n} )`,a)),s.dimensionsSnippet[r]=i,(e.isArrayTexture||e.isDataArrayTexture||e.is3DTexture||e.isData3DTexture)&&(s.arrayLayerCount=new wu(new ml(`textureNumLayers(${t})`,"u32"))),e.isTextureCube&&(s.cubeFaceCount=new wu(new ml("6u","u32")))}return i.build(this)}generateFilteredTexture(e,t,r,s,i="0u",n){const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,i);return s&&(r=`${r} + vec2(${s}) / ${o}`),n?(this._include("biquadraticTextureArray"),`tsl_biquadraticTexture_array( ${t}, ${a}( ${r} ), ${o}, u32( ${n} ), u32( ${i} ) )`):(this._include("biquadraticTexture"),`tsl_biquadraticTexture( ${t}, ${a}( ${r} ), ${o}, u32( ${i} ) )`)}generateTextureLod(e,t,r,s,i,n="0u"){if(!0===e.isCubeTexture){i&&(r=`${r} + vec3(${i})`);return`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${e.isDepthTexture?"u32":"f32"}( ${n} ) )`}const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,n),u=e.is3DTexture||e.isData3DTexture?"vec3":"vec2";i&&(r=`${r} + ${u}(${i}) / ${u}( ${o} )`);return r=`${u}( clamp( floor( ${a}( ${r} ) * ${u}( ${o} ) ), ${`${u}( 0 )`}, ${`${u}( ${o} - ${"vec3"===u?"vec3( 1, 1, 1 )":"vec2( 1, 1 )"} )`} ) )`,this.generateTextureLoad(e,t,r,n,s,null)}generateStorageTextureLoad(e,t,r,s,i,n){let a;return n&&(r=`${r} + ${n}`),a=i?`textureLoad( ${t}, ${r}, ${i} )`:`textureLoad( ${t}, ${r} )`,a}generateTextureLoad(e,t,r,s,i,n){let a;return null===s&&(s="0u"),n&&(r=`${r} + ${n}`),i?a=`textureLoad( ${t}, ${r}, ${i}, u32( ${s} ) )`:(a=`textureLoad( ${t}, ${r}, u32( ${s} ) )`,this.renderer.backend.compatibilityMode&&e.isDepthTexture&&(a+=".x")),a}generateTextureStore(e,t,r,s,i){let n;return n=s?`textureStore( ${t}, ${r}, ${s}, ${i} )`:`textureStore( ${t}, ${r}, ${i} )`,n}isSampleCompare(e){return!0===e.isDepthTexture&&null!==e.compareFunction&&this.renderer.hasCompatibility(E.TEXTURE_COMPARE)}isUnfilterable(e){return"float"!==this.getComponentTypeFromTexture(e)||!this.isAvailable("float32Filterable")&&!0===e.isDataTexture&&e.type===Q||!1===this.isSampleCompare(e)&&e.minFilter===B&&e.magFilter===B||this.renderer.backend.utils.getTextureSampleData(e).primarySamples>1}generateTexture(e,t,r,s,i,n=this.shaderStage){let a=null;return a=this.isUnfilterable(e)?this.generateTextureLod(e,t,r,s,i,"0",n):this._generateTextureSample(e,t,r,s,i,n),a}generateTextureGrad(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]} )`:n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]} )`;o(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${a} shader.`)}generateTextureCompare(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return!0===e.isDepthTexture&&!0===e.isArrayTexture?n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${a} shader.`)}generateTextureLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateTextureBias(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${a} shader.`)}getPropertyName(e,t=this.shaderStage){if(!0===e.isNodeVarying&&!0===e.needsInterpolation){if("vertex"===t)return`varyings.${e.name}`}else if(!0===e.isNodeUniform){const t=e.name,r=e.type;return"texture"===r||"cubeTexture"===r||"cubeDepthTexture"===r||"storageTexture"===r||"texture3D"===r?t:"buffer"===r||"storageBuffer"===r||"indirectStorageBuffer"===r?this.isCustomStruct(e)?t:t+".value":e.groupNode.name+"."+t}return super.getPropertyName(e)}getOutputStructName(){return"output"}getFunctionOperator(e){const t=hC[e];return void 0!==t?(this._include(t),t):null}getNodeAccess(e,t){return"compute"!==t?!0===e.isAtomic?(d("WebGPURenderer: Atomic operations are only supported in compute shaders."),si.READ_WRITE):si.READ_ONLY:e.access}getStorageAccess(e,t){return uC[this.getNodeAccess(e,t)]}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);if(void 0===n.uniformGPU){let a;const o=e.groupNode,u=o.name,l=this.getBindGroupArray(u,r);if("texture"===t||"cubeTexture"===t||"cubeDepthTexture"===t||"storageTexture"===t||"texture3D"===t){let s=null;const n=this.getNodeAccess(e,r);"texture"===t||"storageTexture"===t?s=!0===e.value.is3DTexture?new oR(i.name,i.node,o,n):new nR(i.name,i.node,o,n):"cubeTexture"===t||"cubeDepthTexture"===t?s=new aR(i.name,i.node,o,n):"texture3D"===t&&(s=new oR(i.name,i.node,o,n)),s.store=!0===e.isStorageTextureNode,s.mipLevel=s.store?e.mipLevel:0,s.setVisibility(dC[r]);if(!0===e.value.isCubeTexture||!1===this.isUnfilterable(e.value)&&!1===s.store){const e=new Xw(`${i.name}_sampler`,i.node,o);e.setVisibility(dC[r]),l.push(e,s),a=[e,s]}else l.push(s),a=[s]}else if("buffer"===t||"storageBuffer"===t||"indirectStorageBuffer"===t){const n=this.getSharedDataFromNode(e);let u=n.buffer;if(void 0===u){u=new("buffer"===t?ZS:Yw)(e,o),n.buffer=u}u.setVisibility(u.getVisibility()|dC[r]),l.push(u),a=u,i.name=s||"NodeBuffer_"+i.id}else{let e=this.uniformGroups[u];void 0===e&&(e=new tR(u,o),e.setVisibility(zR.VERTEX|zR.FRAGMENT|zR.COMPUTE),this.uniformGroups[u]=e),-1===l.indexOf(e)&&l.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}getBuiltin(e,t,r,s=this.shaderStage){const i=this.builtins[s]||(this.builtins[s]=new Map);return!1===i.has(e)&&i.set(e,{name:e,property:t,type:r}),t}hasBuiltin(e,t=this.shaderStage){return void 0!==this.builtins[t]&&this.builtins[t].has(e)}getVertexIndex(){return"vertex"===this.shaderStage?this.getBuiltin("vertex_index","vertexIndex","u32","attribute"):"vertexIndex"}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(e.name+" : "+this.getType(e.type));let i=`fn ${t.name}( ${s.join(", ")} ) -> ${this.getType(t.type)} {\n${r.vars}\n${r.code}\n`;return r.result&&(i+=`\treturn ${r.result};\n`),i+="\n}\n",i}getInstanceIndex(){return"vertex"===this.shaderStage?this.getBuiltin("instance_index","instanceIndex","u32","attribute"):"instanceIndex"}getInvocationLocalIndex(){return this.getBuiltin("local_invocation_index","invocationLocalIndex","u32","attribute")}getSubgroupSize(){return this.enableSubGroups(),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute")}getInvocationSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_invocation_id","invocationSubgroupIndex","u32","attribute")}getSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_id","subgroupIndex","u32","attribute")}getDrawIndex(){return null}getFrontFacing(){return this.getBuiltin("front_facing","isFront","bool")}getFragCoord(){return this.getBuiltin("position","fragCoord","vec4")+".xy"}getFragDepth(){return"output."+this.getBuiltin("frag_depth","depth","f32","output")}getClipDistance(){return"varyings.hw_clip_distances"}isFlipY(){return!1}enableDirective(e,t=this.shaderStage){(this.directives[t]||(this.directives[t]=new Set)).add(e)}getDirectives(e){const t=[],r=this.directives[e];if(void 0!==r)for(const e of r)t.push(`enable ${e};`);return t.join("\n")}enableSubGroups(){this.enableDirective("subgroups")}enableSubgroupsF16(){this.enableDirective("subgroups-f16")}enableClipDistances(){this.enableDirective("clip_distances")}enableShaderF16(){this.enableDirective("f16")}enableDualSourceBlending(){this.enableDirective("dual_source_blending")}enableHardwareClipping(e){this.enableClipDistances(),this.getBuiltin("clip_distances","hw_clip_distances",`array`,"vertex")}getBuiltins(e){const t=[],r=this.builtins[e];if(void 0!==r)for(const{name:e,property:s,type:i}of r.values())t.push(`@builtin( ${e} ) ${s} : ${i}`);return t.join(",\n\t")}getScopedArray(e,t,r,s){return!1===this.scopedArrays.has(e)&&this.scopedArrays.set(e,{name:e,scope:t,bufferType:r,bufferCount:s}),e}getScopedArrays(e){if("compute"!==e)return;const t=[];for(const{name:e,scope:r,bufferType:s,bufferCount:i}of this.scopedArrays.values()){const n=this.getType(s);t.push(`var<${r}> ${e}: array< ${n}, ${i} >;`)}return t.join("\n")}getAttributes(e){const t=[];if("compute"===e&&(this.getBuiltin("global_invocation_id","globalId","vec3","attribute"),this.getBuiltin("workgroup_id","workgroupId","vec3","attribute"),this.getBuiltin("local_invocation_id","localId","vec3","attribute"),this.getBuiltin("num_workgroups","numWorkgroups","vec3","attribute"),this.renderer.hasFeature("subgroups")&&(this.enableDirective("subgroups",e),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute"))),"vertex"===e||"compute"===e){const e=this.getBuiltins("attribute");e&&t.push(e);const r=this.getAttributesArray();for(let e=0,s=r.length;e"),t.push(`\t${s+r.name} : ${i}`)}return e.output&&t.push(`\t${this.getBuiltins("output")}`),t.join(",\n")}getStructs(e){let t="";const r=this.structs[e];if(r.length>0){const e=[];for(const t of r){let r=`struct ${t.name} {\n`;r+=this.getStructMembers(t),r+="\n};",e.push(r)}t="\n"+e.join("\n\n")+"\n"}return t}getVar(e,t,r=null){let s=`var ${t} : `;return s+=null!==r?this.generateArrayDeclaration(e,r):this.getType(e),s}getVars(e){const t=[],r=this.vars[e];if(void 0!==r)for(const e of r)t.push(`\t${this.getVar(e.type,e.name,e.count)};`);return`\n${t.join("\n")}\n`}getVaryings(e){const t=[];if("vertex"===e&&this.getBuiltin("position","builtinClipSpace","vec4","vertex"),"vertex"===e||"fragment"===e){const r=this.varyings,s=this.vars[e];for(let i=0;ir.value.itemSize;return s&&!i}getUniforms(e){const t=this.uniforms[e],r=[],s=[],i=[],n={};for(const i of t){const t=i.groupNode.name,a=this.bindingsIndexes[t];if("texture"===i.type||"cubeTexture"===i.type||"cubeDepthTexture"===i.type||"storageTexture"===i.type||"texture3D"===i.type){const t=i.node.value;let s;(!0===t.isCubeTexture||!1===this.isUnfilterable(t)&&!0!==i.node.isStorageTextureNode)&&(this.isSampleCompare(t)?r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler_comparison;`):r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler;`));let n="";const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(t);if(o>1&&(n="_multisampled"),!0===t.isCubeTexture&&!0===t.isDepthTexture)s="texture_depth_cube";else if(!0===t.isCubeTexture)s="texture_cube";else if(!0===t.isDepthTexture)s=this.renderer.backend.compatibilityMode&&null===t.compareFunction?`texture${n}_2d`:`texture_depth${n}_2d${!0===t.isArrayTexture?"_array":""}`;else if(!0===i.node.isStorageTextureNode){const r=rC(t),n=this.getStorageAccess(i.node,e),a=i.node.value.is3DTexture,o=i.node.value.isArrayTexture;s=`texture_storage_${a?"3d":"2d"+(o?"_array":"")}<${r}, ${n}>`}else if(!0===t.isArrayTexture||!0===t.isDataArrayTexture||!0===t.isCompressedArrayTexture)s="texture_2d_array";else if(!0===t.is3DTexture||!0===t.isData3DTexture)s="texture_3d";else{s=`texture${n}_2d<${this.getComponentTypeFromTexture(t).charAt(0)}32>`}r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name} : ${s};`)}else if("buffer"===i.type||"storageBuffer"===i.type||"indirectStorageBuffer"===i.type){const t=i.node,r=this.getType(t.getNodeType(this)),n=t.bufferCount,o=n>0&&"buffer"===i.type?", "+n:"",u=t.isStorageBufferNode?`storage, ${this.getStorageAccess(t,e)}`:"uniform";if(this.isCustomStruct(i))s.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var<${u}> ${i.name} : ${r};`);else{const e=`\tvalue : array< ${t.isAtomic?`atomic<${r}>`:`${r}`}${o} >`;s.push(this._getWGSLStructBinding(i.name,e,u,a.binding++,a.group))}}else{const e=i.groupNode.name;if(void 0===n[e]){const t=this.uniformGroups[e];if(void 0!==t){const r=[];for(const e of t.uniforms){const t=e.getType(),s=this.getType(this.getVectorType(t));r.push(`\t${e.name} : ${s}`)}let s=this.uniformGroupsBindings[e];void 0===s&&(s={index:a.binding++,id:a.group},this.uniformGroupsBindings[e]=s),n[e]={index:s.index,id:s.id,snippets:r}}}}}for(const e in n){const t=n[e];i.push(this._getWGSLStructBinding(e,t.snippets.join(",\n"),"uniform",t.index,t.id))}return[...r,...s,...i].join("\n")}buildCode(){const e=null!==this.material?{fragment:{},vertex:{}}:{compute:{}};this.sortBindingGroups();for(const t in e){this.shaderStage=t;const r=e[t];r.uniforms=this.getUniforms(t),r.attributes=this.getAttributes(t),r.varyings=this.getVaryings(t),r.structs=this.getStructs(t),r.vars=this.getVars(t),r.codes=this.getCodes(t),r.directives=this.getDirectives(t),r.scopedArrays=this.getScopedArrays(t);let s="// code\n\n";s+=this.flowCode[t];const i=this.flowNodes[t],n=i[i.length-1],a=n.outputNode,o=void 0!==a&&!0===a.isOutputStructNode;for(const e of i){const i=this.getFlowData(e),u=e.name;if(u&&(s.length>0&&(s+="\n"),s+=`\t// flow -> ${u}\n`),s+=`${i.code}\n\t`,e===n&&"compute"!==t)if(s+="// result\n\n\t","vertex"===t)s+=`varyings.builtinClipSpace = ${i.result};`;else if("fragment"===t)if(o)r.returnType=a.getNodeType(this),r.structs+="var output : "+r.returnType+";",s+=`return ${i.result};`;else{let e="\t@location(0) color: vec4";const t=this.getBuiltins("output");t&&(e+=",\n\t"+t),r.returnType="OutputStruct",r.structs+=this._getWGSLStruct("OutputStruct",e),r.structs+="\nvar output : OutputStruct;",s+=`output.color = ${i.result};\n\n\treturn output;`}}r.flow=s}if(this.shaderStage=null,null!==this.material)this.vertexShader=this._getWGSLVertexCode(e.vertex),this.fragmentShader=this._getWGSLFragmentCode(e.fragment);else{const t=this.object.workgroupSize;this.computeShader=this._getWGSLComputeCode(e.compute,t)}}getMethod(e,t=null){let r;return null!==t&&(r=this._getWGSLMethod(e+"_"+t)),void 0===r&&(r=this._getWGSLMethod(e)),r||e}getBitcastMethod(e){return`bitcast<${this.getType(e)}>`}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`select( ${r}, ${t}, ${e} )`}getType(e){return pC[e]||e}isAvailable(e){let t=cC[e];return void 0===t&&("float32Filterable"===e?t=this.renderer.hasFeature("float32-filterable"):"clipDistance"===e&&(t=this.renderer.hasFeature("clip-distances")),cC[e]=t),t}getUniformBufferLimit(){return this.renderer.backend.device.limits.maxUniformBufferBindingSize}_getWGSLMethod(e){return void 0!==mC[e]&&this._include(e),fC[e]}_include(e){const t=mC[e];return t.build(this),this.addInclude(t),t}_getWGSLVertexCode(e){return`${this.getSignature()}\n// directives\n${e.directives}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// varyings\n${e.varyings}\nvar varyings : VaryingsStruct;\n\n// codes\n${e.codes}\n\n@vertex\nfn main( ${e.attributes} ) -> VaryingsStruct {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n\treturn varyings;\n\n}\n`}_getWGSLFragmentCode(e){return`${this.getSignature()}\n// global\n${yC}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@fragment\nfn main( ${e.varyings} ) -> ${e.returnType} {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLComputeCode(e,t){const[r,s,i]=t;return`${this.getSignature()}\n// directives\n${e.directives}\n\n// system\nvar instanceIndex : u32;\n\n// locals\n${e.scopedArrays}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@compute @workgroup_size( ${r}, ${s}, ${i} )\nfn main( ${e.attributes} ) {\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${r} * numWorkgroups.x )\n\t\t+ globalId.z * ( ${r} * numWorkgroups.x ) * ( ${s} * numWorkgroups.y );\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLStruct(e,t){return`\nstruct ${e} {\n${t}\n};`}_getWGSLStructBinding(e,t,r,s=0,i=0){const n=e+"Struct";return`${this._getWGSLStruct(n,t)}\n@binding( ${s} ) @group( ${i} )\nvar<${r}> ${e} : ${n};`}}class xC{constructor(e){this.backend=e}getCurrentDepthStencilFormat(e){let t;return e.depth&&(t=null!==e.depthTexture?this.getTextureFormatGPU(e.depthTexture):e.stencil?HE:WE),t}getTextureFormatGPU(e){return this.backend.get(e).format}getTextureSampleData(e){let t;if(e.isFramebufferTexture)t=1;else if(e.isDepthTexture&&!e.renderTarget){const e=this.backend.renderer,r=e.getRenderTarget();t=r?r.samples:e.currentSamples}else e.renderTarget&&(t=e.renderTarget.samples);t=t||1;const r=t>1&&null!==e.renderTarget&&!0!==e.isDepthTexture&&!0!==e.isFramebufferTexture;return{samples:t,primarySamples:r?1:t,isMSAA:r}}getCurrentColorFormat(e){let t;return t=null!==e.textures?this.getTextureFormatGPU(e.textures[0]):this.getPreferredCanvasFormat(),t}getCurrentColorFormats(e){return null!==e.textures?e.textures.map(e=>this.getTextureFormatGPU(e)):[this.getPreferredCanvasFormat()]}getCurrentColorSpace(e){return null!==e.textures?e.textures[0].colorSpace:this.backend.renderer.outputColorSpace}getPrimitiveTopology(e,t){return e.isPoints?VR:e.isLineSegments||e.isMesh&&!0===t.wireframe?kR:e.isLine?GR:e.isMesh?$R:void 0}getSampleCount(e){return e>=4?4:1}getSampleCountRenderContext(e){return null!==e.textures?this.getSampleCount(e.sampleCount):this.getSampleCount(this.backend.renderer.currentSamples)}getPreferredCanvasFormat(){const e=this.backend.parameters.outputType;if(void 0===e)return navigator.gpu.getPreferredCanvasFormat();if(e===$e)return CE;if(e===_e)return VE;throw new Error("Unsupported output buffer type.")}}const TC=new Map([[Int8Array,["sint8","snorm8"]],[Uint8Array,["uint8","unorm8"]],[Int16Array,["sint16","snorm16"]],[Uint16Array,["uint16","unorm16"]],[Int32Array,["sint32","snorm32"]],[Uint32Array,["uint32","unorm32"]],[Float32Array,["float32"]]]);"undefined"!=typeof Float16Array&&TC.set(Float16Array,["float16"]);const _C=new Map([[ot,["float16"]]]),vC=new Map([[Int32Array,"sint32"],[Int16Array,"sint32"],[Uint32Array,"uint32"],[Uint16Array,"uint32"],[Float32Array,"float32"]]);class NC{constructor(e){this.backend=e}createAttribute(e,t){const r=this._getBufferAttribute(e),s=this.backend,i=s.get(r);let n=i.buffer;if(void 0===n){const a=s.device;let o=r.array;if(!1===e.normalized)if(o.constructor===Int16Array||o.constructor===Int8Array)o=new Int32Array(o);else if((o.constructor===Uint16Array||o.constructor===Uint8Array)&&(o=new Uint32Array(o),t&GPUBufferUsage.INDEX))for(let e=0;e0&&(void 0===n.groups&&(n.groups=[],n.versions=[]),n.versions[r]===s&&(o=n.groups[r])),void 0===o&&(o=this.createBindGroup(e,a),r>0&&(n.groups[r]=o,n.versions[r]=s)),n.group=o}updateBinding(e){const t=this.backend,r=t.device,s=e.buffer,i=t.get(e).buffer,n=e.updateRanges;if(0===n.length)r.queue.writeBuffer(i,0,s,0);else{const e=Kr(s),t=e?1:s.BYTES_PER_ELEMENT;for(let a=0,o=n.length;a1&&(i+=`-${e.texture.depthOrArrayLayers}`),i+=`-${r}-${s}`,a=e[i],void 0===a){const n=zw;let o;o=t.isSampledCubeTexture?Gw:t.isSampledTexture3D?$w:t.texture.isArrayTexture||t.texture.isDataArrayTexture||t.texture.isCompressedArrayTexture?kw:Vw,a=e[i]=e.texture.createView({aspect:n,dimension:o,mipLevelCount:r,baseMipLevel:s})}}n.push({binding:i,resource:a})}else if(t.isSampler){const e=r.get(t.texture);n.push({binding:i,resource:e.sampler})}i++}return s.createBindGroup({label:"bindGroup_"+e.name,layout:t,entries:n})}_createLayoutEntries(e){const t=[];let r=0;for(const s of e.bindings){const e=this.backend,i={binding:r,visibility:s.visibility};if(s.isUniformBuffer||s.isStorageBuffer){const e={};s.isStorageBuffer&&(s.visibility&zR.COMPUTE&&(s.access===si.READ_WRITE||s.access===si.WRITE_ONLY)?e.type=Rw:e.type=Ew),i.buffer=e}else if(s.isSampledTexture&&s.store){const e={};e.format=this.backend.get(s.texture).texture.format;const t=s.access;e.access=t===si.READ_WRITE?Cw:t===si.WRITE_ONLY?Aw:ww,s.texture.isArrayTexture?e.viewDimension=kw:s.texture.is3DTexture&&(e.viewDimension=$w),i.storageTexture=e}else if(s.isSampledTexture){const t={},{primarySamples:r}=e.utils.getTextureSampleData(s.texture);if(r>1&&(t.multisampled=!0,s.texture.isDepthTexture||(t.sampleType=Lw)),s.texture.isDepthTexture)e.compatibilityMode&&null===s.texture.compareFunction?t.sampleType=Lw:t.sampleType=Pw;else if(s.texture.isDataTexture||s.texture.isDataArrayTexture||s.texture.isData3DTexture){const e=s.texture.type;e===R?t.sampleType=Dw:e===S?t.sampleType=Uw:e===Q&&(this.backend.hasFeature("float32-filterable")?t.sampleType=Fw:t.sampleType=Lw)}s.isSampledCubeTexture?t.viewDimension=Gw:s.texture.isArrayTexture||s.texture.isDataArrayTexture||s.texture.isCompressedArrayTexture?t.viewDimension=kw:s.isSampledTexture3D&&(t.viewDimension=$w),i.texture=t}else if(s.isSampler){const t={};s.texture.isDepthTexture&&(null!==s.texture.compareFunction&&e.hasCompatibility(E.TEXTURE_COMPARE)?t.type=Bw:t.type=Mw),i.sampler=t}else o(`WebGPUBindingUtils: Unsupported binding "${s}".`);t.push(i),r++}return t}deleteBindGroupData(e){const{backend:t}=this,r=t.get(e);r.layout&&(r.layout.usedTimes--,0===r.layout.usedTimes&&this._bindGroupLayoutCache.delete(r.layoutKey),r.layout=void 0,r.layoutKey=void 0)}dispose(){this._bindGroupLayoutCache.clear()}}class EC{constructor(e){this.backend=e,this._activePipelines=new WeakMap}setPipeline(e,t){this._activePipelines.get(e)!==t&&(e.setPipeline(t),this._activePipelines.set(e,t))}_getSampleCount(e){return this.backend.utils.getSampleCountRenderContext(e)}createRenderPipeline(e,t){const{object:r,material:s,geometry:i,pipeline:n}=e,{vertexProgram:a,fragmentProgram:u}=n,l=this.backend,d=l.device,c=l.utils,h=l.get(n),p=[];for(const t of e.getBindings()){const e=l.get(t),{layoutGPU:r}=e.layout;p.push(r)}const g=l.attributeUtils.createShaderVertexBuffers(e);let m;s.blending===se||s.blending===ze&&!1===s.transparent||(m=this._getBlending(s));let f={};!0===s.stencilWrite&&(f={compare:this._getStencilCompare(s),failOp:this._getStencilOperation(s.stencilFail),depthFailOp:this._getStencilOperation(s.stencilZFail),passOp:this._getStencilOperation(s.stencilZPass)});const y=this._getColorWriteMask(s),b=[];if(null!==e.context.textures){const t=e.context.textures,r=e.context.mrt;for(let e=0;e1},layout:d.createPipelineLayout({bindGroupLayouts:p})},A={},w=e.context.depth,C=e.context.stencil;if(!0!==w&&!0!==C||(!0===w&&(A.format=S,A.depthWriteEnabled=s.depthWrite,A.depthCompare=N),!0===C&&(A.stencilFront=f,A.stencilBack=f,A.stencilReadMask=s.stencilFuncMask,A.stencilWriteMask=s.stencilWriteMask),!0===s.polygonOffset&&(A.depthBias=s.polygonOffsetUnits,A.depthBiasSlopeScale=s.polygonOffsetFactor,A.depthBiasClamp=0),E.depthStencil=A),d.pushErrorScope("validation"),null===t)h.pipeline=d.createRenderPipeline(E),d.popErrorScope().then(e=>{null!==e&&(h.error=!0,o(e.message))});else{const e=new Promise(async e=>{try{h.pipeline=await d.createRenderPipelineAsync(E)}catch(e){}const t=await d.popErrorScope();null!==t&&(h.error=!0,o(t.message)),e()});t.push(e)}}createBundleEncoder(e,t="renderBundleEncoder"){const r=this.backend,{utils:s,device:i}=r,n=s.getCurrentDepthStencilFormat(e),a={label:t,colorFormats:s.getCurrentColorFormats(e),depthStencilFormat:n,sampleCount:this._getSampleCount(e)};return i.createRenderBundleEncoder(a)}createComputePipeline(e,t){const r=this.backend,s=r.device,i=r.get(e.computeProgram).module,n=r.get(e),a=[];for(const e of t){const t=r.get(e),{layoutGPU:s}=t.layout;a.push(s)}n.pipeline=s.createComputePipeline({compute:i,layout:s.createPipelineLayout({bindGroupLayouts:a})})}_getBlending(e){let t,r;const s=e.blending,i=e.blendSrc,n=e.blendDst,a=e.blendEquation;if(s===pt){const s=null!==e.blendSrcAlpha?e.blendSrcAlpha:i,o=null!==e.blendDstAlpha?e.blendDstAlpha:n,u=null!==e.blendEquationAlpha?e.blendEquationAlpha:a;t={srcFactor:this._getBlendFactor(i),dstFactor:this._getBlendFactor(n),operation:this._getBlendOperation(a)},r={srcFactor:this._getBlendFactor(s),dstFactor:this._getBlendFactor(o),operation:this._getBlendOperation(u)}}else{const i=(e,s,i,n)=>{t={srcFactor:e,dstFactor:s,operation:dw},r={srcFactor:i,dstFactor:n,operation:dw}};if(e.premultipliedAlpha)switch(s){case ze:i(ZA,rw,ZA,rw);break;case jt:i(ZA,ZA,ZA,ZA);break;case qt:i(YA,ew,YA,ZA);break;case Ht:i(sw,rw,YA,ZA)}else switch(s){case ze:i(tw,rw,ZA,rw);break;case jt:i(tw,ZA,ZA,ZA);break;case qt:o(`WebGPURenderer: "SubtractiveBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`);break;case Ht:o(`WebGPURenderer: "MultiplyBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`)}}if(void 0!==t&&void 0!==r)return{color:t,alpha:r};o("WebGPURenderer: Invalid blending: ",s)}_getBlendFactor(e){let t;switch(e){case gt:t=YA;break;case Gt:t=ZA;break;case kt:t=JA;break;case Ut:t=ew;break;case We:t=tw;break;case He:t=rw;break;case Ot:t=sw;break;case Dt:t=iw;break;case It:t=nw;break;case Pt:t=aw;break;case Vt:t=ow;break;case 211:t=uw;break;case 212:t=lw;break;default:o("WebGPURenderer: Blend factor not supported.",e)}return t}_getStencilCompare(e){let t;const r=e.stencilFunc;switch(r){case ss:t=WR;break;case rs:t=YR;break;case ts:t=HR;break;case es:t=jR;break;case Jr:t=qR;break;case Zr:t=QR;break;case Yr:t=XR;break;case Qr:t=KR;break;default:o("WebGPURenderer: Invalid stencil function.",r)}return t}_getStencilOperation(e){let t;switch(e){case cs:t=yw;break;case ds:t=bw;break;case ls:t=xw;break;case us:t=Tw;break;case os:t=_w;break;case as:t=vw;break;case ns:t=Nw;break;case is:t=Sw;break;default:o("WebGPURenderer: Invalid stencil operation.",t)}return t}_getBlendOperation(e){let t;switch(e){case qe:t=dw;break;case Lt:t=cw;break;case Ft:t=hw;break;case ps:t=pw;break;case hs:t=gw;break;default:o("WebGPUPipelineUtils: Blend equation not supported.",e)}return t}_getPrimitiveState(e,t,r){const s={},i=this.backend.utils;s.topology=i.getPrimitiveTopology(e,r),null!==t.index&&!0===e.isLine&&!0!==e.isLineSegments&&(s.stripIndexFormat=t.index.array instanceof Uint16Array?nE:aE);let n=r.side===L;return e.isMesh&&e.matrixWorld.determinant()<0&&(n=!n),s.frontFace=!0===n?rE:tE,s.cullMode=r.side===P?sE:iE,s}_getColorWriteMask(e){return!0===e.colorWrite?fw:mw}_getDepthCompare(e){let t;if(!1===e.depthTest)t=YR;else{const r=this.backend.parameters.reversedDepthBuffer?rr[e.depthFunc]:e.depthFunc;switch(r){case tr:t=WR;break;case er:t=YR;break;case Jt:t=HR;break;case Zt:t=jR;break;case Yt:t=qR;break;case Qt:t=QR;break;case Kt:t=XR;break;case Xt:t=KR;break;default:o("WebGPUPipelineUtils: Invalid depth function.",r)}}return t}}class AC extends UR{constructor(e,t,r=2048){super(r),this.device=e,this.type=t,this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxQueries,label:`queryset_global_timestamp_${t}`});const s=8*this.maxQueries;this.resolveBuffer=this.device.createBuffer({label:`buffer_timestamp_resolve_${t}`,size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.resultBuffer=this.device.createBuffer({label:`buffer_timestamp_result_${t}`,size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})}allocateQueriesForContext(e){if(!this.trackTimestamp||this.isDisposed)return null;if(this.currentQueryIndex+2>this.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryOffsets.set(e,t),t}async resolveQueriesAsync(){if(!this.trackTimestamp||0===this.currentQueryIndex||this.isDisposed)return this.lastValue;if(this.pendingResolve)return this.pendingResolve;this.pendingResolve=this._resolveQueries();try{return await this.pendingResolve}finally{this.pendingResolve=null}}async _resolveQueries(){if(this.isDisposed)return this.lastValue;try{if("unmapped"!==this.resultBuffer.mapState)return this.lastValue;const e=new Map(this.queryOffsets),t=this.currentQueryIndex,r=8*t;this.currentQueryIndex=0,this.queryOffsets.clear();const s=this.device.createCommandEncoder();s.resolveQuerySet(this.querySet,0,t,this.resolveBuffer,0),s.copyBufferToBuffer(this.resolveBuffer,0,this.resultBuffer,0,r);const i=s.finish();if(this.device.queue.submit([i]),"unmapped"!==this.resultBuffer.mapState)return this.lastValue;if(await this.resultBuffer.mapAsync(GPUMapMode.READ,0,r),this.isDisposed)return"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue;const n=new BigUint64Array(this.resultBuffer.getMappedRange(0,r)),a={},o=[];for(const[t,r]of e){const e=t.match(/^(.*):f(\d+)$/),s=parseInt(e[2]);!1===o.includes(s)&&o.push(s),void 0===a[s]&&(a[s]=0);const i=n[r],u=n[r+1],l=Number(u-i)/1e6;this.timestamps.set(t,l),a[s]+=l}const u=a[o[o.length-1]];return this.resultBuffer.unmap(),this.lastValue=u,this.frames=o,u}catch(e){return o("Error resolving queries:",e),"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue}}async dispose(){if(!this.isDisposed){if(this.isDisposed=!0,this.pendingResolve)try{await this.pendingResolve}catch(e){o("Error waiting for pending resolve:",e)}if(this.resultBuffer&&"mapped"===this.resultBuffer.mapState)try{this.resultBuffer.unmap()}catch(e){o("Error unmapping buffer:",e)}this.querySet&&(this.querySet.destroy(),this.querySet=null),this.resolveBuffer&&(this.resolveBuffer.destroy(),this.resolveBuffer=null),this.resultBuffer&&(this.resultBuffer.destroy(),this.resultBuffer=null),this.queryOffsets.clear(),this.pendingResolve=null}}}class wC extends bR{constructor(e={}){super(e),this.isWebGPUBackend=!0,this.parameters.alpha=void 0===e.alpha||e.alpha,this.parameters.requiredLimits=void 0===e.requiredLimits?{}:e.requiredLimits,this.compatibilityMode=null,this.device=null,this.defaultRenderPassdescriptor=null,this.utils=new xC(this),this.attributeUtils=new NC(this),this.bindingUtils=new RC(this),this.pipelineUtils=new EC(this),this.textureUtils=new tC(this),this.occludedResolveCache=new Map;const t="undefined"==typeof navigator||!1===/Android/.test(navigator.userAgent);this._compatibility={[E.TEXTURE_COMPARE]:t}}async init(e){await super.init(e);const t=this.parameters;let r;if(void 0===t.device){const e={powerPreference:t.powerPreference,featureLevel:"compatibility"},s="undefined"!=typeof navigator?await navigator.gpu.requestAdapter(e):null;if(null===s)throw new Error("WebGPUBackend: Unable to create WebGPU adapter.");const i=Object.values(qw),n=[];for(const e of i)s.features.has(e)&&n.push(e);const a={requiredFeatures:n,requiredLimits:t.requiredLimits};r=await s.requestDevice(a)}else r=t.device;this.compatibilityMode=!r.features.has("core-features-and-limits"),this.compatibilityMode&&(e._samples=0),r.lost.then(t=>{if("destroyed"===t.reason)return;const r={api:"WebGPU",message:t.message||"Unknown reason",reason:t.reason||null,originalEvent:t};e.onDeviceLost(r)}),this.device=r,this.trackTimestamp=this.trackTimestamp&&this.hasFeature(qw.TimestampQuery),this.updateSize()}get context(){const e=this.renderer.getCanvasTarget(),t=this.get(e);let r=t.context;if(void 0===r){const s=this.parameters;r=!0===e.isDefaultCanvasTarget&&void 0!==s.context?s.context:e.domElement.getContext("webgpu"),"setAttribute"in e.domElement&&e.domElement.setAttribute("data-engine",`three.js r${lt} webgpu`);const i=s.alpha?"premultiplied":"opaque",n=s.outputType===_e?"extended":"standard";r.configure({device:this.device,format:this.utils.getPreferredCanvasFormat(),usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,alphaMode:i,toneMapping:{mode:n}}),t.context=r}return r}get coordinateSystem(){return h}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}getContext(){return this.context}_getDefaultRenderPassDescriptor(){const e=this.renderer,t=e.getCanvasTarget(),r=this.get(t),s=e.currentSamples;let i=r.descriptor;if(void 0===i||r.samples!==s){i={colorAttachments:[{view:null}]},!0!==e.depth&&!0!==e.stencil||(i.depthStencilAttachment={view:this.textureUtils.getDepthBuffer(e.depth,e.stencil).createView()});const t=i.colorAttachments[0];s>0?t.view=this.textureUtils.getColorBuffer().createView():t.resolveTarget=void 0,r.descriptor=i,r.samples=s}const n=i.colorAttachments[0];return s>0?n.resolveTarget=this.context.getCurrentTexture().createView():n.view=this.context.getCurrentTexture().createView(),i}_isRenderCameraDepthArray(e){return e.depthTexture&&e.depthTexture.image.depth>1&&e.camera.isArrayCamera}_getRenderPassDescriptor(e,t={}){const r=e.renderTarget,s=this.get(r);let i=s.descriptors;void 0!==i&&s.width===r.width&&s.height===r.height&&s.samples===r.samples||(i={},s.descriptors=i);const n=e.getCacheKey();let a=i[n];if(void 0===a){const t=e.textures,o=[];let u;const l=this._isRenderCameraDepthArray(e);for(let s=0;s1)if(!0===l){const t=e.camera.cameras;for(let e=0;e0&&(t.currentOcclusionQuerySet&&t.currentOcclusionQuerySet.destroy(),t.currentOcclusionQueryBuffer&&t.currentOcclusionQueryBuffer.destroy(),t.currentOcclusionQuerySet=t.occlusionQuerySet,t.currentOcclusionQueryBuffer=t.occlusionQueryBuffer,t.currentOcclusionQueryObjects=t.occlusionQueryObjects,i=r.createQuerySet({type:"occlusion",count:s,label:`occlusionQuerySet_${e.id}`}),t.occlusionQuerySet=i,t.occlusionQueryIndex=0,t.occlusionQueryObjects=new Array(s),t.lastOcclusionObject=null),n=null===e.textures?this._getDefaultRenderPassDescriptor():this._getRenderPassDescriptor(e,{loadOp:JR}),this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e),n),n.occlusionQuerySet=i;const a=n.depthStencilAttachment;if(null!==e.textures){const t=n.colorAttachments;for(let r=0;r0&&t.currentPass.executeBundles(t.renderBundles),r>t.occlusionQueryIndex&&t.currentPass.endOcclusionQuery();const s=t.encoder;if(!0===this._isRenderCameraDepthArray(e)){const r=[];for(let e=0;e0){const s=8*r;let i=this.occludedResolveCache.get(s);void 0===i&&(i=this.device.createBuffer({size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.occludedResolveCache.set(s,i));const n=this.device.createBuffer({size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});t.encoder.resolveQuerySet(t.occlusionQuerySet,0,r,i,0),t.encoder.copyBufferToBuffer(i,0,n,0,s),t.occlusionQueryBuffer=n,this.resolveOccludedAsync(e)}if(this.device.queue.submit([t.encoder.finish()]),null!==e.textures){const t=e.textures;for(let e=0;eo&&(i[0]=Math.min(a,o),i[1]=Math.ceil(a/o)),n.dispatchSize=i}i=n.dispatchSize}a.dispatchWorkgroups(i[0],i[1]||1,i[2]||1)}finishCompute(e){const t=this.get(e);t.passEncoderGPU.end(),this.device.queue.submit([t.cmdEncoderGPU.finish()])}draw(e,t){const{object:r,material:s,context:i,pipeline:n}=e,a=e.getBindings(),o=this.get(i),u=this.get(n),l=u.pipeline;if(!0===u.error)return;const d=e.getIndex(),c=null!==d,h=e.getDrawParameters();if(null===h)return;const p=(t,r)=>{this.pipelineUtils.setPipeline(t,l),r.pipeline=l;const n=r.bindingGroups;for(let e=0,r=a.length;e{if(p(i,n),!0===r.isBatchedMesh){const e=r._multiDrawStarts,n=r._multiDrawCounts,a=r._multiDrawCount,o=r._multiDrawInstances;null!==o&&v("WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.");let u=!0===c?d.array.BYTES_PER_ELEMENT:1;s.wireframe&&(u=r.geometry.attributes.position.count>65535?4:2);for(let s=0;s1?0:s;!0===c?i.drawIndexed(n[s],a,e[s]/u,0,l):i.draw(n[s],a,e[s],l),t.update(r,n[s],a)}}else if(!0===c){const{vertexCount:s,instanceCount:n,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const t=this.get(o).buffer,r=e.getIndirectOffset(),s=Array.isArray(r)?r:[r];for(let e=0;e0){const t=this.get(e.camera),s=e.camera.cameras,n=e.getBindingGroup("cameraIndex");if(void 0===t.indexesGPU||t.indexesGPU.length!==s.length){const e=this.get(n),r=[],i=new Uint32Array([0,0,0,0]);for(let t=0,n=s.length;t(d("WebGPURenderer: WebGPU is not available, running under WebGL2 backend."),new OR(e)));super(new t(e),e),this.library=new BC,this.isWebGPURenderer=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}}class LC extends As{constructor(){super(),this.isBundleGroup=!0,this.type="BundleGroup",this.static=!0,this.version=0}set needsUpdate(e){!0===e&&this.version++}}class PC{constructor(e,t=wn(0,0,1,1)){this.renderer=e,this.outputNode=t,this.outputColorTransform=!0,this.needsUpdate=!0;const r=new yg;r.name="RenderPipeline",this._quadMesh=new dx(r),this._quadMesh.name="Render Pipeline",this._context=null}render(){const e=this.renderer;this._update(),null!==this._context.onBeforeRenderPipeline&&this._context.onBeforeRenderPipeline();const t=e.toneMapping,r=e.outputColorSpace;e.toneMapping=m,e.outputColorSpace=p.workingColorSpace;const s=e.xr.enabled;e.xr.enabled=!1,this._quadMesh.render(e),e.xr.enabled=s,e.toneMapping=t,e.outputColorSpace=r,null!==this._context.onAfterRenderPipeline&&this._context.onAfterRenderPipeline()}get context(){return this._context}dispose(){this._quadMesh.material.dispose()}_update(){if(!0===this.needsUpdate){const e=this.renderer,t=e.toneMapping,r=e.outputColorSpace,s={renderPipeline:this,onBeforeRenderPipeline:null,onAfterRenderPipeline:null};let i=this.outputNode;!0===this.outputColorTransform?(i=i.context(s),i=xl(i,t,r)):(s.toneMapping=t,s.outputColorSpace=r,i=i.context(s)),this._context=s,this._quadMesh.material.fragmentNode=i,this._quadMesh.material.needsUpdate=!0,this.needsUpdate=!1}}async renderAsync(){v('RenderPipeline: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.renderer.init(),this.render()}}class DC extends PC{constructor(e,t){v('PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.'),super(e,t)}}class UC extends N{constructor(e=1,t=1){super(),this.image={width:e,height:t},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0,this.mipmapsAutoUpdate=!0}setSize(e,t){this.image.width===e&&this.image.height===t||(this.image.width=e,this.image.height=t,this.dispose())}}class IC extends N{constructor(e=1,t=1,r=1){super(),this.isArrayTexture=!1,this.image={width:e,height:t,depth:r},this.magFilter=de,this.minFilter=de,this.wrapR=ve,this.isStorageTexture=!0,this.is3DTexture=!0}setSize(e,t,r){this.image.width===e&&this.image.height===t&&this.image.depth===r||(this.image.width=e,this.image.height=t,this.image.depth=r,this.dispose())}}class OC extends N{constructor(e=1,t=1,r=1){super(),this.isArrayTexture=!0,this.image={width:e,height:t,depth:r},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0}setSize(e,t,r){this.image.width===e&&this.image.height===t&&this.image.depth===r||(this.image.width=e,this.image.height=t,this.image.depth=r,this.dispose())}}class VC extends Nx{constructor(e,t){super(e,t,Uint32Array),this.isIndirectStorageBufferAttribute=!0}}class kC extends ws{constructor(e){super(e),this.textures={},this.nodes={}}load(e,t,r,s){const i=new Cs(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,r=>{try{t(this.parse(JSON.parse(r)))}catch(t){s?s(t):o(t),this.manager.itemError(e)}},r,s)}parseNodes(e){const t={};if(void 0!==e){for(const r of e){const{uuid:e,type:s}=r;t[e]=this.createNodeFromType(s),t[e].uuid=e}const r={nodes:t,textures:this.textures};for(const s of e){s.meta=r;t[s.uuid].deserialize(s),delete s.meta}}return t}parse(e){const t=this.createNodeFromType(e.type);t.uuid=e.uuid;const r={nodes:this.parseNodes(e.nodes),textures:this.textures};return e.meta=r,t.deserialize(e),delete e.meta,t}setTextures(e){return this.textures=e,this}setNodes(e){return this.nodes=e,this}createNodeFromType(e){return void 0===this.nodes[e]?(o("NodeLoader: Node type not found:",e),fn()):new this.nodes[e]}}class GC extends Ms{constructor(e){super(e),this.nodes={},this.nodeMaterials={}}parse(e){const t=super.parse(e),r=this.nodes,s=e.inputNodes;for(const e in s){const i=s[e];t[e]=r[i]}return t}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}createMaterialFromType(e){const t=this.nodeMaterials[e];return void 0!==t?new t:super.createMaterialFromType(e)}}class $C extends Bs{constructor(e){super(e),this.nodes={},this.nodeMaterials={},this._nodesJSON=null}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}parse(e,t){this._nodesJSON=e.nodes;const r=super.parse(e,t);return this._nodesJSON=null,r}parseNodes(e,t){if(void 0!==e){const r=new kC;return r.setNodes(this.nodes),r.setTextures(t),r.parseNodes(e)}return{}}parseMaterials(e,t){const r={};if(void 0!==e){const s=this.parseNodes(this._nodesJSON,t),i=new GC;i.setTextures(t),i.setNodes(s),i.setNodeMaterials(this.nodeMaterials);for(let t=0,s=e.length;t this.maxQueries ) { - warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` ); + warnOnce( `WebGLTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` ); return null; } @@ -72511,9 +72511,23 @@ class WebGPUTextureUtils { } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) { - for ( let i = 0; i < options.image.depth; i ++ ) { + if ( texture.layerUpdates.size > 0 ) { + + for ( const layerIndex of texture.layerUpdates ) { + + this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex ); + + } + + texture.clearLayerUpdates(); + + } else { - this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i ); + for ( let i = 0; i < options.image.depth; i ++ ) { + + this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i ); + + } } @@ -82393,4 +82407,4 @@ class ClippingGroup extends Group { } -export { ACESFilmicToneMapping, AONode, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightNode, AnalyticLightNode, ArrayCamera, ArrayElementNode, ArrayNode, AssignNode, AtomicFunctionNode, AttributeNode, BackSide, BarrierNode, BasicEnvironmentNode, BasicLightMapNode, BasicShadowMap, BatchNode, BitcastNode, BitcountNode, BlendMode, BoxGeometry, BufferAttribute, BufferAttributeNode, BufferGeometry, BufferNode, BuiltinNode, BumpMapNode, BundleGroup, BypassNode, ByteType, CanvasTarget, CineonToneMapping, ClampToEdgeWrapping, ClippingGroup, ClippingNode, CodeNode, Color, ColorManagement, ColorSpaceNode, Compatibility, ComputeBuiltinNode, ComputeNode, ConditionalNode, ConstNode, ContextNode, ConvertNode, CubeCamera, CubeDepthTexture, CubeMapNode, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureNode, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CylinderGeometry, DataArrayTexture, DataTexture, DebugNode, DecrementStencilOp, DecrementWrapStencilOp, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightNode, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicDrawUsage, EnvironmentNode, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, EventNode, ExpressionNode, FileLoader, FlipNode, Float16BufferAttribute, Float32BufferAttribute, FloatType, FramebufferTexture, FrontFacingNode, FrontSide, Frustum, FrustumArray, FunctionCallNode, FunctionNode, FunctionOverloadingNode, GLSLNodeParser, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, Group, HalfFloatType, HemisphereLight, HemisphereLightNode, IESSpotLight, IESSpotLightNode, IncrementStencilOp, IncrementWrapStencilOp, IndexNode, IndirectStorageBufferAttribute, InputNode, InspectorBase, InspectorNode, InstanceNode, InstancedBufferAttribute, InstancedInterleavedBuffer, InstancedMeshNode, IntType, InterleavedBuffer, InterleavedBufferAttribute, InvertStencilOp, IrradianceNode, IsolateNode, JoinNode, KeepStencilOp, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, LightProbe, LightProbeNode, Lighting, LightingContextNode, LightingModel, LightingNode, LightsNode, Line2NodeMaterial, LineBasicMaterial, LineBasicNodeMaterial, LineDashedMaterial, LineDashedNodeMaterial, LinearFilter, LinearMipMapLinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoopNode, MRTNode, Material, MaterialBlending, MaterialLoader, MaterialNode, MaterialReferenceNode, MathNode, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, MaxMipLevelNode, MemberNode, Mesh, MeshBasicMaterial, MeshBasicNodeMaterial, MeshLambertMaterial, MeshLambertNodeMaterial, MeshMatcapMaterial, MeshMatcapNodeMaterial, MeshNormalMaterial, MeshNormalNodeMaterial, MeshPhongMaterial, MeshPhongNodeMaterial, MeshPhysicalMaterial, MeshPhysicalNodeMaterial, MeshSSSNodeMaterial, MeshStandardMaterial, MeshStandardNodeMaterial, MeshToonMaterial, MeshToonNodeMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, ModelNode, MorphNode, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, Node, NodeAccess, NodeAttribute, NodeBuilder, NodeCache, NodeCode, NodeError, NodeFrame, NodeFunctionInput, NodeLoader, NodeMaterial, NodeMaterialLoader, NodeMaterialObserver, NodeObjectLoader, NodeShaderStage, NodeType, NodeUniform, NodeUpdateType, NodeUtils, NodeVar, NodeVarying, NormalBlending, NormalGAPacking, NormalMapNode, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, Object3D, Object3DNode, ObjectLoader, ObjectSpaceNormalMap, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OperatorNode, OrthographicCamera, OutputStructNode, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PMREMNode, PackFloatNode, ParameterNode, PassNode, PerspectiveCamera, PhongLightingModel, PhysicalLightingModel, Plane, PlaneGeometry, PointLight, PointLightNode, PointShadowNode, PointUVNode, PointsMaterial, PointsNodeMaterial, PostProcessing, ProjectorLight, ProjectorLightNode, PropertyNode, QuadMesh, Quaternion, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGBIntegerFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RTTNode, RangeNode, RectAreaLight, RectAreaLightNode, RedFormat, RedIntegerFormat, ReferenceBaseNode, ReferenceNode, ReflectorNode, ReinhardToneMapping, RemapNode, RenderOutputNode, RenderPipeline, RenderTarget, RendererReferenceNode, RendererUtils, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RotateNode, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, SampleNode, Scene, ScreenNode, SetNode, ShadowBaseNode, ShadowMaterial, ShadowNode, ShadowNodeMaterial, ShortType, SkinningNode, Sphere, SphereGeometry, SplitNode, SpotLight, SpotLightNode, SpriteMaterial, SpriteNodeMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StackNode, StackTrace, StaticDrawUsage, StorageArrayElementNode, StorageBufferAttribute, StorageBufferNode, StorageInstancedBufferAttribute, StorageTexture, StorageTextureNode, StructNode, StructTypeNode, SubBuildNode, SubgroupFunctionNode, SubtractEquation, SubtractiveBlending, TSL, TangentSpaceNormalMap, TempNode, Texture, Texture3DNode, TextureNode, TextureSizeNode, TimestampQuery, ToneMappingNode, ToonOutlinePassNode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UniformArrayNode, UniformGroupNode, UniformNode, UnpackFloatNode, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, UserDataNode, VSMShadowMap, VarNode, VaryingNode, Vector2, Vector3, Vector4, VelocityNode, VertexColorNode, ViewportDepthNode, ViewportDepthTextureNode, ViewportSharedTextureNode, ViewportTextureNode, VolumeNodeMaterial, WebGLCoordinateSystem, WebGPUCoordinateSystem, WebGPURenderer, WebXRController, WorkgroupInfoNode, ZeroFactor, ZeroStencilOp, createCanvasElement, defaultBuildStages, defaultShaderStages, error, log$1 as log, shaderStages, vectorComponents, warn, warnOnce }; +export { ACESFilmicToneMapping, AONode, AddEquation, AddOperation, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightNode, AnalyticLightNode, ArrayCamera, ArrayElementNode, ArrayNode, AssignNode, AtomicFunctionNode, AttributeNode, BackSide, BarrierNode, BasicEnvironmentNode, BasicLightMapNode, BasicShadowMap, BatchNode, BitcastNode, BitcountNode, BlendMode, BoxGeometry, BufferAttribute, BufferAttributeNode, BufferGeometry, BufferNode, BuiltinNode, BumpMapNode, BundleGroup, BypassNode, ByteType, CanvasTarget, CineonToneMapping, ClampToEdgeWrapping, ClippingGroup, ClippingNode, CodeNode, Color, ColorManagement, ColorSpaceNode, Compatibility, ComputeBuiltinNode, ComputeNode, ConditionalNode, ConstNode, ContextNode, ConvertNode, CubeCamera, CubeDepthTexture, CubeMapNode, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureNode, CubeUVReflectionMapping, CullFaceBack, CullFaceFront, CullFaceNone, CustomBlending, CylinderGeometry, DataArrayTexture, DataTexture, DebugNode, DecrementStencilOp, DecrementWrapStencilOp, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightNode, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicDrawUsage, EnvironmentNode, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, EventNode, ExpressionNode, FileLoader, FlipNode, Float16BufferAttribute, Float32BufferAttribute, FloatType, FramebufferTexture, FrontFacingNode, FrontSide, Frustum, FrustumArray, FunctionCallNode, FunctionNode, FunctionOverloadingNode, GLSLNodeParser, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, Group, HalfFloatType, HemisphereLight, HemisphereLightNode, IESSpotLight, IESSpotLightNode, IncrementStencilOp, IncrementWrapStencilOp, IndexNode, IndirectStorageBufferAttribute, InputNode, InspectorBase, InspectorNode, InstanceNode, InstancedBufferAttribute, InstancedInterleavedBuffer, InstancedMeshNode, IntType, InterleavedBuffer, InterleavedBufferAttribute, InvertStencilOp, IrradianceNode, IsolateNode, JoinNode, KeepStencilOp, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, LightProbe, LightProbeNode, Lighting, LightingContextNode, LightingModel, LightingNode, LightsNode, Line2NodeMaterial, LineBasicMaterial, LineBasicNodeMaterial, LineDashedMaterial, LineDashedNodeMaterial, LinearFilter, LinearMipMapLinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoopNode, MRTNode, Material, MaterialBlending, MaterialLoader, MaterialNode, MaterialReferenceNode, MathNode, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, MaxMipLevelNode, MemberNode, Mesh, MeshBasicMaterial, MeshBasicNodeMaterial, MeshLambertMaterial, MeshLambertNodeMaterial, MeshMatcapMaterial, MeshMatcapNodeMaterial, MeshNormalMaterial, MeshNormalNodeMaterial, MeshPhongMaterial, MeshPhongNodeMaterial, MeshPhysicalMaterial, MeshPhysicalNodeMaterial, MeshSSSNodeMaterial, MeshStandardMaterial, MeshStandardNodeMaterial, MeshToonMaterial, MeshToonNodeMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, ModelNode, MorphNode, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, Node, NodeAccess, NodeAttribute, NodeBuilder, NodeCache, NodeCode, NodeError, NodeFrame, NodeFunctionInput, NodeLoader, NodeMaterial, NodeMaterialLoader, NodeMaterialObserver, NodeObjectLoader, NodeShaderStage, NodeType, NodeUniform, NodeUpdateType, NodeUtils, NodeVar, NodeVarying, NormalBlending, NormalGAPacking, NormalMapNode, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, Object3D, Object3DNode, ObjectLoader, ObjectSpaceNormalMap, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OperatorNode, OrthographicCamera, OutputStructNode, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PMREMNode, PackFloatNode, ParameterNode, PassNode, PerspectiveCamera, PhongLightingModel, PhysicalLightingModel, Plane, PlaneGeometry, PointLight, PointLightNode, PointShadowNode, PointUVNode, PointsMaterial, PointsNodeMaterial, PostProcessing, ProjectorLight, ProjectorLightNode, PropertyNode, QuadMesh, Quaternion, R11_EAC_Format, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBFormat, RGBIntegerFormat, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RTTNode, RangeNode, RectAreaLight, RectAreaLightNode, RedFormat, RedIntegerFormat, ReferenceBaseNode, ReferenceNode, ReflectorNode, ReinhardToneMapping, RemapNode, RenderOutputNode, RenderPipeline, RenderTarget, RendererReferenceNode, RendererUtils, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RotateNode, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, SampleNode, Scene, ScreenNode, SetNode, ShadowBaseNode, ShadowMaterial, ShadowNode, ShadowNodeMaterial, ShortType, SkinningNode, Sphere, SphereGeometry, SplitNode, SpotLight, SpotLightNode, SpriteMaterial, SpriteNodeMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StackNode, StackTrace, StaticDrawUsage, StorageArrayElementNode, StorageBufferAttribute, StorageBufferNode, StorageInstancedBufferAttribute, StorageTexture, StorageTextureNode, StructNode, StructTypeNode, SubBuildNode, SubgroupFunctionNode, SubtractEquation, SubtractiveBlending, TSL, TangentSpaceNormalMap, TempNode, Texture, Texture3DNode, TextureNode, TextureSizeNode, TimestampQuery, ToneMappingNode, ToonOutlinePassNode, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, UniformArrayNode, UniformGroupNode, UniformNode, UnpackFloatNode, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, UserDataNode, VSMShadowMap, VarNode, VaryingNode, Vector2, Vector3, Vector4, VelocityNode, VertexColorNode, ViewportDepthNode, ViewportDepthTextureNode, ViewportSharedTextureNode, ViewportTextureNode, VolumeNodeMaterial, WebGLBackend, WebGLCoordinateSystem, WebGPUBackend, WebGPUCoordinateSystem, WebGPURenderer, WebXRController, WorkgroupInfoNode, ZeroFactor, ZeroStencilOp, createCanvasElement, defaultBuildStages, defaultShaderStages, error, log$1 as log, shaderStages, vectorComponents, warn, warnOnce }; diff --git a/build/three.webgpu.nodes.min.js b/build/three.webgpu.nodes.min.js index 01c00ba10c4528..355e6b00409493 100644 --- a/build/three.webgpu.nodes.min.js +++ b/build/three.webgpu.nodes.min.js @@ -3,4 +3,4 @@ * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT */ -import{Color as e,Vector2 as t,Vector3 as r,Vector4 as s,Matrix2 as i,Matrix3 as n,Matrix4 as a,error as o,EventDispatcher as u,MathUtils as l,warn as d,WebGLCoordinateSystem as c,WebGPUCoordinateSystem as h,ColorManagement as p,SRGBTransfer as g,NoToneMapping as m,StaticDrawUsage as f,InterleavedBufferAttribute as y,InterleavedBuffer as b,DynamicDrawUsage as x,NoColorSpace as T,log as _,warnOnce as v,Texture as N,UnsignedIntType as S,IntType as R,Compatibility as E,LessCompare as A,LessEqualCompare as w,GreaterCompare as C,GreaterEqualCompare as M,NearestFilter as B,Sphere as F,BackSide as L,DoubleSide as P,Euler as D,CubeTexture as U,CubeReflectionMapping as I,CubeRefractionMapping as O,TangentSpaceNormalMap as V,NoNormalPacking as k,NormalRGPacking as G,NormalGAPacking as $,ObjectSpaceNormalMap as z,RGFormat as W,RED_GREEN_RGTC2_Format as H,RG11_EAC_Format as q,InstancedBufferAttribute as j,InstancedInterleavedBuffer as X,DataArrayTexture as K,FloatType as Q,FramebufferTexture as Y,LinearMipmapLinearFilter as Z,DepthTexture as J,Material as ee,LineBasicMaterial as te,LineDashedMaterial as re,NoBlending as se,MeshNormalMaterial as ie,SRGBColorSpace as ne,RenderTarget as ae,BoxGeometry as oe,Mesh as ue,Scene as le,LinearFilter as de,CubeCamera as ce,EquirectangularReflectionMapping as he,EquirectangularRefractionMapping as pe,AddOperation as ge,MixOperation as me,MultiplyOperation as fe,MeshBasicMaterial as ye,MeshLambertMaterial as be,MeshPhongMaterial as xe,DataTexture as Te,HalfFloatType as _e,ClampToEdgeWrapping as ve,BufferGeometry as Ne,OrthographicCamera as Se,PerspectiveCamera as Re,LinearSRGBColorSpace as Ee,RGBAFormat as Ae,CubeUVReflectionMapping as we,BufferAttribute as Ce,MeshStandardMaterial as Me,MeshPhysicalMaterial as Be,MeshToonMaterial as Fe,MeshMatcapMaterial as Le,SpriteMaterial as Pe,PointsMaterial as De,ShadowMaterial as Ue,Uint32BufferAttribute as Ie,Uint16BufferAttribute as Oe,DepthStencilFormat as Ve,DepthFormat as ke,UnsignedInt248Type as Ge,UnsignedByteType as $e,NormalBlending as ze,SrcAlphaFactor as We,OneMinusSrcAlphaFactor as He,AddEquation as qe,MaterialBlending as je,Plane as Xe,Object3D as Ke,LinearMipMapLinearFilter as Qe,Float32BufferAttribute as Ye,UVMapping as Ze,PCFShadowMap as Je,PCFSoftShadowMap as et,VSMShadowMap as tt,BasicShadowMap as rt,CubeDepthTexture as st,SphereGeometry as it,LinearMipmapNearestFilter as nt,NearestMipmapLinearFilter as at,Float16BufferAttribute as ot,yieldToMain as ut,REVISION as lt,ArrayCamera as dt,PlaneGeometry as ct,FrontSide as ht,CustomBlending as pt,ZeroFactor as gt,CylinderGeometry as mt,Quaternion as ft,WebXRController as yt,RAD2DEG as bt,FrustumArray as xt,Frustum as Tt,RedIntegerFormat as _t,RedFormat as vt,ShortType as Nt,ByteType as St,UnsignedShortType as Rt,RGIntegerFormat as Et,RGBIntegerFormat as At,RGBFormat as wt,RGBAIntegerFormat as Ct,TimestampQuery as Mt,createCanvasElement as Bt,ReverseSubtractEquation as Ft,SubtractEquation as Lt,OneMinusDstAlphaFactor as Pt,OneMinusDstColorFactor as Dt,OneMinusSrcColorFactor as Ut,DstAlphaFactor as It,DstColorFactor as Ot,SrcAlphaSaturateFactor as Vt,SrcColorFactor as kt,OneFactor as Gt,CullFaceNone as $t,CullFaceBack as zt,CullFaceFront as Wt,MultiplyBlending as Ht,SubtractiveBlending as qt,AdditiveBlending as jt,NotEqualDepth as Xt,GreaterDepth as Kt,GreaterEqualDepth as Qt,EqualDepth as Yt,LessEqualDepth as Zt,LessDepth as Jt,AlwaysDepth as er,NeverDepth as tr,ReversedDepthFuncs as rr,UnsignedShort4444Type as sr,UnsignedShort5551Type as ir,UnsignedInt5999Type as nr,UnsignedInt101111Type as ar,AlphaFormat as or,RGB_S3TC_DXT1_Format as ur,RGBA_S3TC_DXT1_Format as lr,RGBA_S3TC_DXT3_Format as dr,RGBA_S3TC_DXT5_Format as cr,RGB_PVRTC_4BPPV1_Format as hr,RGB_PVRTC_2BPPV1_Format as pr,RGBA_PVRTC_4BPPV1_Format as gr,RGBA_PVRTC_2BPPV1_Format as mr,RGB_ETC1_Format as fr,RGB_ETC2_Format as yr,RGBA_ETC2_EAC_Format as br,R11_EAC_Format as xr,SIGNED_R11_EAC_Format as Tr,SIGNED_RG11_EAC_Format as _r,RGBA_ASTC_4x4_Format as vr,RGBA_ASTC_5x4_Format as Nr,RGBA_ASTC_5x5_Format as Sr,RGBA_ASTC_6x5_Format as Rr,RGBA_ASTC_6x6_Format as Er,RGBA_ASTC_8x5_Format as Ar,RGBA_ASTC_8x6_Format as wr,RGBA_ASTC_8x8_Format as Cr,RGBA_ASTC_10x5_Format as Mr,RGBA_ASTC_10x6_Format as Br,RGBA_ASTC_10x8_Format as Fr,RGBA_ASTC_10x10_Format as Lr,RGBA_ASTC_12x10_Format as Pr,RGBA_ASTC_12x12_Format as Dr,RGBA_BPTC_Format as Ur,RED_RGTC1_Format as Ir,SIGNED_RED_RGTC1_Format as Or,SIGNED_RED_GREEN_RGTC2_Format as Vr,MirroredRepeatWrapping as kr,RepeatWrapping as Gr,NearestMipmapNearestFilter as $r,NotEqualCompare as zr,EqualCompare as Wr,AlwaysCompare as Hr,NeverCompare as qr,LinearTransfer as jr,getByteLength as Xr,isTypedArray as Kr,NotEqualStencilFunc as Qr,GreaterStencilFunc as Yr,GreaterEqualStencilFunc as Zr,EqualStencilFunc as Jr,LessEqualStencilFunc as es,LessStencilFunc as ts,AlwaysStencilFunc as rs,NeverStencilFunc as ss,DecrementWrapStencilOp as is,IncrementWrapStencilOp as ns,DecrementStencilOp as as,IncrementStencilOp as os,InvertStencilOp as us,ReplaceStencilOp as ls,ZeroStencilOp as ds,KeepStencilOp as cs,MaxEquation as hs,MinEquation as ps,SpotLight as gs,PointLight as ms,DirectionalLight as fs,RectAreaLight as ys,AmbientLight as bs,HemisphereLight as xs,LightProbe as Ts,LinearToneMapping as _s,ReinhardToneMapping as vs,CineonToneMapping as Ns,ACESFilmicToneMapping as Ss,AgXToneMapping as Rs,NeutralToneMapping as Es,Group as As,Loader as ws,FileLoader as Cs,MaterialLoader as Ms,ObjectLoader as Bs}from"./three.core.min.js";export{AdditiveAnimationBlendMode,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrowHelper,AttachedBindMode,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BasicDepthPacking,BatchedMesh,BezierInterpolant,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxHelper,BufferGeometryLoader,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CircleGeometry,Clock,ColorKeyframeTrack,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,ConstantAlphaFactor,ConstantColorFactor,Controls,CubeTextureLoader,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceFrontBack,Curve,CurvePath,CustomToneMapping,Cylindrical,Data3DTexture,DataTextureLoader,DataUtils,DefaultLoadingManager,DetachedBindMode,DirectionalLightHelper,DiscreteInterpolant,DodecahedronGeometry,DynamicCopyUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,ExternalTexture,ExtrudeGeometry,Fog,FogExp2,GLBufferAttribute,GLSL1,GLSL3,GridHelper,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,InstancedBufferGeometry,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,Interpolant,InterpolateBezier,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InterpolationSamplingMode,InterpolationSamplingType,KeyframeTrack,LOD,LatheGeometry,Layers,Light,Line,Line3,LineCurve,LineCurve3,LineLoop,LineSegments,LinearInterpolant,LinearMipMapNearestFilter,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,MOUSE,MeshDepthMaterial,MeshDistanceMaterial,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NormalAnimationBlendMode,NumberKeyframeTrack,OctahedronGeometry,OneMinusConstantAlphaFactor,OneMinusConstantColorFactor,Path,PlaneHelper,PointLightHelper,Points,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RGBADepthPacking,RGBDepthPacking,RGB_BPTC_SIGNED_Format,RGB_BPTC_UNSIGNED_Format,RGDepthPacking,RawShaderMaterial,Ray,Raycaster,RenderTarget3D,RingGeometry,ShaderMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,Skeleton,SkeletonHelper,SkinnedMesh,Source,Spherical,SphericalHarmonics3,SplineCurve,SpotLightHelper,Sprite,StaticCopyUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,TOUCH,TetrahedronGeometry,TextureLoader,TextureUtils,Timer,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,VectorKeyframeTrack,VideoFrameTexture,VideoTexture,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGLRenderTarget,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroSlopeEnding,getConsoleFunction,setConsoleFunction}from"./three.core.min.js";const Fs=["alphaMap","alphaTest","anisotropy","anisotropyMap","anisotropyRotation","aoMap","aoMapIntensity","attenuationColor","attenuationDistance","bumpMap","clearcoat","clearcoatMap","clearcoatNormalMap","clearcoatNormalScale","clearcoatRoughness","color","dispersion","displacementMap","emissive","emissiveIntensity","emissiveMap","envMap","envMapIntensity","gradientMap","ior","iridescence","iridescenceIOR","iridescenceMap","iridescenceThicknessMap","lightMap","lightMapIntensity","map","matcap","metalness","metalnessMap","normalMap","normalScale","opacity","roughness","roughnessMap","sheen","sheenColor","sheenColorMap","sheenRoughnessMap","shininess","specular","specularColor","specularColorMap","specularIntensity","specularIntensityMap","specularMap","thickness","transmission","transmissionMap"],Ls=new WeakMap;class Ps{constructor(e){this.renderObjects=new WeakMap,this.hasNode=this.containsNode(e),this.hasAnimation=!0===e.object.isSkinnedMesh,this.refreshUniforms=Fs,this.renderId=0}firstInitialization(e){return!1===this.renderObjects.has(e)&&(this.getRenderObjectData(e),!0)}needsVelocity(e){const t=e.getMRT();return null!==t&&t.has("velocity")}getRenderObjectData(e){let t=this.renderObjects.get(e);if(void 0===t){const{geometry:r,material:s,object:i}=e;if(t={material:this.getMaterialData(s),geometry:{id:r.id,attributes:this.getAttributesData(r.attributes),indexId:r.index?r.index.id:null,indexVersion:r.index?r.index.version:null,drawRange:{start:r.drawRange.start,count:r.drawRange.count}},worldMatrix:i.matrixWorld.clone()},i.center&&(t.center=i.center.clone()),i.morphTargetInfluences&&(t.morphTargetInfluences=i.morphTargetInfluences.slice()),null!==e.bundle&&(t.version=e.bundle.version),t.material.transmission>0){const{width:r,height:s}=e.context;t.bufferWidth=r,t.bufferHeight=s}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){const t={};for(const r in e){const s=e[r];t[r]={id:s.id,version:s.version}}return t}containsNode(e){const t=e.material;for(const e in t)if(t[e]&&t[e].isNode)return!0;return!!(e.context.modelViewMatrix||e.context.modelNormalViewMatrix||e.context.getAO||e.context.getShadow)}getMaterialData(e){const t={};for(const r of this.refreshUniforms){const s=e[r];null!=s&&("object"==typeof s&&void 0!==s.clone?!0===s.isTexture?t[r]={id:s.id,version:s.version}:t[r]=s.clone():t[r]=s)}return t}equals(e,t){const{object:r,material:s,geometry:i}=e,n=this.getRenderObjectData(e);if(!0!==n.worldMatrix.equals(r.matrixWorld))return n.worldMatrix.copy(r.matrixWorld),!1;const a=n.material;for(const e in a){const t=a[e],r=s[e];if(void 0!==t.equals){if(!1===t.equals(r))return t.copy(r),!1}else if(!0===r.isTexture){if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}else if(t!==r)return a[e]=r,!1}if(a.transmission>0){const{width:t,height:r}=e.context;if(n.bufferWidth!==t||n.bufferHeight!==r)return n.bufferWidth=t,n.bufferHeight=r,!1}const o=n.geometry,u=i.attributes,l=o.attributes,d=Object.keys(l),c=Object.keys(u);if(o.id!==i.id)return o.id=i.id,!1;if(d.length!==c.length)return n.geometry.attributes=this.getAttributesData(u),!1;for(const e of d){const t=l[e],r=u[e];if(void 0===r)return delete l[e],!1;if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}const h=i.index,p=o.indexId,g=o.indexVersion,m=h?h.id:null,f=h?h.version:null;if(p!==m||g!==f)return o.indexId=m,o.indexVersion=f,!1;if(o.drawRange.start!==i.drawRange.start||o.drawRange.count!==i.drawRange.count)return o.drawRange.start=i.drawRange.start,o.drawRange.count=i.drawRange.count,!1;if(n.morphTargetInfluences){let e=!1;for(let t=0;t{const r=e.match(t);if(!r)return null;const s=r[1]||r[2]||"",i=r[3].split("?")[0],n=parseInt(r[4],10),a=parseInt(r[5],10);return{fn:s,file:i.split("/").pop(),line:n,column:a}}).filter(e=>e&&!Ds.some(t=>t.test(e.file)))}(e||(new Error).stack)}getLocation(){if(0===this.stack.length)return"[Unknown location]";const e=this.stack[0],t=e.fn;return`${t?`"${t}()" at `:""}"${e.file}:${e.line}"`}getError(e){if(0===this.stack.length)return e;return`${e}\n${this.stack.map(e=>{const t=`${e.file}:${e.line}:${e.column}`;return e.fn?` at ${e.fn} (${t})`:` at ${t}`}).join("\n")}`}}function Is(e,t=0){let r=3735928559^t,s=1103547991^t;if(e instanceof Array)for(let t,i=0;i>>16,2246822507),r^=Math.imul(s^s>>>13,3266489909),s=Math.imul(s^s>>>16,2246822507),s^=Math.imul(r^r>>>13,3266489909),4294967296*(2097151&s)+(r>>>0)}const Os=e=>Is(e),Vs=e=>Is(e),ks=(...e)=>Is(e),Gs=new Map([[1,"float"],[2,"vec2"],[3,"vec3"],[4,"vec4"],[9,"mat3"],[16,"mat4"]]),$s=new WeakMap;function zs(e){return Gs.get(e)}function Ws(e){if(/[iu]?vec\d/.test(e))return e.startsWith("ivec")?Int32Array:e.startsWith("uvec")?Uint32Array:Float32Array;if(/mat\d/.test(e))return Float32Array;if(/float/.test(e))return Float32Array;if(/uint/.test(e))return Uint32Array;if(/int/.test(e))return Int32Array;throw new Error(`THREE.NodeUtils: Unsupported type: ${e}`)}function Hs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?9:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function qs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?12:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function js(e){return/float|int|uint/.test(e)?4:/vec2/.test(e)?8:/vec3/.test(e)||/vec4/.test(e)?16:/mat2/.test(e)?8:/mat3/.test(e)||/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function Xs(e){if(null==e)return null;const t=typeof e;return!0===e.isNode?"node":"number"===t?"float":"boolean"===t?"bool":"string"===t?"string":"function"===t?"shader":!0===e.isVector2?"vec2":!0===e.isVector3?"vec3":!0===e.isVector4?"vec4":!0===e.isMatrix2?"mat2":!0===e.isMatrix3?"mat3":!0===e.isMatrix4?"mat4":!0===e.isColor?"color":e instanceof ArrayBuffer?"ArrayBuffer":null}function Ks(o,...u){const l=o?o.slice(-4):void 0;return 1===u.length&&("vec2"===l?u=[u[0],u[0]]:"vec3"===l?u=[u[0],u[0],u[0]]:"vec4"===l&&(u=[u[0],u[0],u[0],u[0]])),"color"===o?new e(...u):"vec2"===l?new t(...u):"vec3"===l?new r(...u):"vec4"===l?new s(...u):"mat2"===l?new i(...u):"mat3"===l?new n(...u):"mat4"===l?new a(...u):"bool"===o?u[0]||!1:"float"===o||"int"===o||"uint"===o?u[0]||0:"string"===o?u[0]||"":"ArrayBuffer"===o?Zs(u[0]):null}function Qs(e){let t=$s.get(e);return void 0===t&&(t={},$s.set(e,t)),t}function Ys(e){let t="";const r=new Uint8Array(e);for(let e=0;ee.charCodeAt(0)).buffer}var Js=Object.freeze({__proto__:null,arrayBufferToBase64:Ys,base64ToArrayBuffer:Zs,getAlignmentFromType:js,getDataFromObject:Qs,getLengthFromType:Hs,getMemoryLengthFromType:qs,getTypeFromLength:zs,getTypedArrayFromType:Ws,getValueFromType:Ks,getValueType:Xs,hash:ks,hashArray:Vs,hashString:Os});const ei={VERTEX:"vertex",FRAGMENT:"fragment"},ti={NONE:"none",FRAME:"frame",RENDER:"render",OBJECT:"object"},ri={BOOLEAN:"bool",INTEGER:"int",FLOAT:"float",VECTOR2:"vec2",VECTOR3:"vec3",VECTOR4:"vec4",MATRIX2:"mat2",MATRIX3:"mat3",MATRIX4:"mat4"},si={READ_ONLY:"readOnly",WRITE_ONLY:"writeOnly",READ_WRITE:"readWrite"},ii=["fragment","vertex"],ni=["setup","analyze","generate"],ai=[...ii,"compute"],oi=["x","y","z","w"],ui={analyze:"setup",generate:"analyze"};let li=0;class di extends u{static get type(){return"Node"}constructor(e=null){super(),this.nodeType=e,this.updateType=ti.NONE,this.updateBeforeType=ti.NONE,this.updateAfterType=ti.NONE,this.uuid=l.generateUUID(),this.version=0,this.name="",this.global=!1,this.parents=!1,this.isNode=!0,this._beforeNodes=null,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:li++}),this.stackTrace=null,!0===di.captureStackTrace&&(this.stackTrace=new Us)}set needsUpdate(e){!0===e&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,ti.FRAME)}onRenderUpdate(e){return this.onUpdate(e,ti.RENDER)}onObjectUpdate(e){return this.onUpdate(e,ti.OBJECT)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(const{childNode:e}of this._getChildren())yield e}dispose(){this.dispatchEvent({type:"dispose"})}traverse(e){e(this);for(const t of this.getChildren())t.traverse(e)}_getChildren(e=new Set){const t=[];e.add(this);for(const r of Object.getOwnPropertyNames(this)){const s=this[r];if(!0!==r.startsWith("_")&&!e.has(s))if(!0===Array.isArray(s))for(let e=0;e0&&(e.inputNodes=r)}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const r in e.inputNodes)if(Array.isArray(e.inputNodes[r])){const s=[];for(const i of e.inputNodes[r])s.push(t[i]);this[r]=s}else if("object"==typeof e.inputNodes[r]){const s={};for(const i in e.inputNodes[r]){const n=e.inputNodes[r][i];s[i]=t[n]}this[r]=s}else{const s=e.inputNodes[r];this[r]=t[s]}}}toJSON(e){const{uuid:t,type:r}=this,s=void 0===e||"string"==typeof e;s&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];function n(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(void 0===i&&(i={uuid:t,type:r,meta:e,metadata:{version:4.7,type:"Node",generator:"Node.toJSON"}},!0!==s&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta),s){const t=n(e.textures),r=n(e.images),s=n(e.nodes);t.length>0&&(i.textures=t),r.length>0&&(i.images=r),s.length>0&&(i.nodes=s)}return i}}di.captureStackTrace=!1;class ci extends di{static get type(){return"ArrayElementNode"}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}generate(e){const t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:"uint")} ]`}}class hi extends di{static get type(){return"ConvertNode"}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){const t=this.node.getNodeType(e);let r=null;for(const s of this.convertTo.split("|"))null!==r&&e.getTypeLength(t)!==e.getTypeLength(s)||(r=s);return r}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){const r=this.node,s=this.getNodeType(e),i=r.build(e,s);return e.format(i,s,t)}}class pi extends di{static get type(){return"TempNode"}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if("generate"===e.getBuildStage()){const r=e.getVectorType(this.getNodeType(e,t)),s=e.getDataFromNode(this);if(void 0!==s.propertyName)return e.format(s.propertyName,r,t);if("void"!==r&&"void"!==t&&this.hasDependencies(e)){const i=super.build(e,r),n=e.getVarFromNode(this,null,r),a=e.getPropertyName(n);return e.addLineFlowCode(`${a} = ${i}`,this),s.snippet=i,s.propertyName=a,e.format(s.propertyName,r,t)}}return super.build(e,t)}}class gi extends pi{static get type(){return"JoinNode"}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return null!==this.nodeType?e.getVectorType(this.nodeType):e.getTypeFromLength(this.nodes.reduce((t,r)=>t+e.getTypeLength(r.getNodeType(e)),0))}generate(e,t){const r=this.getNodeType(e),s=e.getTypeLength(r),i=this.nodes,n=e.getComponentType(r),a=[];let u=0;for(const t of i){if(u>=s){o(`TSL: Length of parameters exceeds maximum length of function '${r}()' type.`,this.stackTrace);break}let i,l=t.getNodeType(e),d=e.getTypeLength(l);u+d>s&&(o(`TSL: Length of '${r}()' data exceeds maximum length of output type.`,this.stackTrace),d=s-u,l=e.getTypeFromLength(d)),u+=d,i=t.build(e,l);if(e.getComponentType(l)!==n){const t=e.getTypeFromLength(d,n);i=e.format(i,l,t)}a.push(i)}const l=`${e.getType(r)}( ${a.join(", ")} )`;return e.format(l,r,t)}}const mi=oi.join("");class fi extends di{static get type(){return"SplitNode"}constructor(e,t="x"){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(const t of this.components)e=Math.max(oi.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){const r=this.node,s=e.getTypeLength(r.getNodeType(e));let i=null;if(s>1){let n=null;this.getVectorLength()>=s&&(n=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));const a=r.build(e,n);i=this.components.length===s&&this.components===mi.slice(0,this.components.length)?e.format(a,n,t):e.format(`${a}.${this.components}`,this.getNodeType(e),t)}else i=r.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}}class yi extends pi{static get type(){return"SetNode"}constructor(e,t,r){super(),this.sourceNode=e,this.components=t,this.targetNode=r}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){const{sourceNode:t,components:r,targetNode:s}=this,i=this.getNodeType(e),n=e.getComponentType(s.getNodeType(e)),a=e.getTypeFromLength(r.length,n),o=s.build(e,a),u=t.build(e,i),l=e.getTypeLength(i),d=[];for(let e=0;e(e=>e.replace(/r|s/g,"x").replace(/g|t/g,"y").replace(/b|p/g,"z").replace(/a|q/g,"w"))(e).split("").sort().join("");di.prototype.assign=function(...e){if(!0!==this.isStackNode)return null!==Ni?Ni.assign(this,...e):o("TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().",new Us),this;{const t=Si.get("assign");return this.addToStack(t(...e))}},di.prototype.toVarIntent=function(){return this},di.prototype.get=function(e){return new vi(this,e)};const Ai={};function wi(e,t,r){Ai[e]=Ai[t]=Ai[r]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new fi(this,e),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};const s=e.toUpperCase(),i=t.toUpperCase(),n=r.toUpperCase();di.prototype["set"+s]=di.prototype["set"+i]=di.prototype["set"+n]=function(t){const r=Ei(e);return new yi(this,r,en(t))},di.prototype["flip"+s]=di.prototype["flip"+i]=di.prototype["flip"+n]=function(){const t=Ei(e);return new bi(this,t)}}const Ci=["x","y","z","w"],Mi=["r","g","b","a"],Bi=["s","t","p","q"];for(let e=0;e<4;e++){let t=Ci[e],r=Mi[e],s=Bi[e];wi(t,r,s);for(let i=0;i<4;i++){t=Ci[e]+Ci[i],r=Mi[e]+Mi[i],s=Bi[e]+Bi[i],wi(t,r,s);for(let n=0;n<4;n++){t=Ci[e]+Ci[i]+Ci[n],r=Mi[e]+Mi[i]+Mi[n],s=Bi[e]+Bi[i]+Bi[n],wi(t,r,s);for(let a=0;a<4;a++)t=Ci[e]+Ci[i]+Ci[n]+Ci[a],r=Mi[e]+Mi[i]+Mi[n]+Mi[a],s=Bi[e]+Bi[i]+Bi[n]+Bi[a],wi(t,r,s)}}}for(let e=0;e<32;e++)Ai[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new ci(this,new _i(e,"uint")),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};Object.defineProperties(di.prototype,Ai);const Fi=new WeakMap,Li=function(e,t=null){for(const r in e)e[r]=en(e[r],t);return e},Pi=function(e,t=null){const r=e.length;for(let s=0;su?(o(`TSL: "${r}" parameter length exceeds limit.`,new Us),t.slice(0,u)):t}return null===t?n=(...t)=>i(new e(...sn(d(t)))):null!==r?(r=en(r),n=(...s)=>i(new e(t,...sn(d(s)),r))):n=(...r)=>i(new e(t,...sn(d(r)))),n.setParameterLength=(...e)=>(1===e.length?a=u=e[0]:2===e.length&&([a,u]=e),n),n.setName=e=>(l=e,n),n},Ui=function(e,...t){return new e(...sn(t))};class Ii extends di{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getElementType(e){return this.getOutputNode(e).getElementType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){const{shaderNode:t,rawInputs:r}=this,s=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||"",n=i||"default";if(s[n])return s[n];const a=e.subBuildFn,o=e.fnCall;e.subBuildFn=i,e.fnCall=this;let u=null;if(t.layout){let s=Fi.get(e.constructor);void 0===s&&(s=new WeakMap,Fi.set(e.constructor,s));let i=s.get(t);void 0===i&&(i=en(e.buildFunctionNode(t)),s.set(t,i)),e.addInclude(i);const n=r?function(e){let t;rn(e);t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0];return t}(r):null;u=en(i.call(n))}else{const s=new Proxy(e,{get:(e,t,r)=>{let s;return s=Symbol.iterator===t?function*(){yield}:Reflect.get(e,t,r),s}}),i=r?function(e){let t=0;return rn(e),new Proxy(e,{get:(r,s,i)=>{let n;if("length"===s)return n=e.length,n;if(Symbol.iterator===s)n=function*(){for(const t of e)yield en(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){const r=e[0];n=void 0===r[s]?r[t++]:Reflect.get(r,s,i)}else e[0]instanceof di&&(n=void 0===e[s]?e[t++]:Reflect.get(e,s,i));else n=Reflect.get(r,s,i);n=en(n)}return n}})}(r):null,n=Array.isArray(r)?r.length>0:null!==r,a=t.jsFunc,o=n||a.length>1?a(i,s):a(s);u=en(o)}return e.subBuildFn=a,e.fnCall=o,t.once&&(s[n]=u),u}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){const t=e.getNodeProperties(this),r=e.getSubBuildOutput(this);return t[r]=t[r]||this.setupOutput(e),t[r].subBuild=e.getClosestSubBuild(this),t[r]}build(e,t=null){let r=null;const s=e.getBuildStage(),i=e.getNodeProperties(this),n=e.getSubBuildOutput(this),a=this.getOutputNode(e),o=e.fnCall;if(e.fnCall=this,"setup"===s){const t=e.getSubBuildProperty("initialized",this);if(!0!==i[t]&&(i[t]=!0,i[n]=this.getOutputNode(e),i[n].build(e),this.shaderNode.subBuilds))for(const t of e.chaining){const r=e.getDataFromNode(t,"any");r.subBuilds=r.subBuilds||new Set;for(const e of this.shaderNode.subBuilds)r.subBuilds.add(e)}r=i[n]}else"analyze"===s?a.build(e,t):"generate"===s&&(r=a.build(e,t)||"");return e.fnCall=o,r}}class Oi extends di{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}getLayout(){return this.layout}call(e=null){return new Ii(this,e)}setup(){return this.call()}}const Vi=[!1,!0],ki=[0,1,2,3],Gi=[-1,-2],$i=[.5,1.5,1/3,1e-6,1e6,Math.PI,2*Math.PI,1/Math.PI,2/Math.PI,1/(2*Math.PI),Math.PI/2],zi=new Map;for(const e of Vi)zi.set(e,new _i(e));const Wi=new Map;for(const e of ki)Wi.set(e,new _i(e,"uint"));const Hi=new Map([...Wi].map(e=>new _i(e.value,"int")));for(const e of Gi)Hi.set(e,new _i(e,"int"));const qi=new Map([...Hi].map(e=>new _i(e.value)));for(const e of $i)qi.set(e,new _i(e));for(const e of $i)qi.set(-e,new _i(-e));const ji={bool:zi,uint:Wi,ints:Hi,float:qi},Xi=new Map([...zi,...qi]),Ki=(e,t)=>Xi.has(e)?Xi.get(e):!0===e.isNode?e:new _i(e,t),Qi=function(e,t=null){return(...r)=>{for(const t of r)if(void 0===t)return o(`TSL: Invalid parameter for the type "${e}".`,new Us),new _i(0,e);if((0===r.length||!["bool","float","int","uint"].includes(e)&&r.every(e=>{const t=typeof e;return"object"!==t&&"function"!==t}))&&(r=[Ks(e,...r)]),1===r.length&&null!==t&&t.has(r[0]))return tn(t.get(r[0]));if(1===r.length){const t=Ki(r[0],e);return t.nodeType===e?tn(t):tn(new hi(t,e))}const s=r.map(e=>Ki(e));return tn(new gi(s,e))}},Yi=e=>"object"==typeof e&&null!==e?e.value:e,Zi=e=>null!=e?e.nodeType||e.convertTo||("string"==typeof e?e:null):null;function Ji(e,t){return new Oi(e,t)}const en=(e,t=null)=>function(e,t=null){const r=Xs(e);return"node"===r?e:null===t&&("float"===r||"boolean"===r)||r&&"shader"!==r&&"string"!==r?en(Ki(e,t)):"shader"===r?e.isFn?e:dn(e):e}(e,t),tn=(e,t=null)=>en(e,t).toVarIntent(),rn=(e,t=null)=>new Li(e,t),sn=(e,t=null)=>new Pi(e,t),nn=(e,t=null,r=null,s=null)=>new Di(e,t,r,s),an=(e,...t)=>new Ui(e,...t),on=(e,t=null,r=null,s={})=>new Di(e,t,r,{...s,intent:!0});let un=0;class ln extends di{constructor(e,t=null){super();let r=null;null!==t&&("object"==typeof t?r=t.return:("string"==typeof t?r=t:o("TSL: Invalid layout type.",new Us),t=null)),this.shaderNode=new Ji(e,r),null!==t&&this.setLayout(t),this.isFn=!0}setLayout(e){const t=this.shaderNode.nodeType;if("object"!=typeof e.inputs){const r={name:"fn"+un++,type:t,inputs:[]};for(const t in e)"return"!==t&&r.inputs.push({name:t,type:e[t]});e=r}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||"float"}call(...e){const t=this.shaderNode.call(e);return"void"===this.shaderNode.nodeType&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){const t=this.getNodeType(e);return o('TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".',this.stackTrace),e.generateConst(t)}}function dn(e,t=null){const r=new ln(e,t);return new Proxy(()=>{},{apply:(e,t,s)=>r.call(...s),get:(e,t,s)=>Reflect.get(r,t,s),set:(e,t,s,i)=>Reflect.set(r,t,s,i)})}const cn=e=>{Ni=e},hn=()=>Ni,pn=(...e)=>Ni.If(...e);function gn(e){return Ni&&Ni.addToStack(e),e}Ri("toStack",gn);const mn=new Qi("color"),fn=new Qi("float",ji.float),yn=new Qi("int",ji.ints),bn=new Qi("uint",ji.uint),xn=new Qi("bool",ji.bool),Tn=new Qi("vec2"),_n=new Qi("ivec2"),vn=new Qi("uvec2"),Nn=new Qi("bvec2"),Sn=new Qi("vec3"),Rn=new Qi("ivec3"),En=new Qi("uvec3"),An=new Qi("bvec3"),wn=new Qi("vec4"),Cn=new Qi("ivec4"),Mn=new Qi("uvec4"),Bn=new Qi("bvec4"),Fn=new Qi("mat2"),Ln=new Qi("mat3"),Pn=new Qi("mat4");Ri("toColor",mn),Ri("toFloat",fn),Ri("toInt",yn),Ri("toUint",bn),Ri("toBool",xn),Ri("toVec2",Tn),Ri("toIVec2",_n),Ri("toUVec2",vn),Ri("toBVec2",Nn),Ri("toVec3",Sn),Ri("toIVec3",Rn),Ri("toUVec3",En),Ri("toBVec3",An),Ri("toVec4",wn),Ri("toIVec4",Cn),Ri("toUVec4",Mn),Ri("toBVec4",Bn),Ri("toMat2",Fn),Ri("toMat3",Ln),Ri("toMat4",Pn);const Dn=nn(ci).setParameterLength(2),Un=(e,t)=>new hi(en(e),t);Ri("element",Dn),Ri("convert",Un);Ri("append",e=>(d("TSL: .append() has been renamed to .toStack().",new Us),gn(e)));class In extends di{static get type(){return"PropertyNode"}constructor(e,t=null,r=!1){super(e),this.name=t,this.varying=r,this.isPropertyNode=!0,this.global=!0}customCacheKey(){return Os(this.type+":"+(this.name||"")+":"+(this.varying?"1":"0"))}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return!0===this.varying?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}}const On=(e,t)=>new In(e,t),Vn=(e,t)=>new In(e,t,!0),kn=an(In,"vec4","DiffuseColor"),Gn=an(In,"vec3","DiffuseContribution"),$n=an(In,"vec3","EmissiveColor"),zn=an(In,"float","Roughness"),Wn=an(In,"float","Metalness"),Hn=an(In,"float","Clearcoat"),qn=an(In,"float","ClearcoatRoughness"),jn=an(In,"vec3","Sheen"),Xn=an(In,"float","SheenRoughness"),Kn=an(In,"float","Iridescence"),Qn=an(In,"float","IridescenceIOR"),Yn=an(In,"float","IridescenceThickness"),Zn=an(In,"float","AlphaT"),Jn=an(In,"float","Anisotropy"),ea=an(In,"vec3","AnisotropyT"),ta=an(In,"vec3","AnisotropyB"),ra=an(In,"color","SpecularColor"),sa=an(In,"color","SpecularColorBlended"),ia=an(In,"float","SpecularF90"),na=an(In,"float","Shininess"),aa=an(In,"vec4","Output"),oa=an(In,"float","dashSize"),ua=an(In,"float","gapSize"),la=an(In,"float","pointWidth"),da=an(In,"float","IOR"),ca=an(In,"float","Transmission"),ha=an(In,"float","Thickness"),pa=an(In,"float","AttenuationDistance"),ga=an(In,"color","AttenuationColor"),ma=an(In,"float","Dispersion");class fa extends di{static get type(){return"UniformGroupNode"}constructor(e,t=!1,r=1){super("string"),this.name=e,this.shared=t,this.order=r,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}}const ya=e=>new fa(e),ba=(e,t=0)=>new fa(e,!0,t),xa=ba("frame"),Ta=ba("render"),_a=ya("object");class va extends xi{static get type(){return"UniformNode"}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name="",this.groupNode=_a}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{const r=e(t,this);void 0!==r&&(this.value=r)},t)}getInputType(e){let t=super.getInputType(e);return"bool"===t&&(t="uint"),t}generate(e,t){const r=this.getNodeType(e),s=this.getUniformHash(e);let i=e.getNodeFromHash(s);void 0===i&&(e.setHashNode(this,s),i=this);const n=i.getInputType(e),a=e.getUniformFromNode(i,n,e.shaderStage,this.name||e.context.nodeName),o=e.getPropertyName(a);void 0!==e.context.nodeName&&delete e.context.nodeName;let u=o;if("bool"===r){const t=e.getDataFromNode(this);let s=t.propertyName;if(void 0===s){const i=e.getVarFromNode(this,null,"bool");s=e.getPropertyName(i),t.propertyName=s,u=e.format(o,n,r),e.addLineFlowCode(`${s} = ${u}`,this)}u=s}return e.format(u,r,t)}}const Na=(e,t)=>{const r=Zi(t||e);if(r===e&&(e=Ks(r)),e&&!0===e.isNode){let t=e.value;e.traverse(e=>{!0===e.isConstNode&&(t=e.value)}),e=t}return new va(e,r)};class Sa extends pi{static get type(){return"ArrayNode"}constructor(e,t,r=null){super(e),this.count=t,this.values=r,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return null===this.nodeType?this.values[0].getNodeType(e):this.nodeType}getElementType(e){return this.getNodeType(e)}getMemberType(e,t){return null===this.nodeType?this.values[0].getMemberType(e,t):super.getMemberType(e,t)}generate(e){const t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}}const Ra=(...e)=>{let t;if(1===e.length){const r=e[0];t=new Sa(null,r.length,r)}else{const r=e[0],s=e[1];t=new Sa(r,s)}return en(t)};Ri("toArray",(e,t)=>Ra(Array(t).fill(e)));class Ea extends pi{static get type(){return"AssignNode"}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return"void"!==t?this.targetNode.getNodeType(e):"void"}needsSplitAssign(e){const{targetNode:t}=this;if(!1===e.isAvailable("swizzleAssign")&&t.isSplitNode&&t.components.length>1){const r=e.getTypeLength(t.node.getNodeType(e));return oi.join("").slice(0,r)!==t.components}return!1}setup(e){const{targetNode:t,sourceNode:r}=this,s=t.getScope();e.getDataFromNode(s).assign=!0;const i=e.getNodeProperties(this);i.sourceNode=r,i.targetNode=t.context({assign:!0})}generate(e,t){const{targetNode:r,sourceNode:s}=e.getNodeProperties(this),i=this.needsSplitAssign(e),n=r.build(e),a=r.getNodeType(e),o=s.build(e,a),u=s.getNodeType(e),l=e.getDataFromNode(this);let d;if(!0===l.initialized)"void"!==t&&(d=n);else if(i){const s=e.getVarFromNode(this,null,a),i=e.getPropertyName(s);e.addLineFlowCode(`${i} = ${o}`,this);const u=r.node,l=u.node.context({assign:!0}).build(e);for(let t=0;t{const s=r.type;let i;return i="pointer"===s?"&"+t.build(e):t.build(e,s),i};if(Array.isArray(i)){if(i.length>s.length)o("TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'."),i.length=s.length;else if(i.length(t=t.length>1||t[0]&&!0===t[0].isNode?sn(t):rn(t[0]),new wa(en(e),t));Ri("call",Ca);const Ma={"==":"equal","!=":"notEqual","<":"lessThan",">":"greaterThan","<=":"lessThanEqual",">=":"greaterThanEqual","%":"mod"};class Ba extends pi{static get type(){return"OperatorNode"}constructor(e,t,r,...s){if(super(),s.length>0){let i=new Ba(e,t,r);for(let t=0;t>"===r||"<<"===r)return e.getIntegerType(n);if("!"===r||"&&"===r||"||"===r||"^^"===r)return"bool";if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r){const t=Math.max(e.getTypeLength(n),e.getTypeLength(a));return t>1?`bvec${t}`:"bool"}if(e.isMatrix(n)){if("float"===a)return n;if(e.isVector(a))return e.getVectorFromMatrix(n);if(e.isMatrix(a))return n}else if(e.isMatrix(a)){if("float"===n)return a;if(e.isVector(n))return e.getVectorFromMatrix(a)}return e.getTypeLength(a)>e.getTypeLength(n)?a:n}generate(e,t){const r=this.op,{aNode:s,bNode:i}=this,n=this.getNodeType(e,t);let a=null,o=null;"void"!==n?(a=s.getNodeType(e),o=i?i.getNodeType(e):null,"<"===r||">"===r||"<="===r||">="===r||"=="===r||"!="===r?e.isVector(a)?o=a:e.isVector(o)?a=o:a!==o&&(a=o="float"):">>"===r||"<<"===r?(a=n,o=e.changeComponentType(o,"uint")):"%"===r?(a=n,o=e.isInteger(a)&&e.isInteger(o)?o:a):e.isMatrix(a)?"float"===o?o="float":e.isVector(o)?o=e.getVectorFromMatrix(a):e.isMatrix(o)||(a=o=n):a=e.isMatrix(o)?"float"===a?"float":e.isVector(a)?e.getVectorFromMatrix(o):o=n:o=n):a=o=n;const u=s.build(e,a),l=i?i.build(e,o):null,d=e.getFunctionOperator(r);if("void"!==t){const s=e.renderer.coordinateSystem===c;if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r)return s&&e.isVector(a)?e.format(`${this.getOperatorMethod(e,t)}( ${u}, ${l} )`,n,t):e.format(`( ${u} ${r} ${l} )`,n,t);if("%"===r)return e.isInteger(o)?e.format(`( ${u} % ${l} )`,n,t):e.format(`${this.getOperatorMethod(e,n)}( ${u}, ${l} )`,n,t);if("!"===r||"~"===r)return e.format(`(${r}${u})`,a,t);if(d)return e.format(`${d}( ${u}, ${l} )`,n,t);if(e.isMatrix(a)&&"float"===o)return e.format(`( ${l} ${r} ${u} )`,n,t);if("float"===a&&e.isMatrix(o))return e.format(`${u} ${r} ${l}`,n,t);{let i=`( ${u} ${r} ${l} )`;return!s&&"bool"===n&&e.isVector(a)&&e.isVector(o)&&(i=`all${i}`),e.format(i,n,t)}}if("void"!==a)return d?e.format(`${d}( ${u}, ${l} )`,n,t):e.isMatrix(a)&&"float"===o?e.format(`${l} ${r} ${u}`,n,t):e.format(`${u} ${r} ${l}`,n,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}}const Fa=on(Ba,"+").setParameterLength(2,1/0).setName("add"),La=on(Ba,"-").setParameterLength(2,1/0).setName("sub"),Pa=on(Ba,"*").setParameterLength(2,1/0).setName("mul"),Da=on(Ba,"/").setParameterLength(2,1/0).setName("div"),Ua=on(Ba,"%").setParameterLength(2).setName("mod"),Ia=on(Ba,"==").setParameterLength(2).setName("equal"),Oa=on(Ba,"!=").setParameterLength(2).setName("notEqual"),Va=on(Ba,"<").setParameterLength(2).setName("lessThan"),ka=on(Ba,">").setParameterLength(2).setName("greaterThan"),Ga=on(Ba,"<=").setParameterLength(2).setName("lessThanEqual"),$a=on(Ba,">=").setParameterLength(2).setName("greaterThanEqual"),za=on(Ba,"&&").setParameterLength(2,1/0).setName("and"),Wa=on(Ba,"||").setParameterLength(2,1/0).setName("or"),Ha=on(Ba,"!").setParameterLength(1).setName("not"),qa=on(Ba,"^^").setParameterLength(2).setName("xor"),ja=on(Ba,"&").setParameterLength(2).setName("bitAnd"),Xa=on(Ba,"~").setParameterLength(1).setName("bitNot"),Ka=on(Ba,"|").setParameterLength(2).setName("bitOr"),Qa=on(Ba,"^").setParameterLength(2).setName("bitXor"),Ya=on(Ba,"<<").setParameterLength(2).setName("shiftLeft"),Za=on(Ba,">>").setParameterLength(2).setName("shiftRight"),Ja=dn(([e])=>(e.addAssign(1),e)),eo=dn(([e])=>(e.subAssign(1),e)),to=dn(([e])=>{const t=yn(e).toConst();return e.addAssign(1),t}),ro=dn(([e])=>{const t=yn(e).toConst();return e.subAssign(1),t});Ri("add",Fa),Ri("sub",La),Ri("mul",Pa),Ri("div",Da),Ri("mod",Ua),Ri("equal",Ia),Ri("notEqual",Oa),Ri("lessThan",Va),Ri("greaterThan",ka),Ri("lessThanEqual",Ga),Ri("greaterThanEqual",$a),Ri("and",za),Ri("or",Wa),Ri("not",Ha),Ri("xor",qa),Ri("bitAnd",ja),Ri("bitNot",Xa),Ri("bitOr",Ka),Ri("bitXor",Qa),Ri("shiftLeft",Ya),Ri("shiftRight",Za),Ri("incrementBefore",Ja),Ri("decrementBefore",eo),Ri("increment",to),Ri("decrement",ro);const so=(e,t)=>(d('TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.',new Us),Ua(yn(e),yn(t)));Ri("modInt",so);class io extends pi{static get type(){return"MathNode"}constructor(e,t,r=null,s=null){if(super(),(e===io.MAX||e===io.MIN)&&arguments.length>3){let i=new io(e,t,r);for(let t=2;tn&&i>a?t:n>a?r:a>i?s:t}getNodeType(e){const t=this.method;return t===io.LENGTH||t===io.DISTANCE||t===io.DOT?"float":t===io.CROSS?"vec3":t===io.ALL||t===io.ANY?"bool":t===io.EQUALS?e.changeComponentType(this.aNode.getNodeType(e),"bool"):this.getInputType(e)}setup(e){const{aNode:t,bNode:r,method:s}=this;let i=null;if(s===io.ONE_MINUS)i=La(1,t);else if(s===io.RECIPROCAL)i=Da(1,t);else if(s===io.DIFFERENCE)i=Fo(La(t,r));else if(s===io.TRANSFORM_DIRECTION){let s=t,n=r;e.isMatrix(s.getNodeType(e))?n=wn(Sn(n),0):s=wn(Sn(s),0);const a=Pa(s,n).xyz;i=So(a)}return null!==i?i:super.setup(e)}generate(e,t){if(e.getNodeProperties(this).outputNode)return super.generate(e,t);let r=this.method;const s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=this.cNode,u=e.renderer.coordinateSystem;if(r===io.NEGATE)return e.format("( - "+n.build(e,i)+" )",s,t);{const l=[];return r===io.CROSS?l.push(n.build(e,s),a.build(e,s)):u===c&&r===io.STEP?l.push(n.build(e,1===e.getTypeLength(n.getNodeType(e))?"float":i),a.build(e,i)):u!==c||r!==io.MIN&&r!==io.MAX?r===io.REFRACT?l.push(n.build(e,i),a.build(e,i),o.build(e,"float")):r===io.MIX?l.push(n.build(e,i),a.build(e,i),o.build(e,1===e.getTypeLength(o.getNodeType(e))?"float":i)):(u===h&&r===io.ATAN&&null!==a&&(r="atan2"),"fragment"===e.shaderStage||r!==io.DFDX&&r!==io.DFDY||(d(`TSL: '${r}' is not supported in the ${e.shaderStage} stage.`,this.stackTrace),r="/*"+r+"*/"),l.push(n.build(e,i)),null!==a&&l.push(a.build(e,i)),null!==o&&l.push(o.build(e,i))):l.push(n.build(e,i),a.build(e,1===e.getTypeLength(a.getNodeType(e))?"float":i)),e.format(`${e.getMethod(r,s)}( ${l.join(", ")} )`,s,t)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}io.ALL="all",io.ANY="any",io.RADIANS="radians",io.DEGREES="degrees",io.EXP="exp",io.EXP2="exp2",io.LOG="log",io.LOG2="log2",io.SQRT="sqrt",io.INVERSE_SQRT="inversesqrt",io.FLOOR="floor",io.CEIL="ceil",io.NORMALIZE="normalize",io.FRACT="fract",io.SIN="sin",io.COS="cos",io.TAN="tan",io.ASIN="asin",io.ACOS="acos",io.ATAN="atan",io.ABS="abs",io.SIGN="sign",io.LENGTH="length",io.NEGATE="negate",io.ONE_MINUS="oneMinus",io.DFDX="dFdx",io.DFDY="dFdy",io.ROUND="round",io.RECIPROCAL="reciprocal",io.TRUNC="trunc",io.FWIDTH="fwidth",io.TRANSPOSE="transpose",io.DETERMINANT="determinant",io.INVERSE="inverse",io.EQUALS="equals",io.MIN="min",io.MAX="max",io.STEP="step",io.REFLECT="reflect",io.DISTANCE="distance",io.DIFFERENCE="difference",io.DOT="dot",io.CROSS="cross",io.POW="pow",io.TRANSFORM_DIRECTION="transformDirection",io.MIX="mix",io.CLAMP="clamp",io.REFRACT="refract",io.SMOOTHSTEP="smoothstep",io.FACEFORWARD="faceforward";const no=fn(1e-6),ao=fn(1e6),oo=fn(Math.PI),uo=fn(2*Math.PI),lo=fn(2*Math.PI),co=fn(.5*Math.PI),ho=on(io,io.ALL).setParameterLength(1),po=on(io,io.ANY).setParameterLength(1),go=on(io,io.RADIANS).setParameterLength(1),mo=on(io,io.DEGREES).setParameterLength(1),fo=on(io,io.EXP).setParameterLength(1),yo=on(io,io.EXP2).setParameterLength(1),bo=on(io,io.LOG).setParameterLength(1),xo=on(io,io.LOG2).setParameterLength(1),To=on(io,io.SQRT).setParameterLength(1),_o=on(io,io.INVERSE_SQRT).setParameterLength(1),vo=on(io,io.FLOOR).setParameterLength(1),No=on(io,io.CEIL).setParameterLength(1),So=on(io,io.NORMALIZE).setParameterLength(1),Ro=on(io,io.FRACT).setParameterLength(1),Eo=on(io,io.SIN).setParameterLength(1),Ao=on(io,io.COS).setParameterLength(1),wo=on(io,io.TAN).setParameterLength(1),Co=on(io,io.ASIN).setParameterLength(1),Mo=on(io,io.ACOS).setParameterLength(1),Bo=on(io,io.ATAN).setParameterLength(1,2),Fo=on(io,io.ABS).setParameterLength(1),Lo=on(io,io.SIGN).setParameterLength(1),Po=on(io,io.LENGTH).setParameterLength(1),Do=on(io,io.NEGATE).setParameterLength(1),Uo=on(io,io.ONE_MINUS).setParameterLength(1),Io=on(io,io.DFDX).setParameterLength(1),Oo=on(io,io.DFDY).setParameterLength(1),Vo=on(io,io.ROUND).setParameterLength(1),ko=on(io,io.RECIPROCAL).setParameterLength(1),Go=on(io,io.TRUNC).setParameterLength(1),$o=on(io,io.FWIDTH).setParameterLength(1),zo=on(io,io.TRANSPOSE).setParameterLength(1),Wo=on(io,io.DETERMINANT).setParameterLength(1),Ho=on(io,io.INVERSE).setParameterLength(1),qo=on(io,io.MIN).setParameterLength(2,1/0),jo=on(io,io.MAX).setParameterLength(2,1/0),Xo=on(io,io.STEP).setParameterLength(2),Ko=on(io,io.REFLECT).setParameterLength(2),Qo=on(io,io.DISTANCE).setParameterLength(2),Yo=on(io,io.DIFFERENCE).setParameterLength(2),Zo=on(io,io.DOT).setParameterLength(2),Jo=on(io,io.CROSS).setParameterLength(2),eu=on(io,io.POW).setParameterLength(2),tu=e=>Pa(e,e),ru=e=>Pa(e,e,e),su=e=>Pa(e,e,e,e),iu=on(io,io.TRANSFORM_DIRECTION).setParameterLength(2),nu=e=>Pa(Lo(e),eu(Fo(e),1/3)),au=e=>Zo(e,e),ou=on(io,io.MIX).setParameterLength(3),uu=(e,t=0,r=1)=>new io(io.CLAMP,en(e),en(t),en(r)),lu=e=>uu(e),du=on(io,io.REFRACT).setParameterLength(3),cu=on(io,io.SMOOTHSTEP).setParameterLength(3),hu=on(io,io.FACEFORWARD).setParameterLength(3),pu=dn(([e])=>{const t=Zo(e.xy,Tn(12.9898,78.233)),r=Ua(t,oo);return Ro(Eo(r).mul(43758.5453))}),gu=(e,t,r)=>ou(t,r,e),mu=(e,t,r)=>cu(t,r,e),fu=(e,t)=>Xo(t,e),yu=hu,bu=_o;Ri("all",ho),Ri("any",po),Ri("radians",go),Ri("degrees",mo),Ri("exp",fo),Ri("exp2",yo),Ri("log",bo),Ri("log2",xo),Ri("sqrt",To),Ri("inverseSqrt",_o),Ri("floor",vo),Ri("ceil",No),Ri("normalize",So),Ri("fract",Ro),Ri("sin",Eo),Ri("cos",Ao),Ri("tan",wo),Ri("asin",Co),Ri("acos",Mo),Ri("atan",Bo),Ri("abs",Fo),Ri("sign",Lo),Ri("length",Po),Ri("lengthSq",au),Ri("negate",Do),Ri("oneMinus",Uo),Ri("dFdx",Io),Ri("dFdy",Oo),Ri("round",Vo),Ri("reciprocal",ko),Ri("trunc",Go),Ri("fwidth",$o),Ri("min",qo),Ri("max",jo),Ri("step",fu),Ri("reflect",Ko),Ri("distance",Qo),Ri("dot",Zo),Ri("cross",Jo),Ri("pow",eu),Ri("pow2",tu),Ri("pow3",ru),Ri("pow4",su),Ri("transformDirection",iu),Ri("mix",gu),Ri("clamp",uu),Ri("refract",du),Ri("smoothstep",mu),Ri("faceForward",hu),Ri("difference",Yo),Ri("saturate",lu),Ri("cbrt",nu),Ri("transpose",zo),Ri("determinant",Wo),Ri("inverse",Ho),Ri("rand",pu);class xu extends di{static get type(){return"ConditionalNode"}constructor(e,t,r=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=r}getNodeType(e){const{ifNode:t,elseNode:r}=e.getNodeProperties(this);if(void 0===t)return e.flowBuildStage(this,"setup"),this.getNodeType(e);const s=t.getNodeType(e);if(null!==r){const t=r.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(s))return t}return s}setup(e){const t=this.condNode,r=this.ifNode.isolate(),s=this.elseNode?this.elseNode.isolate():null,i=e.context.nodeBlock;e.getDataFromNode(r).parentNodeBlock=i,null!==s&&(e.getDataFromNode(s).parentNodeBlock=i);const n=e.context.uniformFlow,a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n?r:r.context({nodeBlock:r}),a.elseNode=s?n?s:s.context({nodeBlock:s}):null}generate(e,t){const r=this.getNodeType(e),s=e.getDataFromNode(this);if(void 0!==s.nodeProperty)return s.nodeProperty;const{condNode:i,ifNode:n,elseNode:a}=e.getNodeProperties(this),o=e.currentFunctionNode,u="void"!==t,l=u?On(r).build(e):"";s.nodeProperty=l;const c=i.build(e,"bool");if(e.context.uniformFlow&&null!==a){const s=n.build(e,r),i=a.build(e,r),o=e.getTernary(c,s,i);return e.format(o,r,t)}e.addFlowCode(`\n${e.tab}if ( ${c} ) {\n\n`).addFlowTab();let h=n.build(e,r);if(h&&(u?h=l+" = "+h+";":(h="return "+h+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),h="// "+h))),e.removeFlowTab().addFlowCode(e.tab+"\t"+h+"\n\n"+e.tab+"}"),null!==a){e.addFlowCode(" else {\n\n").addFlowTab();let t=a.build(e,r);t&&(u?t=l+" = "+t+";":(t="return "+t+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),t="// "+t))),e.removeFlowTab().addFlowCode(e.tab+"\t"+t+"\n\n"+e.tab+"}\n\n")}else e.addFlowCode("\n\n");return e.format(l,r,t)}}const Tu=nn(xu).setParameterLength(2,3);Ri("select",Tu);class _u extends di{static get type(){return"ContextNode"}constructor(e=null,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getFlowContextData(){const e=[];return this.traverse(t=>{!0===t.isContextNode&&e.push(t.value)}),Object.assign({},...e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}setup(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}generate(e,t){const r=e.addContext(this.value),s=this.node.build(e,t);return e.setContext(r),s}}const vu=(e=null,t={})=>{let r=e;return null!==r&&!0===r.isNode||(t=r||t,r=null),new _u(r,t)},Nu=e=>vu(e,{uniformFlow:!0}),Su=(e,t)=>vu(e,{nodeName:t});function Ru(e,t,r=null){return vu(r,{getShadow:({light:r,shadowColorNode:s})=>t===r?s.mul(e):s})}function Eu(e,t=null){return vu(t,{getAO:(t,{material:r})=>!0===r.transparent?t:null!==t?t.mul(e):e})}function Au(e,t){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),Su(e,t)}Ri("context",vu),Ri("label",Au),Ri("uniformFlow",Nu),Ri("setName",Su),Ri("builtinShadowContext",(e,t,r)=>Ru(t,r,e)),Ri("builtinAOContext",(e,t)=>Eu(t,e));class wu extends di{static get type(){return"VarNode"}constructor(e,t=null,r=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=r,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}isIntent(e){return!0!==e.getDataFromNode(this).forceDeclaration&&this.intent}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}isAssign(e){return e.getDataFromNode(this).assign}build(...e){const t=e[0];if(!1===this._hasStack(t)&&"setup"===t.buildStage&&(t.context.nodeLoop||t.context.nodeBlock)){let e=!1;if(this.node.isShaderCallNodeInternal&&null===this.node.shaderNode.getLayout()&&t.fnCall&&t.fnCall.shaderNode){if(t.getDataFromNode(this.node.shaderNode).hasLoop){t.getDataFromNode(this).forceDeclaration=!0,e=!0}}const r=t.getBaseStack();e?r.addToStackBefore(this):r.addToStack(this)}return this.isIntent(t)&&!0!==this.isAssign(t)?this.node.build(...e):super.build(...e)}generate(e){const{node:t,name:r,readOnly:s}=this,{renderer:i}=e,n=!0===i.backend.isWebGPUBackend;let a=!1,u=!1;s&&(a=e.isDeterministic(t),u=n?s:a);const l=this.getNodeType(e);if("void"==l){!0!==this.isIntent(e)&&o('TSL: ".toVar()" can not be used with void type.',this.stackTrace);return t.build(e)}const d=e.getVectorType(l),c=t.build(e,d),h=e.getVarFromNode(this,r,d,void 0,u),p=e.getPropertyName(h);let g=p;if(u)if(n)g=a?`const ${p}`:`let ${p}`;else{const r=t.getArrayCount(e);g=`const ${e.getVar(h.type,p,r)}`}return e.addLineFlowCode(`${g} = ${c}`,this),p}_hasStack(e){return void 0!==e.getDataFromNode(this).stack}}const Cu=nn(wu),Mu=(e,t=null)=>Cu(e,t).toStack(),Bu=(e,t=null)=>Cu(e,t,!0).toStack(),Fu=e=>Cu(e).setIntent(!0).toStack();Ri("toVar",Mu),Ri("toConst",Bu),Ri("toVarIntent",Fu);class Lu extends di{static get type(){return"SubBuild"}constructor(e,t,r=null){super(r),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(null!==this.nodeType)return this.nodeType;e.addSubBuild(this.name);const t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);const r=this.node.build(e,...t);return e.removeSubBuild(),r}}const Pu=(e,t,r=null)=>new Lu(en(e),t,r);class Du extends di{static get type(){return"VaryingNode"}constructor(e,t=null){super(),this.node=Pu(e,"VERTEX"),this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){const t=e.getNodeProperties(this);let r=t.varying;if(void 0===r){const s=this.name,i=this.getNodeType(e),n=this.interpolationType,a=this.interpolationSampling;t.varying=r=e.getVaryingFromNode(this,s,i,n,a),t.node=Pu(this.node,"VERTEX")}return r.needsInterpolation||(r.needsInterpolation="fragment"===e.shaderStage),r}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}generate(e){const t=e.getSubBuildProperty("property",e.currentStack),r=e.getNodeProperties(this),s=this.setupVarying(e);if(void 0===r[t]){const i=this.getNodeType(e),n=e.getPropertyName(s,ei.VERTEX);e.flowNodeFromShaderStage(ei.VERTEX,r.node,i,n),r[t]=n}return e.getPropertyName(s)}}const Uu=nn(Du).setParameterLength(1,2),Iu=e=>Uu(e);Ri("toVarying",Uu),Ri("toVertexStage",Iu);const Ou=dn(([e])=>{const t=e.mul(.9478672986).add(.0521327014).pow(2.4),r=e.mul(.0773993808),s=e.lessThanEqual(.04045);return ou(t,r,s)}).setLayout({name:"sRGBTransferEOTF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),Vu=dn(([e])=>{const t=e.pow(.41666).mul(1.055).sub(.055),r=e.mul(12.92),s=e.lessThanEqual(.0031308);return ou(t,r,s)}).setLayout({name:"sRGBTransferOETF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),ku="WorkingColorSpace";class Gu extends pi{static get type(){return"ColorSpaceNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this.source=t,this.target=r}resolveColorSpace(e,t){return t===ku?p.workingColorSpace:"OutputColorSpace"===t?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){const{colorNode:t}=this,r=this.resolveColorSpace(e,this.source),s=this.resolveColorSpace(e,this.target);let i=t;return!1!==p.enabled&&r!==s&&r&&s?(p.getTransfer(r)===g&&(i=wn(Ou(i.rgb),i.a)),p.getPrimaries(r)!==p.getPrimaries(s)&&(i=wn(Ln(p._getMatrix(new n,r,s)).mul(i.rgb),i.a)),p.getTransfer(s)===g&&(i=wn(Vu(i.rgb),i.a)),i):i}}const $u=(e,t)=>new Gu(en(e),ku,t),zu=(e,t)=>new Gu(en(e),t,ku);Ri("workingToColorSpace",$u),Ri("colorSpaceToWorking",zu);let Wu=class extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}};class Hu extends di{static get type(){return"ReferenceBaseNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.updateType=ti.OBJECT}setGroup(e){return this.group=e,this}element(e){return new Wu(this,en(e))}setNodeType(e){const t=Na(null,e);null!==this.group&&t.setGroup(this.group),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew qu(e,t,r);class Xu extends pi{static get type(){return"ToneMappingNode"}constructor(e,t=Qu,r=null){super("vec3"),this._toneMapping=e,this.exposureNode=t,this.colorNode=r}customCacheKey(){return ks(this._toneMapping)}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup(e){const t=this.colorNode||e.context.color,r=this._toneMapping;if(r===m)return t;let s=null;const i=e.renderer.library.getToneMappingFunction(r);return null!==i?s=wn(i(t.rgb,this.exposureNode),t.a):(o("ToneMappingNode: Unsupported Tone Mapping configuration.",r),s=t),s}}const Ku=(e,t,r)=>new Xu(e,en(t),en(r)),Qu=ju("toneMappingExposure","float");Ri("toneMapping",(e,t,r)=>Ku(t,r,e));const Yu=new WeakMap;function Zu(e,t){let r=Yu.get(e);return void 0===r&&(r=new b(e,t),Yu.set(e,r)),r}class Ju extends xi{static get type(){return"BufferAttributeNode"}constructor(e,t=null,r=0,s=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=r,this.bufferOffset=s,this.usage=f,this.instanced=!1,this.attribute=null,this.global=!0,e&&!0===e.isBufferAttribute&&e.itemSize<=4&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(0===this.bufferStride&&0===this.bufferOffset){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return null===this.bufferType&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(null!==this.attribute)return;const t=this.getNodeType(e),r=e.getTypeLength(t),s=this.value,i=this.bufferStride||r,n=this.bufferOffset;let a;a=!0===s.isInterleavedBuffer?s:!0===s.isBufferAttribute?Zu(s.array,i):Zu(s,i);const o=new y(a,r,n);a.setUsage(this.usage),this.attribute=o,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){const t=this.getNodeType(e),r=e.getBufferAttributeFromNode(this,t),s=e.getPropertyName(r);let i=null;if("vertex"===e.shaderStage||"compute"===e.shaderStage)this.name=s,i=s;else{i=Uu(this).build(e,t)}return i}getInputType(){return"bufferAttribute"}setUsage(e){return this.usage=e,this.attribute&&!0===this.attribute.isBufferAttribute&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}}function el(e,t=null,r=0,s=0,i=f,n=!1){return"mat3"===t||null===t&&9===e.itemSize?Ln(new Ju(e,"vec3",9,0).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,3).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,6).setUsage(i).setInstanced(n)):"mat4"===t||null===t&&16===e.itemSize?Pn(new Ju(e,"vec4",16,0).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,4).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,8).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,12).setUsage(i).setInstanced(n)):new Ju(e,t,r,s).setUsage(i)}const tl=(e,t=null,r=0,s=0)=>el(e,t,r,s),rl=(e,t=null,r=0,s=0)=>el(e,t,r,s,f,!0),sl=(e,t=null,r=0,s=0)=>el(e,t,r,s,x,!0);Ri("toAttribute",e=>tl(e.value));class il extends di{static get type(){return"ComputeNode"}constructor(e,t){super("void"),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name="",this.updateBeforeType=ti.OBJECT,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:"dispose"})}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){const t=this.computeNode.build(e);if(t){e.getNodeProperties(this).outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){const{shaderStage:r}=e;if("compute"===r){const t=this.computeNode.build(e,"void");""!==t&&e.addLineFlowCode(t,this)}else{const r=e.getNodeProperties(this).outputComputeNode;if(r)return r.build(e,t)}}}const nl=(e,t=[64])=>{(0===t.length||t.length>3)&&o("TSL: compute() workgroupSize must have 1, 2, or 3 elements",new Us);for(let e=0;enl(e,r).setCount(t);Ri("compute",al),Ri("computeKernel",nl);class ol extends di{static get type(){return"IsolateNode"}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isIsolateNode=!0}getNodeType(e){const t=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);const s=this.node.getNodeType(e);return e.setCache(t),s}build(e,...t){const r=e.getCache(),s=e.getCacheFromNode(this,this.parent);e.setCache(s);const i=this.node.build(e,...t);return e.setCache(r),i}setParent(e){return this.parent=e,this}getParent(){return this.parent}}const ul=e=>new ol(en(e));function ll(e,t=!0){return d('TSL: "cache()" has been deprecated. Use "isolate()" instead.'),ul(e).setParent(t)}Ri("cache",ll),Ri("isolate",ul);class dl extends di{static get type(){return"BypassNode"}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){const t=this.callNode.build(e,"void");return""!==t&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}const cl=nn(dl).setParameterLength(2);Ri("bypass",cl);class hl extends di{static get type(){return"RemapNode"}constructor(e,t,r,s=fn(0),i=fn(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=r,this.outLowNode=s,this.outHighNode=i,this.doClamp=!0}setup(){const{node:e,inLowNode:t,inHighNode:r,outLowNode:s,outHighNode:i,doClamp:n}=this;let a=e.sub(t).div(r.sub(t));return!0===n&&(a=a.clamp()),a.mul(i.sub(s)).add(s)}}const pl=nn(hl,null,null,{doClamp:!1}).setParameterLength(3,5),gl=nn(hl).setParameterLength(3,5);Ri("remap",pl),Ri("remapClamp",gl);class ml extends di{static get type(){return"ExpressionNode"}constructor(e="",t="void"){super(t),this.snippet=e}generate(e,t){const r=this.getNodeType(e),s=this.snippet;if("void"!==r)return e.format(s,r,t);e.addLineFlowCode(s,this)}}const fl=nn(ml).setParameterLength(1,2),yl=e=>(e?Tu(e,fl("discard")):fl("discard")).toStack();Ri("discard",yl);class bl extends pi{static get type(){return"RenderOutputNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this._toneMapping=t,this.outputColorSpace=r,this.isRenderOutputNode=!0}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup({context:e}){let t=this.colorNode||e.color;const r=(null!==this._toneMapping?this._toneMapping:e.toneMapping)||m,s=(null!==this.outputColorSpace?this.outputColorSpace:e.outputColorSpace)||T;return r!==m&&(t=t.toneMapping(r)),s!==T&&s!==p.workingColorSpace&&(t=t.workingToColorSpace(s)),t}}const xl=(e,t=null,r=null)=>new bl(en(e),t,r);Ri("renderOutput",xl);class Tl extends pi{static get type(){return"DebugNode"}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){const t=this.callback,r=this.node.build(e);if(null!==t)t(e,r);else{const t="--- TSL debug - "+e.shaderStage+" shader ---",s="-".repeat(t.length);let i="";i+="// #"+t+"#\n",i+=e.flow.code.replace(/^\t/gm,"")+"\n",i+="/* ... */ "+r+" /* ... */\n",i+="// #"+s+"#\n",_(i)}return r}}const _l=(e,t=null)=>new Tl(en(e),t).toStack();Ri("debug",_l);class vl{constructor(){this._renderer=null,this.currentFrame=null}get nodeFrame(){return this._renderer._nodes.nodeFrame}setRenderer(e){return this._renderer=e,this}getRenderer(){return this._renderer}init(){}begin(){}finish(){}inspect(){}computeAsync(){}beginCompute(){}finishCompute(){}beginRender(){}finishRender(){}copyTextureToTexture(){}copyFramebufferToTexture(){}}class Nl extends di{static get type(){return"InspectorNode"}constructor(e,t="",r=null){super(),this.node=e,this.name=t,this.callback=r,this.updateType=ti.FRAME,this.isInspectorNode=!0}getName(){return this.name||this.node.name}update(e){e.renderer.inspector.inspect(this)}getNodeType(e){return this.node.getNodeType(e)}setup(e){let t=this.node;return!0===e.context.inspector&&null!==this.callback&&(t=this.callback(t)),!0!==e.renderer.backend.isWebGPUBackend&&e.renderer.inspector.constructor!==vl&&v('TSL: ".toInspector()" is only available with WebGPU.'),t}}function Sl(e,t="",r=null){return(e=en(e)).before(new Nl(e,t,r))}Ri("toInspector",Sl);class Rl extends di{static get type(){return"AttributeNode"}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(null===t){const r=this.getAttributeName(e);if(e.hasGeometryAttribute(r)){const s=e.geometry.getAttribute(r);t=e.getTypeFromAttribute(s)}else t="float"}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){const t=this.getAttributeName(e),r=this.getNodeType(e);if(!0===e.hasGeometryAttribute(t)){const s=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(s),n=e.getAttribute(t,i);if("vertex"===e.shaderStage)return e.format(n.name,i,r);return Uu(this).build(e,r)}return d(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(r)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}}const El=(e,t=null)=>new Rl(e,t),Al=(e=0)=>El("uv"+(e>0?e:""),"vec2");class wl extends di{static get type(){return"TextureSizeNode"}constructor(e,t=null){super("uvec2"),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){const r=this.textureNode.build(e,"property"),s=null===this.levelNode?"0":this.levelNode.build(e,"int");return e.format(`${e.getMethod("textureDimensions")}( ${r}, ${s} )`,this.getNodeType(e),t)}}const Cl=nn(wl).setParameterLength(1,2);class Ml extends va{static get type(){return"MaxMipLevelNode"}constructor(e){super(0),this._textureNode=e,this.updateType=ti.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){const e=this.texture,t=e.images,r=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(r&&void 0!==r.width){const{width:e,height:t}=r;this.value=Math.log2(Math.max(e,t))}}}const Bl=nn(Ml).setParameterLength(1);class Fl extends Error{constructor(e,t=null){super(e),this.name="NodeError",this.stackTrace=t}}const Ll=new N;class Pl extends va{static get type(){return"TextureNode"}constructor(e=Ll,t=null,r=null,s=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=r,this.biasNode=s,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=ti.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this._flipYUniform=null,this.setUpdateMatrix(null===t)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return!0===this.value.isDepthTexture?"float":this.value.type===S?"uvec4":this.value.type===R?"ivec4":"vec4"}getInputType(){return"texture"}getDefaultUV(){return Al(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return null===this._matrixUniform&&(this._matrixUniform=Na(this.value.matrix)),this._matrixUniform.mul(Sn(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this}setupUV(e,t){return e.isFlipY()&&(null===this._flipYUniform&&(this._flipYUniform=Na(!1)),t=t.toVar(),t=this.sampler?this._flipYUniform.select(t.flipY(),t):this._flipYUniform.select(t.setY(yn(Cl(this,this.levelNode).y).sub(t.y).sub(1)),t)),t}setup(e){const t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;const r=this.value;if(!r||!0!==r.isTexture)throw new Fl("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().",this.stackTrace);const s=dn(()=>{let t=this.uvNode;return null!==t&&!0!==e.context.forceUVContext||!e.context.getUV||(t=e.context.getUV(this,e)),t||(t=this.getDefaultUV()),!0===this.updateMatrix&&(t=this.getTransformedUV(t)),t=this.setupUV(e,t),this.updateType=null!==this._matrixUniform||null!==this._flipYUniform?ti.OBJECT:ti.NONE,t})();let i=this.levelNode;null===i&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this));let n=null,a=null;if(null!==this.compareNode)if(e.renderer.hasCompatibility(E.TEXTURE_COMPARE))n=this.compareNode;else{const e=r.compareFunction;null===e||e===A||e===w||e===C||e===M?a=this.compareNode:(n=this.compareNode,v('TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.'))}t.uvNode=s,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=n,t.compareStepNode=a,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,!0===this.sampler?"vec2":"ivec2")}generateOffset(e,t){return t.build(e,"ivec2")}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;let d;return d=i?e.generateTextureBias(l,t,r,i,n,u):o?e.generateTextureGrad(l,t,r,o,n,u):a?e.generateTextureCompare(l,t,r,a,n,u):!1===this.sampler?e.generateTextureLoad(l,t,r,s,n,u):s?e.generateTextureLevel(l,t,r,s,n,u):e.generateTexture(l,t,r,n,u),d}generate(e,t){const r=this.value,s=e.getNodeProperties(this),i=super.generate(e,"property");if(/^sampler/.test(t))return i+"_sampler";if(e.isReference(t))return i;{const n=e.getDataFromNode(this),a=this.getNodeType(e);let o=n.propertyName;if(void 0===o){const{uvNode:t,levelNode:u,biasNode:l,compareNode:d,compareStepNode:c,depthNode:h,gradNode:p,offsetNode:g}=s,m=this.generateUV(e,t),f=u?u.build(e,"float"):null,y=l?l.build(e,"float"):null,b=h?h.build(e,"int"):null,x=d?d.build(e,"float"):null,T=c?c.build(e,"float"):null,_=p?[p[0].build(e,"vec2"),p[1].build(e,"vec2")]:null,v=g?this.generateOffset(e,g):null,N=e.getVarFromNode(this);o=e.getPropertyName(N);let S=this.generateSnippet(e,i,m,f,y,b,x,_,v);if(null!==T){const t=r.compareFunction;S=t===C||t===M?Xo(fl(S,a),fl(T,"float")).build(e,a):Xo(fl(T,"float"),fl(S,a)).build(e,a)}e.addLineFlowCode(`${o} = ${S}`,this),n.snippet=S,n.propertyName=o}let u=o;return e.needsToWorkingColorSpace(r)&&(u=zu(fl(u,a),r.colorSpace).setup(e).build(e,a)),e.format(u,a,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}sample(e){const t=this.clone();return t.uvNode=en(e),t.referenceNode=this.getBase(),en(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){const t=this.clone();t.biasNode=en(e).mul(Bl(t)),t.referenceNode=this.getBase();const r=t.value;return!1===t.generateMipmaps&&(r&&!1===r.generateMipmaps||r.minFilter===B||r.magFilter===B)&&(d("TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture."),t.biasNode=null),en(t)}level(e){const t=this.clone();return t.levelNode=en(e),t.referenceNode=this.getBase(),en(t)}size(e){return Cl(this,e)}bias(e){const t=this.clone();return t.biasNode=en(e),t.referenceNode=this.getBase(),en(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){const t=this.clone();return t.compareNode=en(e),t.referenceNode=this.getBase(),en(t)}grad(e,t){const r=this.clone();return r.gradNode=[en(e),en(t)],r.referenceNode=this.getBase(),en(r)}depth(e){const t=this.clone();return t.depthNode=en(e),t.referenceNode=this.getBase(),en(t)}offset(e){const t=this.clone();return t.offsetNode=en(e),t.referenceNode=this.getBase(),en(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){const e=this.value,t=this._matrixUniform;null!==t&&(t.value=e.matrix),!0===e.matrixAutoUpdate&&e.updateMatrix();const r=this._flipYUniform;null!==r&&(r.value=e.image instanceof ImageBitmap&&!0===e.flipY||!0===e.isRenderTargetTexture||!0===e.isFramebufferTexture||!0===e.isDepthTexture)}clone(){const e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}const Dl=nn(Pl).setParameterLength(1,4).setName("texture"),Ul=(e=Ll,t=null,r=null,s=null)=>{let i;return e&&!0===e.isTextureNode?(i=en(e.clone()),i.referenceNode=e.getBase(),null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Dl(e,t,r,s),i},Il=(...e)=>Ul(...e).setSampler(!1);class Ol extends va{static get type(){return"BufferNode"}constructor(e,t,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=r,this.updateRanges=[]}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}getElementType(e){return this.getNodeType(e)}getInputType(){return"buffer"}}const Vl=(e,t,r)=>new Ol(e,t,r);class kl extends ci{static get type(){return"UniformArrayElementNode"}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){const t=super.generate(e),r=this.getNodeType(),s=this.node.getPaddedType();return e.format(t,s,r)}}class Gl extends Ol{static get type(){return"UniformArrayNode"}constructor(e,t=null){super(null),this.array=e,this.elementType=null===t?Xs(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=ti.RENDER,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){const e=this.elementType;let t="vec4";return"mat2"===e?t="mat2":!0===/mat/.test(e)?t="mat4":"i"===e.charAt(0)?t="ivec4":"u"===e.charAt(0)&&(t="uvec4"),t}update(){const{array:e,value:t}=this,r=this.elementType;if("float"===r||"int"===r||"uint"===r)for(let r=0;rnew Gl(e,t);class zl extends di{constructor(e){super("float"),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}const Wl=nn(zl).setParameterLength(1);let Hl,ql;class jl extends di{static get type(){return"ScreenNode"}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===jl.DPR?"float":this.scope===jl.VIEWPORT?"vec4":"vec2"}getUpdateType(){let e=ti.NONE;return this.scope!==jl.SIZE&&this.scope!==jl.VIEWPORT&&this.scope!==jl.DPR||(e=ti.RENDER),this.updateType=e,e}update({renderer:e}){const t=e.getRenderTarget();this.scope===jl.VIEWPORT?null!==t?ql.copy(t.viewport):(e.getViewport(ql),ql.multiplyScalar(e.getPixelRatio())):this.scope===jl.DPR?this._output.value=e.getPixelRatio():null!==t?(Hl.width=t.width,Hl.height=t.height):e.getDrawingBufferSize(Hl)}setup(){const e=this.scope;let r=null;return r=e===jl.SIZE?Na(Hl||(Hl=new t)):e===jl.VIEWPORT?Na(ql||(ql=new s)):e===jl.DPR?Na(1):Tn(Yl.div(Ql)),this._output=r,r}generate(e){if(this.scope===jl.COORDINATE){let t=e.getFragCoord();if(e.isFlipY()){const r=e.getNodeProperties(Ql).outputNode.build(e);t=`${e.getType("vec2")}( ${t}.x, ${r}.y - ${t}.y )`}return t}return super.generate(e)}}jl.COORDINATE="coordinate",jl.VIEWPORT="viewport",jl.SIZE="size",jl.UV="uv",jl.DPR="dpr";const Xl=an(jl,jl.DPR),Kl=an(jl,jl.UV),Ql=an(jl,jl.SIZE),Yl=an(jl,jl.COORDINATE),Zl=an(jl,jl.VIEWPORT),Jl=Zl.zw,ed=Yl.sub(Zl.xy),td=ed.div(Jl),rd=dn(()=>(d('TSL: "viewportResolution" is deprecated. Use "screenSize" instead.',new Us),Ql),"vec2").once()();let sd=null,id=null,nd=null,ad=null,od=null,ud=null,ld=null,dd=null,cd=null,hd=null,pd=null,gd=null,md=null,fd=null;const yd=Na(0,"uint").setName("u_cameraIndex").setGroup(ba("cameraIndex")).toVarying("v_cameraIndex"),bd=Na("float").setName("cameraNear").setGroup(Ta).onRenderUpdate(({camera:e})=>e.near),xd=Na("float").setName("cameraFar").setGroup(Ta).onRenderUpdate(({camera:e})=>e.far),Td=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrix);null===id?id=$l(r).setGroup(Ta).setName("cameraProjectionMatrices"):id.array=r,t=id.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrix")}else null===sd&&(sd=Na(e.projectionMatrix).setName("cameraProjectionMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrix)),t=sd;return t}).once()(),_d=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrixInverse);null===ad?ad=$l(r).setGroup(Ta).setName("cameraProjectionMatricesInverse"):ad.array=r,t=ad.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrixInverse")}else null===nd&&(nd=Na(e.projectionMatrixInverse).setName("cameraProjectionMatrixInverse").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse)),t=nd;return t}).once()(),vd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorldInverse);null===ud?ud=$l(r).setGroup(Ta).setName("cameraViewMatrices"):ud.array=r,t=ud.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraViewMatrix")}else null===od&&(od=Na(e.matrixWorldInverse).setName("cameraViewMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorldInverse)),t=od;return t}).once()(),Nd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorld);null===dd?dd=$l(r).setGroup(Ta).setName("cameraWorldMatrices"):dd.array=r,t=dd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraWorldMatrix")}else null===ld&&(ld=Na(e.matrixWorld).setName("cameraWorldMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorld)),t=ld;return t}).once()(),Sd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.normalMatrix);null===hd?hd=$l(r).setGroup(Ta).setName("cameraNormalMatrices"):hd.array=r,t=hd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraNormalMatrix")}else null===cd&&(cd=Na(e.normalMatrix).setName("cameraNormalMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.normalMatrix)),t=cd;return t}).once()(),Rd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const s=[];for(let t=0,i=e.cameras.length;t{const r=e.cameras,s=t.array;for(let e=0,t=r.length;et.value.setFromMatrixPosition(e.matrixWorld))),t=pd;return t}).once()(),Ed=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.viewport);null===fd?fd=$l(r,"vec4").setGroup(Ta).setName("cameraViewports"):fd.array=r,t=fd.element(yd).toConst("cameraViewport")}else null===md&&(md=wn(0,0,Ql.x,Ql.y).toConst("cameraViewport")),t=md;return t}).once()(),Ad=new F;class wd extends di{static get type(){return"Object3DNode"}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=ti.OBJECT,this.uniformNode=new va(null)}getNodeType(){const e=this.scope;return e===wd.WORLD_MATRIX?"mat4":e===wd.POSITION||e===wd.VIEW_POSITION||e===wd.DIRECTION||e===wd.SCALE?"vec3":e===wd.RADIUS?"float":void 0}update(e){const t=this.object3d,s=this.uniformNode,i=this.scope;if(i===wd.WORLD_MATRIX)s.value=t.matrixWorld;else if(i===wd.POSITION)s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld);else if(i===wd.SCALE)s.value=s.value||new r,s.value.setFromMatrixScale(t.matrixWorld);else if(i===wd.DIRECTION)s.value=s.value||new r,t.getWorldDirection(s.value);else if(i===wd.VIEW_POSITION){const i=e.camera;s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld),s.value.applyMatrix4(i.matrixWorldInverse)}else if(i===wd.RADIUS){const r=e.object.geometry;null===r.boundingSphere&&r.computeBoundingSphere(),Ad.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),s.value=Ad.radius}}generate(e){const t=this.scope;return t===wd.WORLD_MATRIX?this.uniformNode.nodeType="mat4":t===wd.POSITION||t===wd.VIEW_POSITION||t===wd.DIRECTION||t===wd.SCALE?this.uniformNode.nodeType="vec3":t===wd.RADIUS&&(this.uniformNode.nodeType="float"),this.uniformNode.build(e)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}}wd.WORLD_MATRIX="worldMatrix",wd.POSITION="position",wd.SCALE="scale",wd.VIEW_POSITION="viewPosition",wd.DIRECTION="direction",wd.RADIUS="radius";const Cd=nn(wd,wd.DIRECTION).setParameterLength(1),Md=nn(wd,wd.WORLD_MATRIX).setParameterLength(1),Bd=nn(wd,wd.POSITION).setParameterLength(1),Fd=nn(wd,wd.SCALE).setParameterLength(1),Ld=nn(wd,wd.VIEW_POSITION).setParameterLength(1),Pd=nn(wd,wd.RADIUS).setParameterLength(1);class Dd extends wd{static get type(){return"ModelNode"}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}}const Ud=an(Dd,Dd.DIRECTION),Id=an(Dd,Dd.WORLD_MATRIX),Od=an(Dd,Dd.POSITION),Vd=an(Dd,Dd.SCALE),kd=an(Dd,Dd.VIEW_POSITION),Gd=an(Dd,Dd.RADIUS),$d=Na(new n).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),zd=Na(new a).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),Wd=dn(e=>e.context.modelViewMatrix||Hd).once()().toVar("modelViewMatrix"),Hd=vd.mul(Id),qd=dn(e=>(e.context.isHighPrecisionModelViewMatrix=!0,Na("mat4").onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar("highpModelViewMatrix"),jd=dn(e=>{const t=e.context.isHighPrecisionModelViewMatrix;return Na("mat3").onObjectUpdate(({object:e,camera:r})=>(!0!==t&&e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar("highpModelNormalViewMatrix"),Xd=dn(e=>"fragment"!==e.shaderStage?(v("TSL: `clipSpace` is only available in fragment stage."),wn()):e.context.clipSpace.toVarying("v_clipSpace")).once()(),Kd=El("position","vec3"),Qd=Kd.toVarying("positionLocal"),Yd=Kd.toVarying("positionPrevious"),Zd=dn(e=>Id.mul(Qd).xyz.toVarying(e.getSubBuildProperty("v_positionWorld")),"vec3").once(["POSITION"])(),Jd=dn(()=>Qd.transformDirection(Id).toVarying("v_positionWorldDirection").normalize().toVar("positionWorldDirection"),"vec3").once(["POSITION"])(),ec=dn(e=>{if("fragment"===e.shaderStage&&e.material.vertexNode){const e=_d.mul(Xd);return e.xyz.div(e.w).toVar("positionView")}return e.context.setupPositionView().toVarying("v_positionView")},"vec3").once(["POSITION","VERTEX"])(),tc=dn(e=>{let t;return t=e.camera.isOrthographicCamera?Sn(0,0,1):ec.negate().toVarying("v_positionViewDirection").normalize(),t.toVar("positionViewDirection")},"vec3").once(["POSITION"])();class rc extends di{static get type(){return"FrontFacingNode"}constructor(){super("bool"),this.isFrontFacingNode=!0}generate(e){if("fragment"!==e.shaderStage)return"true";const{material:t}=e;return t.side===L?"false":e.getFrontFacing()}}const sc=an(rc),ic=fn(sc).mul(2).sub(1),nc=dn(([e],{material:t})=>{const r=t.side;return r===L?e=e.mul(-1):r===P&&(e=e.mul(ic)),e}),ac=El("normal","vec3"),oc=dn(e=>!1===e.geometry.hasAttribute("normal")?(d('TSL: Vertex attribute "normal" not found on geometry.'),Sn(0,1,0)):ac,"vec3").once()().toVar("normalLocal"),uc=ec.dFdx().cross(ec.dFdy()).normalize().toVar("normalFlat"),lc=dn(e=>{let t;return t=e.isFlatShading()?uc:mc(oc).toVarying("v_normalViewGeometry").normalize(),t},"vec3").once()().toVar("normalViewGeometry"),dc=dn(e=>{let t=lc.transformDirection(vd);return!0!==e.isFlatShading()&&(t=t.toVarying("v_normalWorldGeometry")),t.normalize().toVar("normalWorldGeometry")},"vec3").once()(),cc=dn(e=>{let t;return"NORMAL"===e.subBuildFn||"VERTEX"===e.subBuildFn?(t=lc,!0!==e.isFlatShading()&&(t=nc(t))):t=e.context.setupNormal().context({getUV:null,getTextureLevel:null}),t},"vec3").once(["NORMAL","VERTEX"])().toVar("normalView"),hc=cc.transformDirection(vd).toVar("normalWorld"),pc=dn(({subBuildFn:e,context:t})=>{let r;return r="NORMAL"===e||"VERTEX"===e?cc:t.setupClearcoatNormal().context({getUV:null,getTextureLevel:null}),r},"vec3").once(["NORMAL","VERTEX"])().toVar("clearcoatNormalView"),gc=dn(([e,t=Id])=>{const r=Ln(t),s=e.div(Sn(r[0].dot(r[0]),r[1].dot(r[1]),r[2].dot(r[2])));return r.mul(s).xyz}),mc=dn(([e],t)=>{const r=t.context.modelNormalViewMatrix;if(r)return r.transformDirection(e);const s=$d.mul(e);return vd.transformDirection(s)}),fc=dn(()=>(d('TSL: "transformedNormalView" is deprecated. Use "normalView" instead.'),cc)).once(["NORMAL","VERTEX"])(),yc=dn(()=>(d('TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.'),hc)).once(["NORMAL","VERTEX"])(),bc=dn(()=>(d('TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.'),pc)).once(["NORMAL","VERTEX"])(),xc=new D,Tc=new a,_c=Na(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),vc=Na(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),Nc=Na(new a).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){const r=null!==t.environment&&null===e.envMap?t.environmentRotation:e.envMapRotation;return r?(xc.copy(r),Tc.makeRotationFromEuler(xc)):Tc.identity(),Tc}),Sc=tc.negate().reflect(cc),Rc=tc.negate().refract(cc,_c),Ec=Sc.transformDirection(vd).toVar("reflectVector"),Ac=Rc.transformDirection(vd).toVar("reflectVector"),wc=new U;class Cc extends Pl{static get type(){return"CubeTextureNode"}constructor(e,t=null,r=null,s=null){super(e,t,r,s),this.isCubeTextureNode=!0}getInputType(){return!0===this.value.isDepthTexture?"cubeDepthTexture":"cubeTexture"}getDefaultUV(){const e=this.value;return e.mapping===I?Ec:e.mapping===O?Ac:(o('CubeTextureNode: Mapping "%s" not supported.',e.mapping),Sn(0,0,0))}setUpdateMatrix(){}setupUV(e,t){const r=this.value;return!0===r.isDepthTexture?e.renderer.coordinateSystem===h?Sn(t.x,t.y.negate(),t.z):t:(e.renderer.coordinateSystem!==h&&r.isRenderTargetTexture||(t=Sn(t.x.negate(),t.yz)),Nc.mul(t))}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}}const Mc=nn(Cc).setParameterLength(1,4).setName("cubeTexture"),Bc=(e=wc,t=null,r=null,s=null)=>{let i;return e&&!0===e.isCubeTextureNode?(i=en(e.clone()),i.referenceNode=e,null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Mc(e,t,r,s),i};class Fc extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}}class Lc extends di{static get type(){return"ReferenceNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.name=null,this.updateType=ti.OBJECT}element(e){return new Fc(this,en(e))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setNodeType(e){let t=null;t=null!==this.count?Vl(null,e,this.count):Array.isArray(this.getValueFromReference())?$l(null,e):"texture"===e?Ul(null):"cubeTexture"===e?Bc(null):Na(null,e),null!==this.group&&t.setGroup(this.group),null!==this.name&&t.setName(this.name),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew Lc(e,t,r),Dc=(e,t,r,s)=>new Lc(e,t,s,r);class Uc extends Lc{static get type(){return"MaterialReferenceNode"}constructor(e,t,r=null){super(e,t,r),this.material=r,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=null!==this.material?this.material:e.material,this.reference}}const Ic=(e,t,r=null)=>new Uc(e,t,r),Oc=Al(),Vc=ec.dFdx(),kc=ec.dFdy(),Gc=Oc.dFdx(),$c=Oc.dFdy(),zc=cc,Wc=kc.cross(zc),Hc=zc.cross(Vc),qc=Wc.mul(Gc.x).add(Hc.mul($c.x)),jc=Wc.mul(Gc.y).add(Hc.mul($c.y)),Xc=qc.dot(qc).max(jc.dot(jc)),Kc=Xc.equal(0).select(0,Xc.inverseSqrt()),Qc=qc.mul(Kc).toVar("tangentViewFrame"),Yc=jc.mul(Kc).toVar("bitangentViewFrame"),Zc=El("tangent","vec4"),Jc=Zc.xyz.toVar("tangentLocal"),eh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?Wd.mul(wn(Jc,0)).xyz.toVarying("v_tangentView").normalize():Qc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("tangentView"),th=eh.transformDirection(vd).toVarying("v_tangentWorld").normalize().toVar("tangentWorld"),rh=dn(([e,t],r)=>{let s=e.mul(Zc.w).xyz;return"NORMAL"===r.subBuildFn&&!0!==r.isFlatShading()&&(s=s.toVarying(t)),s}).once(["NORMAL"]),sh=rh(ac.cross(Zc),"v_bitangentGeometry").normalize().toVar("bitangentGeometry"),ih=rh(oc.cross(Jc),"v_bitangentLocal").normalize().toVar("bitangentLocal"),nh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?rh(cc.cross(eh),"v_bitangentView").normalize():Yc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("bitangentView"),ah=rh(hc.cross(th),"v_bitangentWorld").normalize().toVar("bitangentWorld"),oh=Ln(eh,nh,cc).toVar("TBNViewMatrix"),uh=tc.mul(oh),lh=dn(()=>{let e=ta.cross(tc);return e=e.cross(ta).normalize(),e=ou(e,cc,Jn.mul(zn.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()(),dh=e=>en(e).mul(.5).add(.5),ch=e=>Sn(e,To(lu(fn(1).sub(Zo(e,e)))));class hh extends pi{static get type(){return"NormalMapNode"}constructor(e,t=null){super("vec3"),this.node=e,this.scaleNode=t,this.normalMapType=V,this.unpackNormalMode=k}setup(e){const{normalMapType:t,scaleNode:r,unpackNormalMode:s}=this;let i=this.node.mul(2).sub(1);if(t===V?s===G?i=ch(i.xy):s===$?i=ch(i.yw):s!==k&&console.error(`THREE.NodeMaterial: Unexpected unpack normal mode: ${s}`):s!==k&&console.error(`THREE.NodeMaterial: Normal map type '${t}' is not compatible with unpack normal mode '${s}'`),null!==r){let t=r;!0===e.isFlatShading()&&(t=nc(t)),i=Sn(i.xy.mul(t),i.z)}let n=null;return t===z?n=mc(i):t===V?n=oh.mul(i).normalize():(o(`NodeMaterial: Unsupported normal map type: ${t}`),n=cc),n}}const ph=nn(hh).setParameterLength(1,2),gh=dn(({textureNode:e,bumpScale:t})=>{const r=t=>e.isolate().context({getUV:e=>t(e.uvNode||Al()),forceUVContext:!0}),s=fn(r(e=>e));return Tn(fn(r(e=>e.add(e.dFdx()))).sub(s),fn(r(e=>e.add(e.dFdy()))).sub(s)).mul(t)}),mh=dn(e=>{const{surf_pos:t,surf_norm:r,dHdxy:s}=e,i=t.dFdx().normalize(),n=r,a=t.dFdy().normalize().cross(n),o=n.cross(i),u=i.dot(a).mul(ic),l=u.sign().mul(s.x.mul(a).add(s.y.mul(o)));return u.abs().mul(r).sub(l).normalize()});class fh extends pi{static get type(){return"BumpMapNode"}constructor(e,t=null){super("vec3"),this.textureNode=e,this.scaleNode=t}setup(){const e=null!==this.scaleNode?this.scaleNode:1,t=gh({textureNode:this.textureNode,bumpScale:e});return mh({surf_pos:ec,surf_norm:cc,dHdxy:t})}}const yh=nn(fh).setParameterLength(1,2),bh=new Map;class xh extends di{static get type(){return"MaterialNode"}constructor(e){super(),this.scope=e}getCache(e,t){let r=bh.get(e);return void 0===r&&(r=Ic(e,t),bh.set(e,r)),r}getFloat(e){return this.getCache(e,"float")}getColor(e){return this.getCache(e,"color")}getTexture(e){return this.getCache("map"===e?"map":e+"Map","texture")}setup(e){const t=e.context.material,r=this.scope;let s=null;if(r===xh.COLOR){const e=void 0!==t.color?this.getColor(r):Sn();s=t.map&&!0===t.map.isTexture?e.mul(this.getTexture("map")):e}else if(r===xh.OPACITY){const e=this.getFloat(r);s=t.alphaMap&&!0===t.alphaMap.isTexture?e.mul(this.getTexture("alpha")):e}else if(r===xh.SPECULAR_STRENGTH)s=t.specularMap&&!0===t.specularMap.isTexture?this.getTexture("specular").r:fn(1);else if(r===xh.SPECULAR_INTENSITY){const e=this.getFloat(r);s=t.specularIntensityMap&&!0===t.specularIntensityMap.isTexture?e.mul(this.getTexture(r).a):e}else if(r===xh.SPECULAR_COLOR){const e=this.getColor(r);s=t.specularColorMap&&!0===t.specularColorMap.isTexture?e.mul(this.getTexture(r).rgb):e}else if(r===xh.ROUGHNESS){const e=this.getFloat(r);s=t.roughnessMap&&!0===t.roughnessMap.isTexture?e.mul(this.getTexture(r).g):e}else if(r===xh.METALNESS){const e=this.getFloat(r);s=t.metalnessMap&&!0===t.metalnessMap.isTexture?e.mul(this.getTexture(r).b):e}else if(r===xh.EMISSIVE){const e=this.getFloat("emissiveIntensity"),i=this.getColor(r).mul(e);s=t.emissiveMap&&!0===t.emissiveMap.isTexture?i.mul(this.getTexture(r)):i}else if(r===xh.NORMAL)t.normalMap?(s=ph(this.getTexture("normal"),this.getCache("normalScale","vec2")),s.normalMapType=t.normalMapType,t.normalMap.format!=W&&t.normalMap.format!=H&&t.normalMap.format!=q||(s.unpackNormalMode=G)):s=t.bumpMap?yh(this.getTexture("bump").r,this.getFloat("bumpScale")):cc;else if(r===xh.CLEARCOAT){const e=this.getFloat(r);s=t.clearcoatMap&&!0===t.clearcoatMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_ROUGHNESS){const e=this.getFloat(r);s=t.clearcoatRoughnessMap&&!0===t.clearcoatRoughnessMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_NORMAL)s=t.clearcoatNormalMap?ph(this.getTexture(r),this.getCache(r+"Scale","vec2")):cc;else if(r===xh.SHEEN){const e=this.getColor("sheenColor").mul(this.getFloat("sheen"));s=t.sheenColorMap&&!0===t.sheenColorMap.isTexture?e.mul(this.getTexture("sheenColor").rgb):e}else if(r===xh.SHEEN_ROUGHNESS){const e=this.getFloat(r);s=t.sheenRoughnessMap&&!0===t.sheenRoughnessMap.isTexture?e.mul(this.getTexture(r).a):e,s=s.clamp(1e-4,1)}else if(r===xh.ANISOTROPY)if(t.anisotropyMap&&!0===t.anisotropyMap.isTexture){const e=this.getTexture(r);s=Fn(sp.x,sp.y,sp.y.negate(),sp.x).mul(e.rg.mul(2).sub(Tn(1)).normalize().mul(e.b))}else s=sp;else if(r===xh.IRIDESCENCE_THICKNESS){const e=Pc("1","float",t.iridescenceThicknessRange);if(t.iridescenceThicknessMap){const i=Pc("0","float",t.iridescenceThicknessRange);s=e.sub(i).mul(this.getTexture(r).g).add(i)}else s=e}else if(r===xh.TRANSMISSION){const e=this.getFloat(r);s=t.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===xh.THICKNESS){const e=this.getFloat(r);s=t.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===xh.IOR)s=this.getFloat(r);else if(r===xh.LIGHT_MAP)s=this.getTexture(r).rgb.mul(this.getFloat("lightMapIntensity"));else if(r===xh.AO)s=this.getTexture(r).r.sub(1).mul(this.getFloat("aoMapIntensity")).add(1);else if(r===xh.LINE_DASH_OFFSET)s=t.dashOffset?this.getFloat(r):fn(0);else{const t=this.getNodeType(e);s=this.getCache(r,t)}return s}}xh.ALPHA_TEST="alphaTest",xh.COLOR="color",xh.OPACITY="opacity",xh.SHININESS="shininess",xh.SPECULAR="specular",xh.SPECULAR_STRENGTH="specularStrength",xh.SPECULAR_INTENSITY="specularIntensity",xh.SPECULAR_COLOR="specularColor",xh.REFLECTIVITY="reflectivity",xh.ROUGHNESS="roughness",xh.METALNESS="metalness",xh.NORMAL="normal",xh.CLEARCOAT="clearcoat",xh.CLEARCOAT_ROUGHNESS="clearcoatRoughness",xh.CLEARCOAT_NORMAL="clearcoatNormal",xh.EMISSIVE="emissive",xh.ROTATION="rotation",xh.SHEEN="sheen",xh.SHEEN_ROUGHNESS="sheenRoughness",xh.ANISOTROPY="anisotropy",xh.IRIDESCENCE="iridescence",xh.IRIDESCENCE_IOR="iridescenceIOR",xh.IRIDESCENCE_THICKNESS="iridescenceThickness",xh.IOR="ior",xh.TRANSMISSION="transmission",xh.THICKNESS="thickness",xh.ATTENUATION_DISTANCE="attenuationDistance",xh.ATTENUATION_COLOR="attenuationColor",xh.LINE_SCALE="scale",xh.LINE_DASH_SIZE="dashSize",xh.LINE_GAP_SIZE="gapSize",xh.LINE_WIDTH="linewidth",xh.LINE_DASH_OFFSET="dashOffset",xh.POINT_SIZE="size",xh.DISPERSION="dispersion",xh.LIGHT_MAP="light",xh.AO="ao";const Th=an(xh,xh.ALPHA_TEST),_h=an(xh,xh.COLOR),vh=an(xh,xh.SHININESS),Nh=an(xh,xh.EMISSIVE),Sh=an(xh,xh.OPACITY),Rh=an(xh,xh.SPECULAR),Eh=an(xh,xh.SPECULAR_INTENSITY),Ah=an(xh,xh.SPECULAR_COLOR),wh=an(xh,xh.SPECULAR_STRENGTH),Ch=an(xh,xh.REFLECTIVITY),Mh=an(xh,xh.ROUGHNESS),Bh=an(xh,xh.METALNESS),Fh=an(xh,xh.NORMAL),Lh=an(xh,xh.CLEARCOAT),Ph=an(xh,xh.CLEARCOAT_ROUGHNESS),Dh=an(xh,xh.CLEARCOAT_NORMAL),Uh=an(xh,xh.ROTATION),Ih=an(xh,xh.SHEEN),Oh=an(xh,xh.SHEEN_ROUGHNESS),Vh=an(xh,xh.ANISOTROPY),kh=an(xh,xh.IRIDESCENCE),Gh=an(xh,xh.IRIDESCENCE_IOR),$h=an(xh,xh.IRIDESCENCE_THICKNESS),zh=an(xh,xh.TRANSMISSION),Wh=an(xh,xh.THICKNESS),Hh=an(xh,xh.IOR),qh=an(xh,xh.ATTENUATION_DISTANCE),jh=an(xh,xh.ATTENUATION_COLOR),Xh=an(xh,xh.LINE_SCALE),Kh=an(xh,xh.LINE_DASH_SIZE),Qh=an(xh,xh.LINE_GAP_SIZE),Yh=an(xh,xh.LINE_WIDTH),Zh=an(xh,xh.LINE_DASH_OFFSET),Jh=an(xh,xh.POINT_SIZE),ep=an(xh,xh.DISPERSION),tp=an(xh,xh.LIGHT_MAP),rp=an(xh,xh.AO),sp=Na(new t).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),ip=dn(e=>e.context.setupModelViewProjection(),"vec4").once()().toVarying("v_modelViewProjection");class np extends ci{static get type(){return"StorageArrayElementNode"}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}getMemberType(e,t){const r=this.storageBufferNode.structTypeNode;return r?r.getMemberType(e,t):"void"}setup(e){return!1===e.isAvailable("storageBuffer")&&!0===this.node.isPBO&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let r;const s=e.context.assign;if(r=!1===e.isAvailable("storageBuffer")?!0!==this.node.isPBO||!0===s||!this.node.value.isInstancedBufferAttribute&&"compute"===e.shaderStage?this.node.build(e):e.generatePBO(this):super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}const ap=nn(np).setParameterLength(2);class op extends Ol{static get type(){return"StorageBufferNode"}constructor(e,t=null,r=0){let s,i=null;t&&t.isStruct?(s="struct",i=t.layout,(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)&&(r=e.count)):null===t&&(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)?(s=zs(e.itemSize),r=e.count):s=t,super(e,s,r),this.isStorageBufferNode=!0,this.structTypeNode=i,this.access=si.READ_WRITE,this.isAtomic=!1,this.isPBO=!1,this._attribute=null,this._varying=null,this.global=!0,!0!==e.isStorageBufferAttribute&&!0!==e.isStorageInstancedBufferAttribute&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(0===this.bufferCount){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return this.value.isIndirectStorageBufferAttribute?"indirectStorageBuffer":"storageBuffer"}element(e){return ap(this,e)}setPBO(e){return this.isPBO=e,this}getPBO(){return this.isPBO}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess(si.READ_ONLY)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}getAttributeData(){return null===this._attribute&&(this._attribute=tl(this.value),this._varying=Uu(this._attribute)),{attribute:this._attribute,varying:this._varying}}getNodeType(e){if(null!==this.structTypeNode)return this.structTypeNode.getNodeType(e);if(e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.getNodeType(e);const{attribute:t}=this.getAttributeData();return t.getNodeType(e)}getMemberType(e,t){return null!==this.structTypeNode?this.structTypeNode.getMemberType(e,t):"void"}generate(e){if(null!==this.structTypeNode&&this.structTypeNode.build(e),e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.generate(e);const{attribute:t,varying:r}=this.getAttributeData(),s=r.build(e);return e.registerTransform(s,t),s}}const up=(e,t=null,r=0)=>new op(e,t,r);class lp extends di{static get type(){return"IndexNode"}constructor(e){super("uint"),this.scope=e,this.isIndexNode=!0}generate(e){const t=this.getNodeType(e),r=this.scope;let s,i;if(r===lp.VERTEX)s=e.getVertexIndex();else if(r===lp.INSTANCE)s=e.getInstanceIndex();else if(r===lp.DRAW)s=e.getDrawIndex();else if(r===lp.INVOCATION_LOCAL)s=e.getInvocationLocalIndex();else if(r===lp.INVOCATION_SUBGROUP)s=e.getInvocationSubgroupIndex();else{if(r!==lp.SUBGROUP)throw new Error("THREE.IndexNode: Unknown scope: "+r);s=e.getSubgroupIndex()}if("vertex"===e.shaderStage||"compute"===e.shaderStage)i=s;else{i=Uu(this).build(e,t)}return i}}lp.VERTEX="vertex",lp.INSTANCE="instance",lp.SUBGROUP="subgroup",lp.INVOCATION_LOCAL="invocationLocal",lp.INVOCATION_SUBGROUP="invocationSubgroup",lp.DRAW="draw";const dp=an(lp,lp.VERTEX),cp=an(lp,lp.INSTANCE),hp=an(lp,lp.SUBGROUP),pp=an(lp,lp.INVOCATION_SUBGROUP),gp=an(lp,lp.INVOCATION_LOCAL),mp=an(lp,lp.DRAW);class fp extends di{static get type(){return"InstanceNode"}constructor(e,t,r=null){super("void"),this.count=e,this.instanceMatrix=t,this.instanceColor=r,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=ti.FRAME,this.buffer=null,this.bufferColor=null,this.previousInstanceMatrixNode=null}get isStorageMatrix(){const{instanceMatrix:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}get isStorageColor(){const{instanceColor:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}setup(e){let{instanceMatrixNode:t,instanceColorNode:r}=this;null===t&&(t=this._createInstanceMatrixNode(!0,e),this.instanceMatrixNode=t);const{instanceColor:s,isStorageColor:i}=this;if(s&&null===r){if(i)r=up(s,"vec3",Math.max(s.count,1)).element(cp);else{const e=new j(s.array,3),t=s.usage===x?sl:rl;this.bufferColor=e,r=Sn(t(e,"vec3",3,0))}this.instanceColorNode=r}const n=t.mul(Qd).xyz;if(Qd.assign(n),e.needsPreviousData()&&Yd.assign(this.getPreviousInstancedPosition(e)),e.hasGeometryAttribute("normal")){const e=gc(oc,t);oc.assign(e)}null!==this.instanceColorNode&&Vn("vec3","vInstanceColor").assign(this.instanceColorNode)}update(e){null!==this.buffer&&!0!==this.isStorageMatrix&&(this.buffer.clearUpdateRanges(),this.buffer.updateRanges.push(...this.instanceMatrix.updateRanges),this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version)),this.instanceColor&&null!==this.bufferColor&&!0!==this.isStorageColor&&(this.bufferColor.clearUpdateRanges(),this.bufferColor.updateRanges.push(...this.instanceColor.updateRanges),this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)),null!==this.previousInstanceMatrixNode&&e.object.previousInstanceMatrix.array.set(this.instanceMatrix.array)}getPreviousInstancedPosition(e){const t=e.object;return null===this.previousInstanceMatrixNode&&(t.previousInstanceMatrix=this.instanceMatrix.clone(),this.previousInstanceMatrixNode=this._createInstanceMatrixNode(!1,e)),this.previousInstanceMatrixNode.mul(Yd).xyz}_createInstanceMatrixNode(e,t){let r;const{instanceMatrix:s}=this,{count:i}=s;if(this.isStorageMatrix)r=up(s,"mat4",Math.max(i,1)).element(cp);else{if(16*i*4<=t.getUniformBufferLimit())r=Vl(s.array,"mat4",Math.max(i,1)).element(cp);else{const t=new X(s.array,16,1);!0===e&&(this.buffer=t);const i=s.usage===x?sl:rl,n=[i(t,"vec4",16,0),i(t,"vec4",16,4),i(t,"vec4",16,8),i(t,"vec4",16,12)];r=Pn(...n)}}return r}}const yp=nn(fp).setParameterLength(2,3);class bp extends fp{static get type(){return"InstancedMeshNode"}constructor(e){const{count:t,instanceMatrix:r,instanceColor:s}=e;super(t,r,s),this.instancedMesh=e}}const xp=nn(bp).setParameterLength(1);class Tp extends di{static get type(){return"BatchNode"}constructor(e){super("void"),this.batchMesh=e,this.batchingIdNode=null}setup(e){null===this.batchingIdNode&&(null===e.getDrawIndex()?this.batchingIdNode=cp:this.batchingIdNode=mp);const t=dn(([e])=>{const t=yn(Cl(Il(this.batchMesh._indirectTexture),0).x).toConst(),r=yn(e).mod(t).toConst(),s=yn(e).div(t).toConst();return Il(this.batchMesh._indirectTexture,_n(r,s)).x}).setLayout({name:"getIndirectIndex",type:"uint",inputs:[{name:"id",type:"int"}]}),r=t(yn(this.batchingIdNode)),s=this.batchMesh._matricesTexture,i=yn(Cl(Il(s),0).x).toConst(),n=fn(r).mul(4).toInt().toConst(),a=n.mod(i).toConst(),o=n.div(i).toConst(),u=Pn(Il(s,_n(a,o)),Il(s,_n(a.add(1),o)),Il(s,_n(a.add(2),o)),Il(s,_n(a.add(3),o))),l=this.batchMesh._colorsTexture;if(null!==l){const e=dn(([e])=>{const t=yn(Cl(Il(l),0).x).toConst(),r=e,s=r.mod(t).toConst(),i=r.div(t).toConst();return Il(l,_n(s,i)).rgb}).setLayout({name:"getBatchingColor",type:"vec3",inputs:[{name:"id",type:"int"}]}),t=e(r);Vn("vec3","vBatchColor").assign(t)}const d=Ln(u);Qd.assign(u.mul(Qd));const c=oc.div(Sn(d[0].dot(d[0]),d[1].dot(d[1]),d[2].dot(d[2]))),h=d.mul(c).xyz;oc.assign(h),e.hasGeometryAttribute("tangent")&&Jc.mulAssign(d)}}const _p=nn(Tp).setParameterLength(1),vp=new WeakMap;class Np extends di{static get type(){return"SkinningNode"}constructor(e){super("void"),this.skinnedMesh=e,this.updateType=ti.OBJECT,this.skinIndexNode=El("skinIndex","uvec4"),this.skinWeightNode=El("skinWeight","vec4"),this.bindMatrixNode=Pc("bindMatrix","mat4"),this.bindMatrixInverseNode=Pc("bindMatrixInverse","mat4"),this.boneMatricesNode=Dc("skeleton.boneMatrices","mat4",e.skeleton.bones.length),this.positionNode=Qd,this.toPositionNode=Qd,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){const{skinIndexNode:r,skinWeightNode:s,bindMatrixNode:i,bindMatrixInverseNode:n}=this,a=e.element(r.x),o=e.element(r.y),u=e.element(r.z),l=e.element(r.w),d=i.mul(t),c=Fa(a.mul(s.x).mul(d),o.mul(s.y).mul(d),u.mul(s.z).mul(d),l.mul(s.w).mul(d));return n.mul(c).xyz}getSkinnedNormalAndTangent(e=this.boneMatricesNode,t=oc,r=Jc){const{skinIndexNode:s,skinWeightNode:i,bindMatrixNode:n,bindMatrixInverseNode:a}=this,o=e.element(s.x),u=e.element(s.y),l=e.element(s.z),d=e.element(s.w);let c=Fa(i.x.mul(o),i.y.mul(u),i.z.mul(l),i.w.mul(d));c=a.mul(c).mul(n);return{skinNormal:c.transformDirection(t).xyz,skinTangent:c.transformDirection(r).xyz}}getPreviousSkinnedPosition(e){const t=e.object;return null===this.previousBoneMatricesNode&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=Dc("skeleton.previousBoneMatrices","mat4",t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Yd)}setup(e){e.needsPreviousData()&&Yd.assign(this.getPreviousSkinnedPosition(e));const t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute("normal")){const{skinNormal:t,skinTangent:r}=this.getSkinnedNormalAndTangent();oc.assign(t),e.hasGeometryAttribute("tangent")&&Jc.assign(r)}return t}generate(e,t){if("void"!==t)return super.generate(e,t)}update(e){const t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;vp.get(t)!==e.frameId&&(vp.set(t,e.frameId),null!==this.previousBoneMatricesNode&&(null===t.previousBoneMatrices&&(t.previousBoneMatrices=new Float32Array(t.boneMatrices)),t.previousBoneMatrices.set(t.boneMatrices)),t.update())}}const Sp=e=>new Np(e);class Rp extends di{static get type(){return"LoopNode"}constructor(e=[]){super("void"),this.params=e}getVarName(e){return String.fromCharCode("i".charCodeAt(0)+e)}getProperties(e){const t=e.getNodeProperties(this);if(void 0!==t.stackNode)return t;const r={};for(let e=0,t=this.params.length-1;eNumber(l)?">=":"<")),a)n=`while ( ${l} )`;else{const r={start:u,end:l},s=r.start,i=r.end;let a;const g=()=>h.includes("<")?"+=":"-=";if(null!=p)switch(typeof p){case"function":a=e.flowStagesNode(t.updateNode,"void").code.replace(/\t|;/g,"");break;case"number":a=d+" "+g()+" "+e.generateConst(c,p);break;case"string":a=d+" "+p;break;default:p.isNode?a=d+" "+g()+" "+p.build(e):(o("TSL: 'Loop( { update: ... } )' is not a function, string or number.",this.stackTrace),a="break /* invalid update */")}else p="int"===c||"uint"===c?h.includes("<")?"++":"--":g()+" 1.",a=d+" "+p;n=`for ( ${e.getVar(c,d)+" = "+s}; ${d+" "+h+" "+i}; ${a} )`}e.addFlowCode((0===s?"\n":"")+e.tab+n+" {\n\n").addFlowTab()}const i=s.build(e,"void");t.returnsNode.build(e,"void"),e.removeFlowTab().addFlowCode("\n"+e.tab+i);for(let t=0,r=this.params.length-1;tnew Rp(sn(e,"int")).toStack(),Ap=()=>fl("break").toStack(),wp=new WeakMap,Cp=new s,Mp=dn(({bufferMap:e,influence:t,stride:r,width:s,depth:i,offset:n})=>{const a=yn(dp).mul(r).add(n),o=a.div(s),u=a.sub(o.mul(s));return Il(e,_n(u,o)).depth(i).xyz.mul(t)});class Bp extends di{static get type(){return"MorphNode"}constructor(e){super("void"),this.mesh=e,this.morphBaseInfluence=Na(1),this.updateType=ti.OBJECT}setup(e){const{geometry:r}=e,s=void 0!==r.morphAttributes.position,i=r.hasAttribute("normal")&&void 0!==r.morphAttributes.normal,n=r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color,a=void 0!==n?n.length:0,{texture:o,stride:u,size:l}=function(e){const r=void 0!==e.morphAttributes.position,s=void 0!==e.morphAttributes.normal,i=void 0!==e.morphAttributes.color,n=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=void 0!==n?n.length:0;let o=wp.get(e);if(void 0===o||o.count!==a){void 0!==o&&o.texture.dispose();const u=e.morphAttributes.position||[],l=e.morphAttributes.normal||[],d=e.morphAttributes.color||[];let c=0;!0===r&&(c=1),!0===s&&(c=2),!0===i&&(c=3);let h=e.attributes.position.count*c,p=1;const g=4096;h>g&&(p=Math.ceil(h/g),h=g);const m=new Float32Array(h*p*4*a),f=new K(m,h,p,a);f.type=Q,f.needsUpdate=!0;const y=4*c;for(let x=0;x{const t=fn(0).toVar();this.mesh.count>1&&null!==this.mesh.morphTexture&&void 0!==this.mesh.morphTexture?t.assign(Il(this.mesh.morphTexture,_n(yn(e).add(1),yn(cp))).r):t.assign(Pc("morphTargetInfluences","float").element(e).toVar()),pn(t.notEqual(0),()=>{!0===s&&Qd.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(0)})),!0===i&&oc.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(1)}))})})}update(){const e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}const Fp=nn(Bp).setParameterLength(1);class Lp extends di{static get type(){return"LightingNode"}constructor(){super("vec3"),this.isLightingNode=!0}}class Pp extends Lp{static get type(){return"AONode"}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}}class Dp extends _u{static get type(){return"LightingContextNode"}constructor(e,t=null,r=null,s=null){super(e),this.lightingModel=t,this.backdropNode=r,this.backdropAlphaNode=s,this._value=null}getContext(){const{backdropNode:e,backdropAlphaNode:t}=this,r={directDiffuse:Sn().toVar("directDiffuse"),directSpecular:Sn().toVar("directSpecular"),indirectDiffuse:Sn().toVar("indirectDiffuse"),indirectSpecular:Sn().toVar("indirectSpecular")};return{radiance:Sn().toVar("radiance"),irradiance:Sn().toVar("irradiance"),iblIrradiance:Sn().toVar("iblIrradiance"),ambientOcclusion:fn(1).toVar("ambientOcclusion"),reflectedLight:r,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}const Up=nn(Dp);class Ip extends Lp{static get type(){return"IrradianceNode"}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}}const Op=new t;class Vp extends Pl{static get type(){return"ViewportTextureNode"}constructor(e=Kl,t=null,r=null){let s=null;null===r?(s=new Y,s.minFilter=Z,r=s):s=r,super(r,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=s,this.isOutputTextureNode=!0,this.updateBeforeType=ti.RENDER,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,r;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,r=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,r=this._cacheTextures),null===e)return t;if(!1===r.has(e)){const s=t.clone();r.set(e,s)}return r.get(e)}updateReference(e){const t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){const t=e.renderer,r=t.getRenderTarget();null===r?t.getDrawingBufferSize(Op):Op.set(r.width,r.height);const s=this.getTextureForReference(r);s.image.width===Op.width&&s.image.height===Op.height||(s.image.width=Op.width,s.image.height=Op.height,s.needsUpdate=!0);const i=s.generateMipmaps;s.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(s),s.generateMipmaps=i}clone(){const e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}}const kp=nn(Vp).setParameterLength(0,3),Gp=nn(Vp,null,null,{generateMipmaps:!0}).setParameterLength(0,3),$p=Gp(),zp=(e=Kl,t=null)=>$p.sample(e,t);let Wp=null;class Hp extends Vp{static get type(){return"ViewportDepthTextureNode"}constructor(e=Kl,t=null){null===Wp&&(Wp=new J),super(e,t,Wp)}getTextureForReference(){return Wp}}const qp=nn(Hp).setParameterLength(0,2);class jp extends di{static get type(){return"ViewportDepthNode"}constructor(e,t=null){super("float"),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(e){const{scope:t}=this;return t===jp.DEPTH_BASE?e.getFragDepth():super.generate(e)}setup({camera:e}){const{scope:t}=this,r=this.valueNode;let s=null;if(t===jp.DEPTH_BASE)null!==r&&(s=eg().assign(r));else if(t===jp.DEPTH)s=e.isPerspectiveCamera?Qp(ec.z,bd,xd):Xp(ec.z,bd,xd);else if(t===jp.LINEAR_DEPTH)if(null!==r)if(e.isPerspectiveCamera){const e=Zp(r,bd,xd);s=Xp(e,bd,xd)}else s=r;else s=Xp(ec.z,bd,xd);return s}}jp.DEPTH_BASE="depthBase",jp.DEPTH="depth",jp.LINEAR_DEPTH="linearDepth";const Xp=(e,t,r)=>e.add(t).div(t.sub(r)),Kp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?r.sub(t).mul(e).sub(r):t.sub(r).mul(e).sub(t)),Qp=(e,t,r)=>t.add(e).mul(r).div(r.sub(t).mul(e)),Yp=(e,t,r)=>t.mul(e.add(r)).div(e.mul(t.sub(r))),Zp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?t.mul(r).div(t.sub(r).mul(e).sub(t)):t.mul(r).div(r.sub(t).mul(e).sub(r))),Jp=(e,t,r)=>{t=t.max(1e-6).toVar();const s=xo(e.negate().div(t)),i=xo(r.div(t));return s.div(i)},eg=nn(jp,jp.DEPTH_BASE),tg=an(jp,jp.DEPTH),rg=nn(jp,jp.LINEAR_DEPTH).setParameterLength(0,1),sg=rg(qp());tg.assign=e=>eg(e);class ig extends di{static get type(){return"ClippingNode"}constructor(e=ig.DEFAULT){super(),this.scope=e}setup(e){super.setup(e);const t=e.clippingContext,{intersectionPlanes:r,unionPlanes:s}=t;return this.hardwareClipping=e.material.hardwareClipping,this.scope===ig.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(r,s):this.scope===ig.HARDWARE?this.setupHardwareClipping(s,e):this.setupDefault(r,s)}setupAlphaToCoverage(e,t){return dn(()=>{const r=fn().toVar("distanceToPlane"),s=fn().toVar("distanceToGradient"),i=fn(1).toVar("clipOpacity"),n=t.length;if(!1===this.hardwareClipping&&n>0){const e=$l(t).setGroup(Ta);Ep(n,({i:t})=>{const n=e.element(t);r.assign(ec.dot(n.xyz).negate().add(n.w)),s.assign(r.fwidth().div(2)),i.mulAssign(cu(s.negate(),s,r))})}const a=e.length;if(a>0){const t=$l(e).setGroup(Ta),n=fn(1).toVar("intersectionClipOpacity");Ep(a,({i:e})=>{const i=t.element(e);r.assign(ec.dot(i.xyz).negate().add(i.w)),s.assign(r.fwidth().div(2)),n.mulAssign(cu(s.negate(),s,r).oneMinus())}),i.mulAssign(n.oneMinus())}kn.a.mulAssign(i),kn.a.equal(0).discard()})()}setupDefault(e,t){return dn(()=>{const r=t.length;if(!1===this.hardwareClipping&&r>0){const e=$l(t).setGroup(Ta);Ep(r,({i:t})=>{const r=e.element(t);ec.dot(r.xyz).greaterThan(r.w).discard()})}const s=e.length;if(s>0){const t=$l(e).setGroup(Ta),r=xn(!0).toVar("clipped");Ep(s,({i:e})=>{const s=t.element(e);r.assign(ec.dot(s.xyz).greaterThan(s.w).and(r))}),r.discard()}})()}setupHardwareClipping(e,t){const r=e.length;return t.enableHardwareClipping(r),dn(()=>{const s=$l(e).setGroup(Ta),i=Wl(t.getClipDistance());Ep(r,({i:e})=>{const t=s.element(e),r=ec.dot(t.xyz).sub(t.w).negate();i.element(e).assign(r)})})()}}ig.ALPHA_TO_COVERAGE="alphaToCoverage",ig.DEFAULT="default",ig.HARDWARE="hardware";const ng=dn(([e])=>Ro(Pa(1e4,Eo(Pa(17,e.x).add(Pa(.1,e.y)))).mul(Fa(.1,Fo(Eo(Pa(13,e.y).add(e.x))))))),ag=dn(([e])=>ng(Tn(ng(e.xy),e.z))),og=dn(([e])=>{const t=jo(Po(Io(e.xyz)),Po(Oo(e.xyz))),r=fn(1).div(fn(.05).mul(t)).toVar("pixScale"),s=Tn(yo(vo(xo(r))),yo(No(xo(r)))),i=Tn(ag(vo(s.x.mul(e.xyz))),ag(vo(s.y.mul(e.xyz)))),n=Ro(xo(r)),a=Fa(Pa(n.oneMinus(),i.x),Pa(n,i.y)),o=qo(n,n.oneMinus()),u=Sn(a.mul(a).div(Pa(2,o).mul(La(1,o))),a.sub(Pa(.5,o)).div(La(1,o)),La(1,La(1,a).mul(La(1,a)).div(Pa(2,o).mul(La(1,o))))),l=a.lessThan(o.oneMinus()).select(a.lessThan(o).select(u.x,u.y),u.z);return uu(l,1e-6,1)}).setLayout({name:"getAlphaHashThreshold",type:"float",inputs:[{name:"position",type:"vec3"}]});class ug extends Rl{static get type(){return"VertexColorNode"}constructor(e){super(null,"vec4"),this.isVertexColorNode=!0,this.index=e}getAttributeName(){const e=this.index;return"color"+(e>0?e:"")}generate(e){const t=this.getAttributeName(e);let r;return r=!0===e.hasGeometryAttribute(t)?super.generate(e):e.generateConst(this.nodeType,new s(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}}const lg=(e=0)=>new ug(e),dg=dn(([e,t])=>qo(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:"blendBurn",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),cg=dn(([e,t])=>qo(e.div(t.oneMinus()),1)).setLayout({name:"blendDodge",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),hg=dn(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:"blendScreen",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),pg=dn(([e,t])=>ou(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),Xo(.5,e))).setLayout({name:"blendOverlay",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),gg=dn(([e,t])=>{const r=t.a.add(e.a.mul(t.a.oneMinus()));return wn(t.rgb.mul(t.a).add(e.rgb.mul(e.a).mul(t.a.oneMinus())).div(r),r)}).setLayout({name:"blendColor",type:"vec4",inputs:[{name:"base",type:"vec4"},{name:"blend",type:"vec4"}]}),mg=dn(([e])=>wn(e.rgb.mul(e.a),e.a),{color:"vec4",return:"vec4"}),fg=dn(([e])=>(pn(e.a.equal(0),()=>wn(0)),wn(e.rgb.div(e.a),e.a)),{color:"vec4",return:"vec4"});class yg extends ee{static get type(){return"NodeMaterial"}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.maskShadowNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,this.contextNode=null}_getNodeChildren(){const e=[];for(const t of Object.getOwnPropertyNames(this)){if(!0===t.startsWith("_"))continue;const r=this[t];r&&!0===r.isNode&&e.push({property:t,childNode:r})}return e}customProgramCacheKey(){const e=[];for(const{property:t,childNode:r}of this._getNodeChildren())e.push(Os(t.slice(0,-4)),r.getCacheKey());return this.type+Vs(e)}build(e){this.setup(e)}setupObserver(e){return new Ps(e)}setup(e){e.context.setupNormal=()=>Pu(this.setupNormal(e),"NORMAL","vec3"),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);const t=e.renderer,r=t.getRenderTarget();!0===t.contextNode.isContextNode?e.context={...e.context,...t.contextNode.getFlowContextData()}:o('NodeMaterial: "renderer.contextNode" must be an instance of `context()`.'),null!==this.contextNode&&(!0===this.contextNode.isContextNode?e.context={...e.context,...this.contextNode.getFlowContextData()}:o('NodeMaterial: "material.contextNode" must be an instance of `context()`.')),e.addStack();const s=this.setupVertex(e),i=Pu(this.vertexNode||s,"VERTEX");let n;e.context.clipSpace=i,e.stack.outputNode=i,this.setupHardwareClipping(e),null!==this.geometryNode&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow("vertex",e.removeStack()),e.addStack();const a=this.setupClipping(e);if(!0!==this.depthWrite&&!0!==this.depthTest||(null!==r?!0===r.depthBuffer&&this.setupDepth(e):!0===t.depth&&this.setupDepth(e)),null===this.fragmentNode){this.setupDiffuseColor(e),this.setupVariants(e);const s=this.setupLighting(e);null!==a&&e.stack.addToStack(a);const i=wn(s,kn.a).max(0);n=this.setupOutput(e,i),aa.assign(n);const o=null!==this.outputNode;if(o&&(n=this.outputNode),e.context.getOutput&&(n=e.context.getOutput(n,e)),null!==r){const e=t.getMRT(),r=this.mrtNode;null!==e?(o&&aa.assign(n),n=e,null!==r&&(n=e.merge(r))):null!==r&&(n=r)}}else{let t=this.fragmentNode;!0!==t.isOutputStructNode&&(t=wn(t)),n=this.setupOutput(e,t)}e.stack.outputNode=n,e.addFlow("fragment",e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(null===e.clippingContext)return null;const{unionPlanes:t,intersectionPlanes:r}=e.clippingContext;let s=null;if(t.length>0||r.length>0){const t=e.renderer.currentSamples;this.alphaToCoverage&&t>1?s=new ig(ig.ALPHA_TO_COVERAGE):e.stack.addToStack(new ig)}return s}setupHardwareClipping(e){if(this.hardwareClipping=!1,null===e.clippingContext)return;const t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable("clipDistance")&&(e.stack.addToStack(new ig(ig.HARDWARE)),this.hardwareClipping=!0)}setupDepth(e){const{renderer:t,camera:r}=e;let s=this.depthNode;if(null===s){const e=t.getMRT();e&&e.has("depth")?s=e.get("depth"):!0===t.logarithmicDepthBuffer&&(s=r.isPerspectiveCamera?Jp(ec.z,bd,xd):Xp(ec.z,bd,xd))}null!==s&&tg.assign(s).toStack()}setupPositionView(){return Wd.mul(Qd).xyz}setupModelViewProjection(){return Td.mul(ec)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.position=e.removeStack(),ip}setupPosition(e){const{object:t,geometry:r}=e;if((r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color)&&Fp(t).toStack(),!0===t.isSkinnedMesh&&Sp(t).toStack(),this.displacementMap){const e=Ic("displacementMap","texture"),t=Ic("displacementScale","float"),r=Ic("displacementBias","float");Qd.addAssign(oc.normalize().mul(e.x.mul(t).add(r)))}return t.isBatchedMesh&&_p(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&!0===t.instanceMatrix.isInstancedBufferAttribute&&xp(t).toStack(),null!==this.positionNode&&Qd.assign(Pu(this.positionNode,"POSITION","vec3")),Qd}setupDiffuseColor(e){const{object:t,geometry:r}=e;null!==this.maskNode&&xn(this.maskNode).not().discard();let s=this.colorNode?wn(this.colorNode):_h;if(!0===this.vertexColors&&r.hasAttribute("color")&&(s=s.mul(lg())),t.instanceColor){s=Vn("vec3","vInstanceColor").mul(s)}if(t.isBatchedMesh&&t._colorsTexture){s=Vn("vec3","vBatchColor").mul(s)}kn.assign(s);const i=this.opacityNode?fn(this.opacityNode):Sh;kn.a.assign(kn.a.mul(i));let n=null;(null!==this.alphaTestNode||this.alphaTest>0)&&(n=null!==this.alphaTestNode?fn(this.alphaTestNode):Th,!0===this.alphaToCoverage?(kn.a=cu(n,n.add($o(kn.a)),kn.a),kn.a.lessThanEqual(0).discard()):kn.a.lessThanEqual(n).discard()),!0===this.alphaHash&&kn.a.lessThan(og(Qd)).discard(),e.isOpaque()&&kn.a.assign(1)}setupVariants(){}setupOutgoingLight(){return!0===this.lights?Sn(0):kn.rgb}setupNormal(){return this.normalNode?Sn(this.normalNode):Fh}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?Ic("envMap","cubeTexture"):Ic("envMap","texture")),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Ip(tp)),t}setupLights(e){const t=[],r=this.setupEnvironment(e);r&&r.isLightingNode&&t.push(r);const s=this.setupLightMap(e);s&&s.isLightingNode&&t.push(s);let i=this.aoNode;null===i&&e.material.aoMap&&(i=rp),e.context.getAO&&(i=e.context.getAO(i,e)),i&&t.push(new Pp(i));let n=this.lightsNode||e.lightsNode;return t.length>0&&(n=e.renderer.lighting.createNode([...n.getLights(),...t])),n}setupLightingModel(){}setupLighting(e){const{material:t}=e,{backdropNode:r,backdropAlphaNode:s,emissiveNode:i}=this,n=!0===this.lights||null!==this.lightsNode?this.setupLights(e):null;let a=this.setupOutgoingLight(e);if(n&&n.getScope().hasLights){const t=this.setupLightingModel(e)||null;a=Up(n,t,r,s)}else null!==r&&(a=Sn(null!==s?ou(a,r,s):r));return(i&&!0===i.isNode||t.emissive&&!0===t.emissive.isColor)&&($n.assign(Sn(i||Nh)),a=a.add($n)),a}setupFog(e,t){const r=e.fogNode;return r&&(aa.assign(t),t=wn(r.toVar())),t}setupPremultipliedAlpha(e,t){return mg(t)}setupOutput(e,t){return!0===this.fog&&(t=this.setupFog(e,t)),!0===this.premultipliedAlpha&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(const t in e){const r=e[t];void 0===this[t]&&(this[t]=r,r&&r.clone&&(this[t]=r.clone()))}const t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(const e in t)void 0===Object.getOwnPropertyDescriptor(this.constructor.prototype,e)&&void 0!==t[e].get&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{},nodes:{}});const r=ee.prototype.toJSON.call(this,e);r.inputNodes={};for(const{property:t,childNode:s}of this._getNodeChildren())r.inputNodes[t]=s.toJSON(e).uuid;function s(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(t){const t=s(e.textures),i=s(e.images),n=s(e.nodes);t.length>0&&(r.textures=t),i.length>0&&(r.images=i),n.length>0&&(r.nodes=n)}return r}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.aoNode=e.aoNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.maskShadowNode=e.maskShadowNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,this.contextNode=e.contextNode,super.copy(e)}}const bg=new te;class xg extends yg{static get type(){return"LineBasicNodeMaterial"}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.setDefaultValues(bg),this.setValues(e)}}const Tg=new re;class _g extends yg{static get type(){return"LineDashedNodeMaterial"}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.setDefaultValues(Tg),this.dashOffset=0,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){const e=this.offsetNode?fn(this.offsetNode):Zh,t=this.dashScaleNode?fn(this.dashScaleNode):Xh,r=this.dashSizeNode?fn(this.dashSizeNode):Kh,s=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(r),ua.assign(s);const i=Uu(El("lineDistance").mul(t));(e?i.add(e):i).mod(oa.add(ua)).greaterThan(oa).discard()}}const vg=new re;class Ng extends yg{static get type(){return"Line2NodeMaterial"}constructor(e={}){super(),this.isLine2NodeMaterial=!0,this.setDefaultValues(vg),this.vertexColors=e.vertexColors,this.dashOffset=0,this.lineColorNode=null,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.blending=se,this._useDash=e.dashed,this._useAlphaToCoverage=!0,this._useWorldUnits=!1,this.setValues(e)}setup(e){const{renderer:t}=e,r=this._useAlphaToCoverage,s=this.vertexColors,i=this._useDash,n=this._useWorldUnits,a=dn(({start:e,end:t})=>{const r=Td.element(2).element(2),s=Td.element(3).element(2).mul(-.5).div(r).sub(e.z).div(t.z.sub(e.z));return wn(ou(e.xyz,t.xyz,s),t.w)}).setLayout({name:"trimSegment",type:"vec4",inputs:[{name:"start",type:"vec4"},{name:"end",type:"vec4"}]});this.vertexNode=dn(()=>{const e=El("instanceStart"),t=El("instanceEnd"),r=wn(Wd.mul(wn(e,1))).toVar("start"),s=wn(Wd.mul(wn(t,1))).toVar("end");if(i){const e=this.dashScaleNode?fn(this.dashScaleNode):Xh,t=this.offsetNode?fn(this.offsetNode):Zh,r=El("instanceDistanceStart"),s=El("instanceDistanceEnd");let i=Kd.y.lessThan(.5).select(e.mul(r),e.mul(s));i=i.add(t),Vn("float","lineDistance").assign(i)}n&&(Vn("vec3","worldStart").assign(r.xyz),Vn("vec3","worldEnd").assign(s.xyz));const o=Zl.z.div(Zl.w),u=Td.element(2).element(3).equal(-1);pn(u,()=>{pn(r.z.lessThan(0).and(s.z.greaterThan(0)),()=>{s.assign(a({start:r,end:s}))}).ElseIf(s.z.lessThan(0).and(r.z.greaterThanEqual(0)),()=>{r.assign(a({start:s,end:r}))})});const l=Td.mul(r),d=Td.mul(s),c=l.xyz.div(l.w),h=d.xyz.div(d.w),p=h.xy.sub(c.xy).toVar();p.x.assign(p.x.mul(o)),p.assign(p.normalize());const g=wn().toVar();if(n){const e=s.xyz.sub(r.xyz).normalize(),t=ou(r.xyz,s.xyz,.5).normalize(),n=e.cross(t).normalize(),a=e.cross(n),o=Vn("vec4","worldPos");o.assign(Kd.y.lessThan(.5).select(r,s));const u=Yh.mul(.5);o.addAssign(wn(Kd.x.lessThan(0).select(n.mul(u),n.mul(u).negate()),0)),i||(o.addAssign(wn(Kd.y.lessThan(.5).select(e.mul(u).negate(),e.mul(u)),0)),o.addAssign(wn(a.mul(u),0)),pn(Kd.y.greaterThan(1).or(Kd.y.lessThan(0)),()=>{o.subAssign(wn(a.mul(2).mul(u),0))})),g.assign(Td.mul(o));const l=Sn().toVar();l.assign(Kd.y.lessThan(.5).select(c,h)),g.z.assign(l.z.mul(g.w))}else{const e=Tn(p.y,p.x.negate()).toVar("offset");p.x.assign(p.x.div(o)),e.x.assign(e.x.div(o)),e.assign(Kd.x.lessThan(0).select(e.negate(),e)),pn(Kd.y.lessThan(0),()=>{e.assign(e.sub(p))}).ElseIf(Kd.y.greaterThan(1),()=>{e.assign(e.add(p))}),e.assign(e.mul(Yh)),e.assign(e.div(Zl.w.div(Xl))),g.assign(Kd.y.lessThan(.5).select(l,d)),e.assign(e.mul(g.w)),g.assign(g.add(wn(e,0,0)))}return g})();const o=dn(({p1:e,p2:t,p3:r,p4:s})=>{const i=e.sub(r),n=s.sub(r),a=t.sub(e),o=i.dot(n),u=n.dot(a),l=i.dot(a),d=n.dot(n),c=a.dot(a).mul(d).sub(u.mul(u)),h=o.mul(u).sub(l.mul(d)).div(c).clamp(),p=o.add(u.mul(h)).div(d).clamp();return Tn(h,p)});if(this.colorNode=dn(()=>{const e=Al();if(i){const t=this.dashSizeNode?fn(this.dashSizeNode):Kh,r=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(t),ua.assign(r);const s=Vn("float","lineDistance");e.y.lessThan(-1).or(e.y.greaterThan(1)).discard(),s.mod(oa.add(ua)).greaterThan(oa).discard()}const a=fn(1).toVar("alpha");if(n){const e=Vn("vec3","worldStart"),s=Vn("vec3","worldEnd"),n=Vn("vec4","worldPos").xyz.normalize().mul(1e5),u=s.sub(e),l=o({p1:e,p2:s,p3:Sn(0,0,0),p4:n}),d=e.add(u.mul(l.x)),c=n.mul(l.y),h=d.sub(c).length().div(Yh);if(!i)if(r&&t.currentSamples>0){const e=h.fwidth();a.assign(cu(e.negate().add(.5),e.add(.5),h).oneMinus())}else h.greaterThan(.5).discard()}else if(r&&t.currentSamples>0){const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1)),s=t.mul(t).add(r.mul(r)),i=fn(s.fwidth()).toVar("dlen");pn(e.y.abs().greaterThan(1),()=>{a.assign(cu(i.oneMinus(),i.add(1),s).oneMinus())})}else pn(e.y.abs().greaterThan(1),()=>{const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1));t.mul(t).add(r.mul(r)).greaterThan(1).discard()});let u;if(this.lineColorNode)u=this.lineColorNode;else if(s){const e=El("instanceColorStart"),t=El("instanceColorEnd");u=Kd.y.lessThan(.5).select(e,t).mul(_h)}else u=_h;return wn(u,a)})(),this.transparent){const e=this.opacityNode?fn(this.opacityNode):Sh;this.outputNode=wn(this.colorNode.rgb.mul(e).add(zp().rgb.mul(e.oneMinus())),this.colorNode.a)}super.setup(e)}get worldUnits(){return this._useWorldUnits}set worldUnits(e){this._useWorldUnits!==e&&(this._useWorldUnits=e,this.needsUpdate=!0)}get dashed(){return this._useDash}set dashed(e){this._useDash!==e&&(this._useDash=e,this.needsUpdate=!0)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const Sg=new ie;class Rg extends yg{static get type(){return"MeshNormalNodeMaterial"}constructor(e){super(),this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(Sg),this.setValues(e)}setupDiffuseColor(){const e=this.opacityNode?fn(this.opacityNode):Sh;kn.assign(zu(wn(dh(cc),e),ne))}}const Eg=dn(([e=Jd])=>{const t=e.z.atan(e.x).mul(1/(2*Math.PI)).add(.5),r=e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5);return Tn(t,r)});class Ag extends ae{constructor(e=1,t={}){super(e,e,t),this.isCubeRenderTarget=!0;const r={width:e,height:e,depth:1},s=[r,r,r,r,r,r];this.texture=new U(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){const r=t.minFilter,s=t.generateMipmaps;t.generateMipmaps=!0,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=new oe(5,5,5),n=Eg(Jd),a=new yg;a.colorNode=Ul(t,n,0),a.side=L,a.blending=se;const o=new ue(i,a),u=new le;u.add(o),t.minFilter===Z&&(t.minFilter=de);const l=new ce(1,10,this),d=e.getMRT();return e.setMRT(null),l.update(e,u),e.setMRT(d),t.minFilter=r,t.currentGenerateMipmaps=s,o.geometry.dispose(),o.material.dispose(),this}clear(e,t=!0,r=!0,s=!0){const i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,r,s);e.setRenderTarget(i)}}const wg=new WeakMap;class Cg extends pi{static get type(){return"CubeMapNode"}constructor(e){super("vec3"),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=Bc(null);const t=new U;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=ti.RENDER}updateBefore(e){const{renderer:t,material:r}=e,s=this.envNode;if(s.isTextureNode||s.isMaterialReferenceNode){const e=s.isTextureNode?s.value:r[s.property];if(e&&e.isTexture){const r=e.mapping;if(r===he||r===pe){if(wg.has(e)){const t=wg.get(e);Bg(t,e.mapping),this._cubeTexture=t}else{const r=e.image;if(function(e){return null!=e&&e.height>0}(r)){const s=new Ag(r.height);s.fromEquirectangularTexture(t,e),Bg(s.texture,e.mapping),this._cubeTexture=s.texture,wg.set(e,s.texture),e.addEventListener("dispose",Mg)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}}function Mg(e){const t=e.target;t.removeEventListener("dispose",Mg);const r=wg.get(t);void 0!==r&&(wg.delete(t),r.dispose())}function Bg(e,t){t===he?e.mapping=I:t===pe&&(e.mapping=O)}const Fg=nn(Cg).setParameterLength(1);class Lg extends Lp{static get type(){return"BasicEnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=Fg(this.envNode)}}class Pg extends Lp{static get type(){return"BasicLightMapNode"}constructor(e=null){super(),this.lightMapNode=e}setup(e){const t=fn(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}}class Dg{start(e){e.lightsNode.setupLights(e,e.lightsNode.getLightNodes(e)),this.indirect(e)}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}}class Ug extends Dg{constructor(){super()}indirect({context:e}){const t=e.ambientOcclusion,r=e.reflectedLight,s=e.irradianceLightMap;r.indirectDiffuse.assign(wn(0)),s?r.indirectDiffuse.addAssign(s):r.indirectDiffuse.addAssign(wn(1,1,1,0)),r.indirectDiffuse.mulAssign(t),r.indirectDiffuse.mulAssign(kn.rgb)}finish(e){const{material:t,context:r}=e,s=r.outgoingLight,i=e.context.environment;if(i)switch(t.combine){case fe:s.rgb.assign(ou(s.rgb,s.rgb.mul(i.rgb),wh.mul(Ch)));break;case me:s.rgb.assign(ou(s.rgb,i.rgb,wh.mul(Ch)));break;case ge:s.rgb.addAssign(i.rgb.mul(wh.mul(Ch)));break;default:d("BasicLightingModel: Unsupported .combine value:",t.combine)}}}const Ig=new ye;class Og extends yg{static get type(){return"MeshBasicNodeMaterial"}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Ig),this.setValues(e)}setupNormal(){return nc(lc)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Pg(tp)),t}setupOutgoingLight(){return kn.rgb}setupLightingModel(){return new Ug}}const Vg=dn(({f0:e,f90:t,dotVH:r})=>{const s=r.mul(-5.55473).sub(6.98316).mul(r).exp2();return e.mul(s.oneMinus()).add(t.mul(s))}),kg=dn(e=>e.diffuseColor.mul(1/Math.PI)),Gg=dn(({dotNH:e})=>na.mul(fn(.5)).add(1).mul(fn(1/Math.PI)).mul(e.pow(na))),$g=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(t).clamp(),s=tc.dot(t).clamp(),i=Vg({f0:ra,f90:1,dotVH:s}),n=fn(.25),a=Gg({dotNH:r});return i.mul(n).mul(a)});class zg extends Ug{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t);r.directDiffuse.addAssign(s.mul(kg({diffuseColor:kn.rgb}))),!0===this.specular&&r.directSpecular.addAssign(s.mul($g({lightDirection:e})).mul(wh))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Wg=new be;class Hg extends yg{static get type(){return"MeshLambertNodeMaterial"}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Wg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg(!1)}}const qg=new xe;class jg extends yg{static get type(){return"MeshPhongNodeMaterial"}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(qg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg}setupVariants(){const e=(this.shininessNode?fn(this.shininessNode):vh).max(1e-4);na.assign(e);const t=this.specularNode||Rh;ra.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}}const Xg=dn(e=>{if(!1===e.geometry.hasAttribute("normal"))return fn(0);const t=lc.dFdx().abs().max(lc.dFdy().abs());return t.x.max(t.y).max(t.z)}),Kg=dn(e=>{const{roughness:t}=e,r=Xg();let s=t.max(.0525);return s=s.add(r),s=s.min(1),s}),Qg=dn(({alpha:e,dotNL:t,dotNV:r})=>{const s=e.pow2(),i=t.mul(s.add(s.oneMinus().mul(r.pow2())).sqrt()),n=r.mul(s.add(s.oneMinus().mul(t.pow2())).sqrt());return Da(.5,i.add(n).max(no))}).setLayout({name:"V_GGX_SmithCorrelated",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNL",type:"float"},{name:"dotNV",type:"float"}]}),Yg=dn(({alphaT:e,alphaB:t,dotTV:r,dotBV:s,dotTL:i,dotBL:n,dotNV:a,dotNL:o})=>{const u=o.mul(Sn(e.mul(r),t.mul(s),a).length()),l=a.mul(Sn(e.mul(i),t.mul(n),o).length());return Da(.5,u.add(l))}).setLayout({name:"V_GGX_SmithCorrelated_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotTV",type:"float",qualifier:"in"},{name:"dotBV",type:"float",qualifier:"in"},{name:"dotTL",type:"float",qualifier:"in"},{name:"dotBL",type:"float",qualifier:"in"},{name:"dotNV",type:"float",qualifier:"in"},{name:"dotNL",type:"float",qualifier:"in"}]}),Zg=dn(({alpha:e,dotNH:t})=>{const r=e.pow2(),s=t.pow2().mul(r.oneMinus()).oneMinus();return r.div(s.pow2()).mul(1/Math.PI)}).setLayout({name:"D_GGX",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNH",type:"float"}]}),Jg=fn(1/Math.PI),em=dn(({alphaT:e,alphaB:t,dotNH:r,dotTH:s,dotBH:i})=>{const n=e.mul(t),a=Sn(t.mul(s),e.mul(i),n.mul(r)),o=a.dot(a),u=n.div(o);return Jg.mul(n.mul(u.pow2()))}).setLayout({name:"D_GGX_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotNH",type:"float",qualifier:"in"},{name:"dotTH",type:"float",qualifier:"in"},{name:"dotBH",type:"float",qualifier:"in"}]}),tm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,normalView:n=cc,USE_IRIDESCENCE:a,USE_ANISOTROPY:o})=>{const u=s.pow2(),l=e.add(tc).normalize(),d=n.dot(e).clamp(),c=n.dot(tc).clamp(),h=n.dot(l).clamp(),p=tc.dot(l).clamp();let g,m,f=Vg({f0:t,f90:r,dotVH:p});if(Yi(a)&&(f=Kn.mix(f,i)),Yi(o)){const t=ea.dot(e),r=ea.dot(tc),s=ea.dot(l),i=ta.dot(e),n=ta.dot(tc),a=ta.dot(l);g=Yg({alphaT:Zn,alphaB:u,dotTV:r,dotBV:n,dotTL:t,dotBL:i,dotNV:c,dotNL:d}),m=em({alphaT:Zn,alphaB:u,dotNH:h,dotTH:s,dotBH:a})}else g=Qg({alpha:u,dotNL:d,dotNV:c}),m=Zg({alpha:u,dotNH:h});return f.mul(g).mul(m)}),rm=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let sm=null;const im=dn(({roughness:e,dotNV:t})=>{null===sm&&(sm=new Te(rm,16,16,W,_e),sm.name="DFG_LUT",sm.minFilter=de,sm.magFilter=de,sm.wrapS=ve,sm.wrapT=ve,sm.generateMipmaps=!1,sm.needsUpdate=!0);const r=Tn(e,t);return Ul(sm,r).rg}),nm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a})=>{const o=tm({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a}),u=cc.dot(e).clamp(),l=cc.dot(tc).clamp(),d=im({roughness:s,dotNV:l}),c=im({roughness:s,dotNV:u}),h=t.mul(d.x).add(r.mul(d.y)),p=t.mul(c.x).add(r.mul(c.y)),g=d.x.add(d.y),m=c.x.add(c.y),f=fn(1).sub(g),y=fn(1).sub(m),b=t.add(t.oneMinus().mul(.047619)),x=h.mul(p).mul(b).div(fn(1).sub(f.mul(y).mul(b).mul(b)).add(no)),T=f.mul(y),_=x.mul(T);return o.add(_)}),am=dn(e=>{const{dotNV:t,specularColor:r,specularF90:s,roughness:i}=e,n=im({dotNV:t,roughness:i});return r.mul(n.x).add(s.mul(n.y))}),om=dn(({f:e,f90:t,dotVH:r})=>{const s=r.oneMinus().saturate(),i=s.mul(s),n=s.mul(i,i).clamp(0,.9999);return e.sub(Sn(t).mul(n)).div(n.oneMinus())}).setLayout({name:"Schlick_to_F0",type:"vec3",inputs:[{name:"f",type:"vec3"},{name:"f90",type:"float"},{name:"dotVH",type:"float"}]}),um=dn(({roughness:e,dotNH:t})=>{const r=e.pow2(),s=fn(1).div(r),i=t.pow2().oneMinus().max(.0078125);return fn(2).add(s).mul(i.pow(s.mul(.5))).div(2*Math.PI)}).setLayout({name:"D_Charlie",type:"float",inputs:[{name:"roughness",type:"float"},{name:"dotNH",type:"float"}]}),lm=dn(({dotNV:e,dotNL:t})=>fn(1).div(fn(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:"V_Neubelt",type:"float",inputs:[{name:"dotNV",type:"float"},{name:"dotNL",type:"float"}]}),dm=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(e).clamp(),s=cc.dot(tc).clamp(),i=cc.dot(t).clamp(),n=um({roughness:Xn,dotNH:i}),a=lm({dotNV:s,dotNL:r});return jn.mul(n).mul(a)}),cm=dn(({N:e,V:t,roughness:r})=>{const s=e.dot(t).saturate(),i=Tn(r,s.oneMinus().sqrt());return i.assign(i.mul(.984375).add(.0078125)),i}).setLayout({name:"LTC_Uv",type:"vec2",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"roughness",type:"float"}]}),hm=dn(({f:e})=>{const t=e.length();return jo(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:"LTC_ClippedSphereFormFactor",type:"float",inputs:[{name:"f",type:"vec3"}]}),pm=dn(({v1:e,v2:t})=>{const r=e.dot(t),s=r.abs().toVar(),i=s.mul(.0145206).add(.4965155).mul(s).add(.8543985).toVar(),n=s.add(4.1616724).mul(s).add(3.417594).toVar(),a=i.div(n),o=r.greaterThan(0).select(a,jo(r.mul(r).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(a));return e.cross(t).mul(o)}).setLayout({name:"LTC_EdgeVectorFormFactor",type:"vec3",inputs:[{name:"v1",type:"vec3"},{name:"v2",type:"vec3"}]}),gm=dn(({N:e,V:t,P:r,mInv:s,p0:i,p1:n,p2:a,p3:o})=>{const u=n.sub(i).toVar(),l=o.sub(i).toVar(),d=u.cross(l),c=Sn().toVar();return pn(d.dot(r.sub(i)).greaterThanEqual(0),()=>{const u=t.sub(e.mul(t.dot(e))).normalize(),l=e.cross(u).negate(),d=s.mul(Ln(u,l,e).transpose()).toVar(),h=d.mul(i.sub(r)).normalize().toVar(),p=d.mul(n.sub(r)).normalize().toVar(),g=d.mul(a.sub(r)).normalize().toVar(),m=d.mul(o.sub(r)).normalize().toVar(),f=Sn(0).toVar();f.addAssign(pm({v1:h,v2:p})),f.addAssign(pm({v1:p,v2:g})),f.addAssign(pm({v1:g,v2:m})),f.addAssign(pm({v1:m,v2:h})),c.assign(Sn(hm({f:f})))}),c}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"P",type:"vec3"},{name:"mInv",type:"mat3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),mm=dn(({P:e,p0:t,p1:r,p2:s,p3:i})=>{const n=r.sub(t).toVar(),a=i.sub(t).toVar(),o=n.cross(a),u=Sn().toVar();return pn(o.dot(e.sub(t)).greaterThanEqual(0),()=>{const n=t.sub(e).normalize().toVar(),a=r.sub(e).normalize().toVar(),o=s.sub(e).normalize().toVar(),l=i.sub(e).normalize().toVar(),d=Sn(0).toVar();d.addAssign(pm({v1:n,v2:a})),d.addAssign(pm({v1:a,v2:o})),d.addAssign(pm({v1:o,v2:l})),d.addAssign(pm({v1:l,v2:n})),u.assign(Sn(hm({f:d.abs()})))}),u}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"P",type:"vec3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),fm=1/6,ym=e=>Pa(fm,Pa(e,Pa(e,e.negate().add(3)).sub(3)).add(1)),bm=e=>Pa(fm,Pa(e,Pa(e,Pa(3,e).sub(6))).add(4)),xm=e=>Pa(fm,Pa(e,Pa(e,Pa(-3,e).add(3)).add(3)).add(1)),Tm=e=>Pa(fm,eu(e,3)),_m=e=>ym(e).add(bm(e)),vm=e=>xm(e).add(Tm(e)),Nm=e=>Fa(-1,bm(e).div(ym(e).add(bm(e)))),Sm=e=>Fa(1,Tm(e).div(xm(e).add(Tm(e)))),Rm=(e,t,r)=>{const s=e.uvNode,i=Pa(s,t.zw).add(.5),n=vo(i),a=Ro(i),o=_m(a.x),u=vm(a.x),l=Nm(a.x),d=Sm(a.x),c=Nm(a.y),h=Sm(a.y),p=Tn(n.x.add(l),n.y.add(c)).sub(.5).mul(t.xy),g=Tn(n.x.add(d),n.y.add(c)).sub(.5).mul(t.xy),m=Tn(n.x.add(l),n.y.add(h)).sub(.5).mul(t.xy),f=Tn(n.x.add(d),n.y.add(h)).sub(.5).mul(t.xy),y=_m(a.y).mul(Fa(o.mul(e.sample(p).level(r)),u.mul(e.sample(g).level(r)))),b=vm(a.y).mul(Fa(o.mul(e.sample(m).level(r)),u.mul(e.sample(f).level(r))));return y.add(b)},Em=dn(([e,t])=>{const r=Tn(e.size(yn(t))),s=Tn(e.size(yn(t.add(1)))),i=Da(1,r),n=Da(1,s),a=Rm(e,wn(i,r),vo(t)),o=Rm(e,wn(n,s),No(t));return Ro(t).mix(a,o)}),Am=dn(([e,t])=>{const r=t.mul(Bl(e));return Em(e,r)}),wm=dn(([e,t,r,s,i])=>{const n=Sn(du(t.negate(),So(e),Da(1,s))),a=Sn(Po(i[0].xyz),Po(i[1].xyz),Po(i[2].xyz));return So(n).mul(r.mul(a))}).setLayout({name:"getVolumeTransmissionRay",type:"vec3",inputs:[{name:"n",type:"vec3"},{name:"v",type:"vec3"},{name:"thickness",type:"float"},{name:"ior",type:"float"},{name:"modelMatrix",type:"mat4"}]}),Cm=dn(([e,t])=>e.mul(uu(t.mul(2).sub(2),0,1))).setLayout({name:"applyIorToRoughness",type:"float",inputs:[{name:"roughness",type:"float"},{name:"ior",type:"float"}]}),Mm=Gp(),Bm=zp(),Fm=dn(([e,t,r],{material:s})=>{const i=(s.side===L?Mm:Bm).sample(e),n=xo(Ql.x).mul(Cm(t,r));return Em(i,n)}),Lm=dn(([e,t,r])=>(pn(r.notEqual(0),()=>{const s=bo(t).negate().div(r);return fo(s.negate().mul(e))}),Sn(1))).setLayout({name:"volumeAttenuation",type:"vec3",inputs:[{name:"transmissionDistance",type:"float"},{name:"attenuationColor",type:"vec3"},{name:"attenuationDistance",type:"float"}]}),Pm=dn(([e,t,r,s,i,n,a,o,u,l,d,c,h,p,g])=>{let m,f;if(g){m=wn().toVar(),f=Sn().toVar();const i=d.sub(1).mul(g.mul(.025)),n=Sn(d.sub(i),d,d.add(i));Ep({start:0,end:3},({i:i})=>{const d=n.element(i),g=wm(e,t,c,d,o),y=a.add(g),b=l.mul(u.mul(wn(y,1))),x=Tn(b.xy.div(b.w)).toVar();x.addAssign(1),x.divAssign(2),x.assign(Tn(x.x,x.y.oneMinus()));const T=Fm(x,r,d);m.element(i).assign(T.element(i)),m.a.addAssign(T.a),f.element(i).assign(s.element(i).mul(Lm(Po(g),h,p).element(i)))}),m.a.divAssign(3)}else{const i=wm(e,t,c,d,o),n=a.add(i),g=l.mul(u.mul(wn(n,1))),y=Tn(g.xy.div(g.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(Tn(y.x,y.y.oneMinus())),m=Fm(y,r,d),f=s.mul(Lm(Po(i),h,p))}const y=f.rgb.mul(m.rgb),b=e.dot(t).clamp(),x=Sn(am({dotNV:b,specularColor:i,specularF90:n,roughness:r})),T=f.r.add(f.g,f.b).div(3);return wn(x.oneMinus().mul(y),m.a.oneMinus().mul(T).oneMinus())}),Dm=Ln(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),Um=(e,t)=>e.sub(t).div(e.add(t)).pow2(),Im=dn(({outsideIOR:e,eta2:t,cosTheta1:r,thinFilmThickness:s,baseF0:i})=>{const n=ou(e,t,cu(0,.03,s)),a=e.div(n).pow2().mul(r.pow2().oneMinus()).oneMinus();pn(a.lessThan(0),()=>Sn(1));const o=a.sqrt(),u=Um(n,e),l=Vg({f0:u,f90:1,dotVH:r}),d=l.oneMinus(),c=n.lessThan(e).select(Math.PI,0),h=fn(Math.PI).sub(c),p=(e=>{const t=e.sqrt();return Sn(1).add(t).div(Sn(1).sub(t))})(i.clamp(0,.9999)),g=Um(p,n.toVec3()),m=Vg({f0:g,f90:1,dotVH:o}),f=Sn(p.x.lessThan(n).select(Math.PI,0),p.y.lessThan(n).select(Math.PI,0),p.z.lessThan(n).select(Math.PI,0)),y=n.mul(s,o,2),b=Sn(h).add(f),x=l.mul(m).clamp(1e-5,.9999),T=x.sqrt(),_=d.pow2().mul(m).div(Sn(1).sub(x)),v=l.add(_).toVar(),N=_.sub(d).toVar();return Ep({start:1,end:2,condition:"<=",name:"m"},({m:e})=>{N.mulAssign(T);const t=((e,t)=>{const r=e.mul(2*Math.PI*1e-9),s=Sn(54856e-17,44201e-17,52481e-17),i=Sn(1681e3,1795300,2208400),n=Sn(43278e5,93046e5,66121e5),a=fn(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(r.mul(2239900).add(t.x).cos()).mul(r.pow2().mul(-45282e5).exp());let o=s.mul(n.mul(2*Math.PI).sqrt()).mul(i.mul(r).add(t).cos()).mul(r.pow2().negate().mul(n).exp());return o=Sn(o.x.add(a),o.y,o.z).div(1.0685e-7),Dm.mul(o)})(fn(e).mul(y),fn(e).mul(b)).mul(2);v.addAssign(N.mul(t))}),v.max(Sn(0))}).setLayout({name:"evalIridescence",type:"vec3",inputs:[{name:"outsideIOR",type:"float"},{name:"eta2",type:"float"},{name:"cosTheta1",type:"float"},{name:"thinFilmThickness",type:"float"},{name:"baseF0",type:"vec3"}]}),Om=dn(({normal:e,viewDir:t,roughness:r})=>{const s=e.dot(t).saturate(),i=r.mul(r),n=r.add(.1).reciprocal(),a=fn(-1.9362).add(r.mul(1.0678)).add(i.mul(.4573)).sub(n.mul(.8469)),o=fn(-.6014).add(r.mul(.5538)).sub(i.mul(.467)).sub(n.mul(.1255));return a.mul(s).add(o).exp().saturate()}),Vm=Sn(.04),km=fn(1);class Gm extends Dg{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=r,this.anisotropy=s,this.transmission=i,this.dispersion=n,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null,this.iridescenceF0Dielectric=null,this.iridescenceF0Metallic=null}start(e){if(!0===this.clearcoat&&(this.clearcoatRadiance=Sn().toVar("clearcoatRadiance"),this.clearcoatSpecularDirect=Sn().toVar("clearcoatSpecularDirect"),this.clearcoatSpecularIndirect=Sn().toVar("clearcoatSpecularIndirect")),!0===this.sheen&&(this.sheenSpecularDirect=Sn().toVar("sheenSpecularDirect"),this.sheenSpecularIndirect=Sn().toVar("sheenSpecularIndirect")),!0===this.iridescence){const e=cc.dot(tc).clamp(),t=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:ra}),r=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:kn.rgb});this.iridescenceFresnel=ou(t,r,Wn),this.iridescenceF0Dielectric=om({f:t,f90:1,dotVH:e}),this.iridescenceF0Metallic=om({f:r,f90:1,dotVH:e}),this.iridescenceF0=ou(this.iridescenceF0Dielectric,this.iridescenceF0Metallic,Wn)}if(!0===this.transmission){const t=Zd,r=Rd.sub(Zd).normalize(),s=hc,i=e.context;i.backdrop=Pm(s,r,zn,Gn,sa,ia,t,Id,vd,Td,da,ha,ga,pa,this.dispersion?ma:null),i.backdropAlpha=ca,kn.a.mulAssign(ou(1,i.backdrop.a,ca))}super.start(e)}computeMultiscattering(e,t,r,s,i=null){const n=cc.dot(tc).clamp(),a=im({roughness:zn,dotNV:n}),o=i?Kn.mix(s,i):s,u=o.mul(a.x).add(r.mul(a.y)),l=a.x.add(a.y).oneMinus(),d=o.add(o.oneMinus().mul(.047619)),c=u.mul(d).div(l.mul(d).oneMinus());e.addAssign(u),t.addAssign(c.mul(l))}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t).toVar();if(!0===this.sheen){this.sheenSpecularDirect.addAssign(s.mul(dm({lightDirection:e})));const t=Om({normal:cc,viewDir:tc,roughness:Xn}),r=Om({normal:cc,viewDir:e,roughness:Xn}),i=jn.r.max(jn.g).max(jn.b).mul(t.max(r)).oneMinus();s.mulAssign(i)}if(!0===this.clearcoat){const r=pc.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(r.mul(tm({lightDirection:e,f0:Vm,f90:km,roughness:qn,normalView:pc})))}r.directDiffuse.addAssign(s.mul(kg({diffuseColor:Gn}))),r.directSpecular.addAssign(s.mul(nm({lightDirection:e,f0:sa,f90:1,roughness:zn,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s,reflectedLight:i,ltc_1:n,ltc_2:a}){const o=t.add(r).sub(s),u=t.sub(r).sub(s),l=t.sub(r).add(s),d=t.add(r).add(s),c=cc,h=tc,p=ec.toVar(),g=cm({N:c,V:h,roughness:zn}),m=n.sample(g).toVar(),f=a.sample(g).toVar(),y=Ln(Sn(m.x,0,m.y),Sn(0,1,0),Sn(m.z,0,m.w)).toVar(),b=sa.mul(f.x).add(ia.sub(sa).mul(f.y)).toVar();if(i.directSpecular.addAssign(e.mul(b).mul(gm({N:c,V:h,P:p,mInv:y,p0:o,p1:u,p2:l,p3:d}))),i.directDiffuse.addAssign(e.mul(Gn).mul(gm({N:c,V:h,P:p,mInv:Ln(1,0,0,0,1,0,0,0,1),p0:o,p1:u,p2:l,p3:d}))),!0===this.clearcoat){const t=pc,r=cm({N:t,V:h,roughness:qn}),s=n.sample(r),i=a.sample(r),c=Ln(Sn(s.x,0,s.y),Sn(0,1,0),Sn(s.z,0,s.w)),g=Vm.mul(i.x).add(km.sub(Vm).mul(i.y));this.clearcoatSpecularDirect.addAssign(e.mul(g).mul(gm({N:t,V:h,P:p,mInv:c,p0:o,p1:u,p2:l,p3:d})))}}indirect(e){this.indirectDiffuse(e),this.indirectSpecular(e),this.ambientOcclusion(e)}indirectDiffuse(e){const{irradiance:t,reflectedLight:r}=e.context,s=t.mul(kg({diffuseColor:Gn})).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();s.mulAssign(t)}r.indirectDiffuse.addAssign(s)}indirectSpecular(e){const{radiance:t,iblIrradiance:r,reflectedLight:s}=e.context;if(!0===this.sheen&&this.sheenSpecularIndirect.addAssign(r.mul(jn,Om({normal:cc,viewDir:tc,roughness:Xn}))),!0===this.clearcoat){const e=pc.dot(tc).clamp(),t=am({dotNV:e,specularColor:Vm,specularF90:km,roughness:qn});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(t))}const i=Sn().toVar("singleScatteringDielectric"),n=Sn().toVar("multiScatteringDielectric"),a=Sn().toVar("singleScatteringMetallic"),o=Sn().toVar("multiScatteringMetallic");this.computeMultiscattering(i,n,ia,ra,this.iridescenceF0Dielectric),this.computeMultiscattering(a,o,ia,kn.rgb,this.iridescenceF0Metallic);const u=ou(i,a,Wn),l=ou(n,o,Wn),d=i.add(n),c=Gn.mul(d.oneMinus()),h=r.mul(1/Math.PI),p=t.mul(u).add(l.mul(h)).toVar(),g=c.mul(h).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();p.mulAssign(t),g.mulAssign(t)}s.indirectSpecular.addAssign(p),s.indirectDiffuse.addAssign(g)}ambientOcclusion(e){const{ambientOcclusion:t,reflectedLight:r}=e.context,s=cc.dot(tc).clamp().add(t),i=zn.mul(-16).oneMinus().negate().exp2(),n=t.sub(s.pow(i).oneMinus()).clamp();!0===this.clearcoat&&this.clearcoatSpecularIndirect.mulAssign(t),!0===this.sheen&&this.sheenSpecularIndirect.mulAssign(t),r.indirectDiffuse.mulAssign(t),r.indirectSpecular.mulAssign(n)}finish({context:e}){const{outgoingLight:t}=e;if(!0===this.clearcoat){const e=pc.dot(tc).clamp(),r=Vg({dotVH:e,f0:Vm,f90:km}),s=t.mul(Hn.mul(r).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(Hn));t.assign(s)}if(!0===this.sheen){const e=t.add(this.sheenSpecularDirect,this.sheenSpecularIndirect.mul(1/Math.PI));t.assign(e)}}}const $m=fn(1),zm=fn(-2),Wm=fn(.8),Hm=fn(-1),qm=fn(.4),jm=fn(2),Xm=fn(.305),Km=fn(3),Qm=fn(.21),Ym=fn(4),Zm=fn(4),Jm=fn(16),ef=dn(([e])=>{const t=Sn(Fo(e)).toVar(),r=fn(-1).toVar();return pn(t.x.greaterThan(t.z),()=>{pn(t.x.greaterThan(t.y),()=>{r.assign(Tu(e.x.greaterThan(0),0,3))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}).Else(()=>{pn(t.z.greaterThan(t.y),()=>{r.assign(Tu(e.z.greaterThan(0),2,5))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}),r}).setLayout({name:"getFace",type:"float",inputs:[{name:"direction",type:"vec3"}]}),tf=dn(([e,t])=>{const r=Tn().toVar();return pn(t.equal(0),()=>{r.assign(Tn(e.z,e.y).div(Fo(e.x)))}).ElseIf(t.equal(1),()=>{r.assign(Tn(e.x.negate(),e.z.negate()).div(Fo(e.y)))}).ElseIf(t.equal(2),()=>{r.assign(Tn(e.x.negate(),e.y).div(Fo(e.z)))}).ElseIf(t.equal(3),()=>{r.assign(Tn(e.z.negate(),e.y).div(Fo(e.x)))}).ElseIf(t.equal(4),()=>{r.assign(Tn(e.x.negate(),e.z).div(Fo(e.y)))}).Else(()=>{r.assign(Tn(e.x,e.y).div(Fo(e.z)))}),Pa(.5,r.add(1))}).setLayout({name:"getUV",type:"vec2",inputs:[{name:"direction",type:"vec3"},{name:"face",type:"float"}]}),rf=dn(([e])=>{const t=fn(0).toVar();return pn(e.greaterThanEqual(Wm),()=>{t.assign($m.sub(e).mul(Hm.sub(zm)).div($m.sub(Wm)).add(zm))}).ElseIf(e.greaterThanEqual(qm),()=>{t.assign(Wm.sub(e).mul(jm.sub(Hm)).div(Wm.sub(qm)).add(Hm))}).ElseIf(e.greaterThanEqual(Xm),()=>{t.assign(qm.sub(e).mul(Km.sub(jm)).div(qm.sub(Xm)).add(jm))}).ElseIf(e.greaterThanEqual(Qm),()=>{t.assign(Xm.sub(e).mul(Ym.sub(Km)).div(Xm.sub(Qm)).add(Km))}).Else(()=>{t.assign(fn(-2).mul(xo(Pa(1.16,e))))}),t}).setLayout({name:"roughnessToMip",type:"float",inputs:[{name:"roughness",type:"float"}]}),sf=dn(([e,t])=>{const r=e.toVar();r.assign(Pa(2,r).sub(1));const s=Sn(r,1).toVar();return pn(t.equal(0),()=>{s.assign(s.zyx)}).ElseIf(t.equal(1),()=>{s.assign(s.xzy),s.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{s.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{s.assign(s.zyx),s.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{s.assign(s.xzy),s.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{s.z.mulAssign(-1)}),s}).setLayout({name:"getDirection",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"face",type:"float"}]}),nf=dn(([e,t,r,s,i,n])=>{const a=fn(r),o=Sn(t),u=uu(rf(a),zm,n),l=Ro(u),d=vo(u),c=Sn(af(e,o,d,s,i,n)).toVar();return pn(l.notEqual(0),()=>{const t=Sn(af(e,o,d.add(1),s,i,n)).toVar();c.assign(ou(c,t,l))}),c}),af=dn(([e,t,r,s,i,n])=>{const a=fn(r).toVar(),o=Sn(t),u=fn(ef(o)).toVar(),l=fn(jo(Zm.sub(a),0)).toVar();a.assign(jo(a,Zm));const d=fn(yo(a)).toVar(),c=Tn(tf(o,u).mul(d.sub(2)).add(1)).toVar();return pn(u.greaterThan(2),()=>{c.y.addAssign(d),u.subAssign(3)}),c.x.addAssign(u.mul(d)),c.x.addAssign(l.mul(Pa(3,Jm))),c.y.addAssign(Pa(4,yo(n).sub(d))),c.x.mulAssign(s),c.y.mulAssign(i),e.sample(c).grad(Tn(),Tn())}),of=dn(({envMap:e,mipInt:t,outputDirection:r,theta:s,axis:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Ao(s),l=r.mul(u).add(i.cross(r).mul(Eo(s))).add(i.mul(i.dot(r).mul(u.oneMinus())));return af(e,l,t,n,a,o)}),uf=dn(({n:e,latitudinal:t,poleAxis:r,outputDirection:s,weights:i,samples:n,dTheta:a,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})=>{const h=Sn(Tu(t,r,Jo(r,s))).toVar();pn(h.equal(Sn(0)),()=>{h.assign(Sn(s.z,0,s.x.negate()))}),h.assign(So(h));const p=Sn().toVar();return p.addAssign(i.element(0).mul(of({theta:0,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),Ep({start:yn(1),end:e},({i:e})=>{pn(e.greaterThanEqual(n),()=>{Ap()});const t=fn(a.mul(fn(e))).toVar();p.addAssign(i.element(e).mul(of({theta:t.mul(-1),axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),p.addAssign(i.element(e).mul(of({theta:t,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})))}),wn(p,1)}),lf=dn(([e])=>{const t=bn(e).toVar();return t.assign(t.shiftLeft(bn(16)).bitOr(t.shiftRight(bn(16)))),t.assign(t.bitAnd(bn(1431655765)).shiftLeft(bn(1)).bitOr(t.bitAnd(bn(2863311530)).shiftRight(bn(1)))),t.assign(t.bitAnd(bn(858993459)).shiftLeft(bn(2)).bitOr(t.bitAnd(bn(3435973836)).shiftRight(bn(2)))),t.assign(t.bitAnd(bn(252645135)).shiftLeft(bn(4)).bitOr(t.bitAnd(bn(4042322160)).shiftRight(bn(4)))),t.assign(t.bitAnd(bn(16711935)).shiftLeft(bn(8)).bitOr(t.bitAnd(bn(4278255360)).shiftRight(bn(8)))),fn(t).mul(2.3283064365386963e-10)}),df=dn(([e,t])=>Tn(fn(e).div(fn(t)),lf(e))),cf=dn(([e,t,r])=>{const s=r.mul(r).toConst(),i=Sn(1,0,0).toConst(),n=Jo(t,i).toConst(),a=To(e.x).toConst(),o=Pa(2,3.14159265359).mul(e.y).toConst(),u=a.mul(Ao(o)).toConst(),l=a.mul(Eo(o)).toVar(),d=Pa(.5,t.z.add(1)).toConst();l.assign(d.oneMinus().mul(To(u.mul(u).oneMinus())).add(d.mul(l)));const c=i.mul(u).add(n.mul(l)).add(t.mul(To(jo(0,u.mul(u).add(l.mul(l)).oneMinus()))));return So(Sn(s.mul(c.x),s.mul(c.y),jo(0,c.z)))}),hf=dn(({roughness:e,mipInt:t,envMap:r,N_immutable:s,GGX_SAMPLES:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Sn(s).toVar(),l=Sn(0).toVar(),d=fn(0).toVar();return pn(e.lessThan(.001),()=>{l.assign(af(r,u,t,n,a,o))}).Else(()=>{const s=Tu(Fo(u.z).lessThan(.999),Sn(0,0,1),Sn(1,0,0)),c=So(Jo(s,u)).toVar(),h=Jo(u,c).toVar();Ep({start:bn(0),end:i},({i:s})=>{const p=df(s,i),g=cf(p,Sn(0,0,1),e),m=So(c.mul(g.x).add(h.mul(g.y)).add(u.mul(g.z))),f=So(m.mul(Zo(u,m).mul(2)).sub(u)),y=jo(Zo(u,f),0);pn(y.greaterThan(0),()=>{const e=af(r,f,t,n,a,o);l.addAssign(e.mul(y)),d.addAssign(y)})}),pn(d.greaterThan(0),()=>{l.assign(l.div(d))})}),wn(l,1)}),pf=[.125,.215,.35,.446,.526,.582],gf=20,mf=new Se(-1,1,1,-1,0,1),ff=new Re(90,1),yf=new e;let bf=null,xf=0,Tf=0;const _f=new r,vf=new WeakMap,Nf=[3,1,5,0,4,2],Sf=sf(Al(),El("faceIndex")).normalize(),Rf=Sn(Sf.x,Sf.y,Sf.z);class Ef{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._ggxMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,r=.1,s=100,i={}){const{size:n=256,position:a=_f,renderTarget:o=null}=i;if(this._setSize(n),!1===this._hasInitialized){d('PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.');const n=o||this._allocateTarget();return i.renderTarget=n,this.fromSceneAsync(e,t,r,s,i),n}bf=this._renderer.getRenderTarget(),xf=this._renderer.getActiveCubeFace(),Tf=this._renderer.getActiveMipmapLevel();const u=o||this._allocateTarget();return u.depthBuffer=!0,this._init(u),this._sceneToCubeUV(e,r,s,u,a),t>0&&this._blur(u,0,0,t),this._applyPMREM(u),this._cleanup(u),u}async fromSceneAsync(e,t=0,r=.1,s=100,i={}){return v('PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this.fromScene(e,t,r,s,i)}fromEquirectangular(e,t=null){if(!1===this._hasInitialized){d('PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.'),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromEquirectangularAsync(e,r),r}return this._fromTexture(e,t)}async fromEquirectangularAsync(e,t=null){return v('PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}fromCubemap(e,t=null){if(!1===this._hasInitialized){d("PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead."),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromCubemapAsync(e,t),r}return this._fromTexture(e,t)}async fromCubemapAsync(e,t=null){return v('PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}async compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Bf(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===I||e.mapping===O?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=pf[a-e+4-1]:0===a&&(o=0),r.push(o);const u=1/(n-2),l=-u,d=1+u,c=[l,l,d,l,d,d,l,l,d,d,l,d],h=6,p=6,g=3,m=2,f=1,y=new Float32Array(g*p*h),b=new Float32Array(m*p*h),x=new Float32Array(f*p*h);for(let e=0;e2?0:-1,s=[t,r,0,t+2/3,r,0,t+2/3,r+1,0,t,r,0,t+2/3,r+1,0,t,r+1,0],i=Nf[e];y.set(s,g*p*i),b.set(c,m*p*i);const n=[i,i,i,i,i,i];x.set(n,f*p*i)}const T=new Ne;T.setAttribute("position",new Ce(y,g)),T.setAttribute("uv",new Ce(b,m)),T.setAttribute("faceIndex",new Ce(x,f)),s.push(new ue(T,null)),i>4&&i--}return{lodMeshes:s,sizeLods:t,sigmas:r}}(t)),this._blurMaterial=function(e,t,s){const i=$l(new Array(gf).fill(0)),n=Na(new r(0,1,0)),a=Na(0),o=fn(gf),u=Na(0),l=Na(1),d=Ul(),c=Na(0),h=fn(1/t),p=fn(1/s),g=fn(e),m={n:o,latitudinal:u,weights:i,poleAxis:n,outputDirection:Rf,dTheta:a,samples:l,envMap:d,mipInt:c,CUBEUV_TEXEL_WIDTH:h,CUBEUV_TEXEL_HEIGHT:p,CUBEUV_MAX_MIP:g},f=Cf("blur");return f.fragmentNode=uf({...m,latitudinal:u.equal(1)}),vf.set(f,m),f}(t,e.width,e.height),this._ggxMaterial=function(e,t,r){const s=Ul(),i=Na(0),n=Na(0),a=fn(1/t),o=fn(1/r),u=fn(e),l={envMap:s,roughness:i,mipInt:n,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:u},d=Cf("ggx");return d.fragmentNode=hf({...l,N_immutable:Rf,GGX_SAMPLES:bn(512)}),vf.set(d,l),d}(t,e.width,e.height)}}async _compileMaterial(e){const t=new ue(new Ne,e);await this._renderer.compile(t,mf)}_sceneToCubeUV(e,t,r,s,i){const n=ff;n.near=t,n.far=r;const a=[1,1,1,1,-1,1],o=[1,-1,1,-1,1,-1],u=this._renderer,l=u.autoClear;u.getClearColor(yf),u.autoClear=!1,null===this._backgroundBox&&(this._backgroundBox=new ue(new oe,new ye({name:"PMREM.Background",side:L,depthWrite:!1,depthTest:!1})));const d=this._backgroundBox,c=d.material;let h=!1;const p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,h=!0):(c.color.copy(yf),h=!0),u.setRenderTarget(s),u.clear(),h&&u.render(d,n);for(let t=0;t<6;t++){const r=t%3;0===r?(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x+o[t],i.y,i.z)):1===r?(n.up.set(0,0,a[t]),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y+o[t],i.z)):(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y,i.z+o[t]));const l=this._cubeSize;wf(s,r*l,t>2?l:0,l,l),u.render(e,n)}u.autoClear=l,e.background=p}_textureToCubeUV(e,t){const r=this._renderer,s=e.mapping===I||e.mapping===O;s?null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(e)):null===this._equirectMaterial&&(this._equirectMaterial=Bf(e));const i=s?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;const n=this._lodMeshes[0];n.material=i;const a=this._cubeSize;wf(t,0,0,3*a,2*a),r.setRenderTarget(t),r.render(n,mf)}_applyPMREM(e){const t=this._renderer,r=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let t=1;tc-4?r-c+4:0),g=4*(this._cubeSize-h);e.texture.frame=(e.texture.frame||0)+1,o.envMap.value=e.texture,o.roughness.value=d,o.mipInt.value=c-t,wf(i,p,g,3*h,2*h),s.setRenderTarget(i),s.render(a,mf),i.texture.frame=(i.texture.frame||0)+1,o.envMap.value=i.texture,o.roughness.value=0,o.mipInt.value=c-r,wf(e,p,g,3*h,2*h),s.setRenderTarget(e),s.render(a,mf)}_blur(e,t,r,s,i){const n=this._pingPongRenderTarget;this._halfBlur(e,n,t,r,s,"latitudinal",i),this._halfBlur(n,e,r,r,s,"longitudinal",i)}_halfBlur(e,t,r,s,i,n,a){const u=this._renderer,l=this._blurMaterial;"latitudinal"!==n&&"longitudinal"!==n&&o("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[s];c.material=l;const h=vf.get(l),p=this._sizeLods[r]-1,g=isFinite(i)?Math.PI/(2*p):2*Math.PI/39,m=i/g,f=isFinite(i)?1+Math.floor(3*m):gf;f>gf&&d(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const y=[];let b=0;for(let e=0;ex-4?s-x+4:0),4*(this._cubeSize-T),3*T,2*T),u.setRenderTarget(t),u.render(c,mf)}}function Af(e,t){const r=new ae(e,t,{magFilter:de,minFilter:de,generateMipmaps:!1,type:_e,format:Ae,colorSpace:Ee});return r.texture.mapping=we,r.texture.name="PMREM.cubeUv",r.texture.isPMREMTexture=!0,r.scissorTest=!0,r}function wf(e,t,r,s,i){e.viewport.set(t,r,s,i),e.scissor.set(t,r,s,i)}function Cf(e){const t=new yg;return t.depthTest=!1,t.depthWrite=!1,t.blending=se,t.name=`PMREM_${e}`,t}function Mf(e){const t=Cf("cubemap");return t.fragmentNode=Bc(e,Rf),t}function Bf(e){const t=Cf("equirect");return t.fragmentNode=Ul(e,Eg(Rf),0),t}const Ff=new WeakMap;function Lf(e,t,r){const s=function(e){let t=Ff.get(e);void 0===t&&(t=new WeakMap,Ff.set(e,t));return t}(t);let i=s.get(e);if((void 0!==i?i.pmremVersion:-1)!==e.pmremVersion){const t=e.image;if(e.isCubeTexture){if(!function(e){if(null==e)return!1;let t=0;const r=6;for(let s=0;s0}(t))return null;i=r.fromEquirectangular(e,i)}i.pmremVersion=e.pmremVersion,s.set(e,i)}return i.texture}class Pf extends pi{static get type(){return"PMREMNode"}constructor(e,t=null,r=null){super("vec3"),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=r,this._generator=null;const s=new N;s.isRenderTargetTexture=!0,this._texture=Ul(s),this._width=Na(0),this._height=Na(0),this._maxMip=Na(0),this.updateBeforeType=ti.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){const t=function(e){const t=Math.log2(e)-2,r=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:r,maxMip:t}}(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem;const r=t?t.pmremVersion:-1,s=this._value;r!==s.pmremVersion&&(t=!0===s.isPMREMTexture?s:Lf(s,e.renderer,this._generator),null!==t&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){null===this._generator&&(this._generator=new Ef(e.renderer)),this.updateBefore(e);let t=this.uvNode;null===t&&e.context.getUV&&(t=e.context.getUV(this,e)),t=Nc.mul(Sn(t.x,t.y.negate(),t.z));let r=this.levelNode;return null===r&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),nf(this._texture,t,r,this._width,this._height,this._maxMip)}dispose(){super.dispose(),null!==this._generator&&this._generator.dispose()}}const Df=nn(Pf).setParameterLength(1,3),Uf=new WeakMap;class If extends Lp{static get type(){return"EnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){const{material:t}=e;let r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){const s=r.isTextureNode?r.value:t[r.property],i=this._getPMREMNodeCache(e.renderer);let n=i.get(s);void 0===n&&(n=Df(s),i.set(s,n)),r=n}const s=!0===t.useAnisotropy||t.anisotropy>0?lh:cc,i=r.context(Of(zn,s)).mul(vc),n=r.context(Vf(hc)).mul(Math.PI).mul(vc),a=ul(i),o=ul(n);e.context.radiance.addAssign(a),e.context.iblIrradiance.addAssign(o);const u=e.context.lightingModel.clearcoatRadiance;if(u){const e=r.context(Of(qn,pc)).mul(vc),t=ul(e);u.addAssign(t)}}_getPMREMNodeCache(e){let t=Uf.get(e);return void 0===t&&(t=new WeakMap,Uf.set(e,t)),t}}const Of=(e,t)=>{let r=null;return{getUV:()=>(null===r&&(r=tc.negate().reflect(t),r=su(e).mix(r,t).normalize(),r=r.transformDirection(vd)),r),getTextureLevel:()=>e}},Vf=e=>({getUV:()=>e,getTextureLevel:()=>fn(1)}),kf=new Me;class Gf extends yg{static get type(){return"MeshStandardNodeMaterial"}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(kf),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return null===t&&e.environmentNode&&(t=e.environmentNode),t?new If(t):null}setupLightingModel(){return new Gm}setupSpecular(){const e=ou(Sn(.04),kn.rgb,Wn);ra.assign(Sn(.04)),sa.assign(e),ia.assign(1)}setupVariants(){const e=this.metalnessNode?fn(this.metalnessNode):Bh;Wn.assign(e);let t=this.roughnessNode?fn(this.roughnessNode):Mh;t=Kg({roughness:t}),zn.assign(t),this.setupSpecular(),Gn.assign(kn.rgb.mul(e.oneMinus()))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}}const $f=new Be;class zf extends Gf{static get type(){return"MeshPhysicalNodeMaterial"}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues($f),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||null!==this.clearcoatNode}get useIridescence(){return this.iridescence>0||null!==this.iridescenceNode}get useSheen(){return this.sheen>0||null!==this.sheenNode}get useAnisotropy(){return this.anisotropy>0||null!==this.anisotropyNode}get useTransmission(){return this.transmission>0||null!==this.transmissionNode}get useDispersion(){return this.dispersion>0||null!==this.dispersionNode}setupSpecular(){const e=this.iorNode?fn(this.iorNode):Hh;da.assign(e),ra.assign(qo(tu(da.sub(1).div(da.add(1))).mul(Ah),Sn(1)).mul(Eh)),sa.assign(ou(ra,kn.rgb,Wn)),ia.assign(ou(Eh,1,Wn))}setupLightingModel(){return new Gm(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){const e=this.clearcoatNode?fn(this.clearcoatNode):Lh,t=this.clearcoatRoughnessNode?fn(this.clearcoatRoughnessNode):Ph;Hn.assign(e),qn.assign(Kg({roughness:t}))}if(this.useSheen){const e=this.sheenNode?Sn(this.sheenNode):Ih,t=this.sheenRoughnessNode?fn(this.sheenRoughnessNode):Oh;jn.assign(e),Xn.assign(t)}if(this.useIridescence){const e=this.iridescenceNode?fn(this.iridescenceNode):kh,t=this.iridescenceIORNode?fn(this.iridescenceIORNode):Gh,r=this.iridescenceThicknessNode?fn(this.iridescenceThicknessNode):$h;Kn.assign(e),Qn.assign(t),Yn.assign(r)}if(this.useAnisotropy){const e=(this.anisotropyNode?Tn(this.anisotropyNode):Vh).toVar();Jn.assign(e.length()),pn(Jn.equal(0),()=>{e.assign(Tn(1,0))}).Else(()=>{e.divAssign(Tn(Jn)),Jn.assign(Jn.saturate())}),Zn.assign(Jn.pow2().mix(zn.pow2(),1)),ea.assign(oh[0].mul(e.x).add(oh[1].mul(e.y))),ta.assign(oh[1].mul(e.x).sub(oh[0].mul(e.y)))}if(this.useTransmission){const e=this.transmissionNode?fn(this.transmissionNode):zh,t=this.thicknessNode?fn(this.thicknessNode):Wh,r=this.attenuationDistanceNode?fn(this.attenuationDistanceNode):qh,s=this.attenuationColorNode?Sn(this.attenuationColorNode):jh;if(ca.assign(e),ha.assign(t),pa.assign(r),ga.assign(s),this.useDispersion){const e=this.dispersionNode?fn(this.dispersionNode):ep;ma.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?Sn(this.clearcoatNormalNode):Dh}setup(e){e.context.setupClearcoatNormal=()=>Pu(this.setupClearcoatNormal(e),"NORMAL","vec3"),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.iorNode=e.iorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}}class Wf extends Gm{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1,a=!1){super(e,t,r,s,i,n),this.useSSS=a}direct({lightDirection:e,lightColor:t,reflectedLight:r},s){if(!0===this.useSSS){const i=s.material,{thicknessColorNode:n,thicknessDistortionNode:a,thicknessAmbientNode:o,thicknessAttenuationNode:u,thicknessPowerNode:l,thicknessScaleNode:d}=i,c=e.add(cc.mul(a)).normalize(),h=fn(tc.dot(c.negate()).saturate().pow(l).mul(d)),p=Sn(h.add(o).mul(n));r.directDiffuse.addAssign(p.mul(u.mul(t)))}super.direct({lightDirection:e,lightColor:t,reflectedLight:r},s)}}class Hf extends zf{static get type(){return"MeshSSSNodeMaterial"}constructor(e){super(e),this.thicknessColorNode=null,this.thicknessDistortionNode=fn(.1),this.thicknessAmbientNode=fn(0),this.thicknessAttenuationNode=fn(.1),this.thicknessPowerNode=fn(2),this.thicknessScaleNode=fn(10)}get useSSS(){return null!==this.thicknessColorNode}setupLightingModel(){return new Wf(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion,this.useSSS)}copy(e){return this.thicknessColorNode=e.thicknessColorNode,this.thicknessDistortionNode=e.thicknessDistortionNode,this.thicknessAmbientNode=e.thicknessAmbientNode,this.thicknessAttenuationNode=e.thicknessAttenuationNode,this.thicknessPowerNode=e.thicknessPowerNode,this.thicknessScaleNode=e.thicknessScaleNode,super.copy(e)}}const qf=dn(({normal:e,lightDirection:t,builder:r})=>{const s=e.dot(t),i=Tn(s.mul(.5).add(.5),0);if(r.material.gradientMap){const e=Ic("gradientMap","texture").context({getUV:()=>i});return Sn(e.r)}{const e=i.fwidth().mul(.5);return ou(Sn(.7),Sn(1),cu(fn(.7).sub(e.x),fn(.7).add(e.x),i.x))}});class jf extends Dg{direct({lightDirection:e,lightColor:t,reflectedLight:r},s){const i=qf({normal:ac,lightDirection:e,builder:s}).mul(t);r.directDiffuse.addAssign(i.mul(kg({diffuseColor:kn.rgb})))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Xf=new Fe;class Kf extends yg{static get type(){return"MeshToonNodeMaterial"}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Xf),this.setValues(e)}setupLightingModel(){return new jf}}const Qf=dn(()=>{const e=Sn(tc.z,0,tc.x.negate()).normalize(),t=tc.cross(e);return Tn(e.dot(cc),t.dot(cc)).mul(.495).add(.5)}).once(["NORMAL","VERTEX"])().toVar("matcapUV"),Yf=new Le;class Zf extends yg{static get type(){return"MeshMatcapNodeMaterial"}constructor(e){super(),this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(Yf),this.setValues(e)}setupVariants(e){const t=Qf;let r;r=e.material.matcap?Ic("matcap","texture").context({getUV:()=>t}):Sn(ou(.2,.8,t.y)),kn.rgb.mulAssign(r.rgb)}}class Jf extends pi{static get type(){return"RotateNode"}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){const{rotationNode:t,positionNode:r}=this;if("vec2"===this.getNodeType(e)){const e=t.cos(),s=t.sin();return Fn(e,s,s.negate(),e).mul(r)}{const e=t,s=Pn(wn(1,0,0,0),wn(0,Ao(e.x),Eo(e.x).negate(),0),wn(0,Eo(e.x),Ao(e.x),0),wn(0,0,0,1)),i=Pn(wn(Ao(e.y),0,Eo(e.y),0),wn(0,1,0,0),wn(Eo(e.y).negate(),0,Ao(e.y),0),wn(0,0,0,1)),n=Pn(wn(Ao(e.z),Eo(e.z).negate(),0,0),wn(Eo(e.z),Ao(e.z),0,0),wn(0,0,1,0),wn(0,0,0,1));return s.mul(i).mul(n).mul(wn(r,1)).xyz}}}const ey=nn(Jf).setParameterLength(2),ty=new Pe;class ry extends yg{static get type(){return"SpriteNodeMaterial"}constructor(e){super(),this.isSpriteNodeMaterial=!0,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.transparent=!0,this.setDefaultValues(ty),this.setValues(e)}setupPositionView(e){const{object:t,camera:r}=e,{positionNode:s,rotationNode:i,scaleNode:n,sizeAttenuation:a}=this,o=Wd.mul(Sn(s||0));let u=Tn(Id[0].xyz.length(),Id[1].xyz.length());null!==n&&(u=u.mul(Tn(n))),r.isPerspectiveCamera&&!1===a&&(u=u.mul(o.z.negate()));let l=Kd.xy;if(t.center&&!0===t.center.isVector2){const e=((e,t,r)=>new Hu(e,t,r))("center","vec2",t);l=l.sub(e.sub(.5))}l=l.mul(u);const d=fn(i||Uh),c=ey(l,d);return wn(o.xy.add(c),o.zw)}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}}const sy=new De,iy=new t;class ny extends ry{static get type(){return"PointsNodeMaterial"}constructor(e){super(),this.sizeNode=null,this.isPointsNodeMaterial=!0,this.setDefaultValues(sy),this.setValues(e)}setupPositionView(){const{positionNode:e}=this;return Wd.mul(Sn(e||Qd)).xyz}setupVertexSprite(e){const{material:t,camera:r}=e,{rotationNode:s,scaleNode:i,sizeNode:n,sizeAttenuation:a}=this;let o=super.setupVertex(e);if(!0!==t.isNodeMaterial)return o;let u=null!==n?Tn(n):Jh;u=u.mul(Xl),r.isPerspectiveCamera&&!0===a&&(u=u.mul(ay.div(ec.z.negate()))),i&&i.isNode&&(u=u.mul(Tn(i)));let l=Kd.xy;if(s&&s.isNode){const e=fn(s);l=ey(l,e)}return l=l.mul(u),l=l.div(Jl.div(2)),l=l.mul(o.w),o=o.add(wn(l,0,0)),o}setupVertex(e){return e.object.isPoints?super.setupVertex(e):this.setupVertexSprite(e)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const ay=Na(1).onFrameUpdate(function({renderer:e}){const t=e.getSize(iy);this.value=.5*t.y});class oy extends Dg{constructor(){super(),this.shadowNode=fn(1).toVar("shadowMask")}direct({lightNode:e}){null!==e.shadowNode&&this.shadowNode.mulAssign(e.shadowNode)}finish({context:e}){kn.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(kn.rgb)}}const uy=new Ue;class ly extends yg{static get type(){return"ShadowNodeMaterial"}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.transparent=!0,this.setDefaultValues(uy),this.setValues(e)}setupLightingModel(){return new oy}}const dy=On("vec3"),cy=On("vec3"),hy=On("vec3");class py extends Dg{constructor(){super()}start(e){const{material:t}=e,r=On("vec3"),s=On("vec3");pn(Rd.sub(Zd).length().greaterThan(Gd.mul(2)),()=>{r.assign(Rd),s.assign(Zd)}).Else(()=>{r.assign(Zd),s.assign(Rd)});const i=s.sub(r),n=Na("int").onRenderUpdate(({material:e})=>e.steps),a=i.length().div(n).toVar(),o=i.normalize().toVar(),u=fn(0).toVar(),l=Sn(1).toVar();t.offsetNode&&u.addAssign(t.offsetNode.mul(a)),Ep(n,()=>{const s=r.add(o.mul(u)),i=vd.mul(wn(s,1)).xyz;let n;null!==t.depthNode&&(cy.assign(rg(Qp(i.z,bd,xd))),e.context.sceneDepthNode=rg(t.depthNode).toVar()),e.context.positionWorld=s,e.context.shadowPositionWorld=s,e.context.positionView=i,dy.assign(0),t.scatteringNode&&(n=t.scatteringNode({positionRay:s})),super.start(e),n&&dy.mulAssign(n);const d=dy.mul(.01).negate().mul(a).exp();l.mulAssign(d),u.addAssign(a)}),hy.addAssign(l.saturate().oneMinus())}scatteringLight(e,t){const r=t.context.sceneDepthNode;r?pn(r.greaterThanEqual(cy),()=>{dy.addAssign(e)}):dy.addAssign(e)}direct({lightNode:e,lightColor:t},r){if(void 0===e.light.distance)return;const s=t.xyz.toVar();s.mulAssign(e.shadowNode),this.scatteringLight(s,r)}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s},i){const n=t.add(r).sub(s),a=t.sub(r).sub(s),o=t.sub(r).add(s),u=t.add(r).add(s),l=i.context.positionView,d=e.xyz.mul(mm({P:l,p0:n,p1:a,p2:o,p3:u})).pow(1.5);this.scatteringLight(d,i)}finish(e){e.context.outgoingLight.assign(hy)}}class gy extends yg{static get type(){return"VolumeNodeMaterial"}constructor(e){super(),this.isVolumeNodeMaterial=!0,this.steps=25,this.offsetNode=null,this.scatteringNode=null,this.lights=!0,this.transparent=!0,this.side=L,this.depthTest=!1,this.depthWrite=!1,this.setValues(e)}setupLightingModel(){return new py}}class my{constructor(e,t,r){this.renderer=e,this.nodes=t,this.info=r,this._context="undefined"!=typeof self?self:null,this._animationLoop=null,this._requestId=null}start(){const e=(t,r)=>{this._requestId=this._context.requestAnimationFrame(e),!0===this.info.autoReset&&this.info.reset(),this.nodes.nodeFrame.update(),this.info.frame=this.nodes.nodeFrame.frameId,this.renderer._inspector.begin(),null!==this._animationLoop&&this._animationLoop(t,r),this.renderer._inspector.finish()};e()}stop(){this._context.cancelAnimationFrame(this._requestId),this._requestId=null}getAnimationLoop(){return this._animationLoop}setAnimationLoop(e){this._animationLoop=e}getContext(){return this._context}setContext(e){this._context=e}dispose(){this.stop()}}class fy{constructor(){this.weakMaps={}}_getWeakMap(e){const t=e.length;let r=this.weakMaps[t];return void 0===r&&(r=new WeakMap,this.weakMaps[t]=r),r}get(e){let t=this._getWeakMap(e);for(let r=0;r{this.dispose()},this.onGeometryDispose=()=>{this.attributes=null,this.attributesId=null},this.material.addEventListener("dispose",this.onMaterialDispose),this.geometry.addEventListener("dispose",this.onGeometryDispose)}updateClipping(e){this.clippingContext=e}get clippingNeedsUpdate(){return null!==this.clippingContext&&this.clippingContext.cacheKey!==this.clippingContextCacheKey&&(this.clippingContextCacheKey=this.clippingContext.cacheKey,!0)}get hardwareClippingPlanes(){return!0===this.material.hardwareClipping?this.clippingContext.unionClippingCount:0}getNodeBuilderState(){return this._nodeBuilderState||(this._nodeBuilderState=this._nodes.getForRender(this))}getMonitor(){return this._monitor||(this._monitor=this.getNodeBuilderState().observer)}getBindings(){return this._bindings||(this._bindings=this.getNodeBuilderState().createBindings())}getBindingGroup(e){for(const t of this.getBindings())if(t.name===e)return t}getIndex(){return this._geometries.getIndex(this)}getIndirect(){return this._geometries.getIndirect(this)}getIndirectOffset(){return this._geometries.getIndirectOffset(this)}getChainArray(){return[this.object,this.material,this.context,this.lightsNode]}setGeometry(e){this.geometry=e,this.attributes=null,this.attributesId=null}getAttributes(){if(null!==this.attributes)return this.attributes;const e=this.getNodeBuilderState().nodeAttributes,t=this.geometry,r=[],s=new Set,i={};for(const n of e){let e;if(n.node&&n.node.attribute?e=n.node.attribute:(e=t.getAttribute(n.name),i[n.name]=e.id),void 0===e)continue;r.push(e);const a=e.isInterleavedBufferAttribute?e.data:e;s.add(a)}return this.attributes=r,this.attributesId=i,this.vertexBuffers=Array.from(s.values()),r}getVertexBuffers(){return null===this.vertexBuffers&&this.getAttributes(),this.vertexBuffers}getDrawParameters(){const{object:e,material:t,geometry:r,group:s,drawRange:i}=this,n=this.drawParams||(this.drawParams={vertexCount:0,firstVertex:0,instanceCount:0,firstInstance:0}),a=this.getIndex(),o=null!==a;let u=1;if(!0===r.isInstancedBufferGeometry?u=r.instanceCount:void 0!==e.count&&(u=Math.max(0,e.count)),0===u)return null;if(n.instanceCount=u,!0===e.isBatchedMesh)return n;let l=1;!0!==t.wireframe||e.isPoints||e.isLineSegments||e.isLine||e.isLineLoop||(l=2);let d=i.start*l,c=(i.start+i.count)*l;null!==s&&(d=Math.max(d,s.start*l),c=Math.min(c,(s.start+s.count)*l));const h=r.attributes.position;let p=1/0;o?p=a.count:null!=h&&(p=h.count),d=Math.max(d,0),c=Math.min(c,p);const g=c-d;return g<0||g===1/0?null:(n.vertexCount=g,n.firstVertex=d,n)}getGeometryCacheKey(){const{geometry:e}=this;let t="";for(const r of Object.keys(e.attributes).sort()){const s=e.attributes[r];t+=r+",",s.data&&(t+=s.data.stride+","),s.offset&&(t+=s.offset+","),s.itemSize&&(t+=s.itemSize+","),s.normalized&&(t+="n,")}for(const r of Object.keys(e.morphAttributes).sort()){const s=e.morphAttributes[r];t+="morph-"+r+",";for(let e=0,r=s.length;e1||Array.isArray(e.morphTargetInfluences))&&(s+=e.uuid+","),s+=this.context.id+",",s+=e.receiveShadow+",",Os(s)}get needsGeometryUpdate(){if(this.geometry.id!==this.object.geometry.id)return!0;if(null!==this.attributes){const e=this.attributesId;for(const t in e){const r=this.geometry.getAttribute(t);if(void 0===r||e[t]!==r.id)return!0}}return!1}get needsUpdate(){return this.initialNodesCacheKey!==this.getDynamicCacheKey()||this.clippingNeedsUpdate}getDynamicCacheKey(){let e=0;return!0!==this.material.isShadowPassMaterial&&(e=this._nodes.getCacheKey(this.scene,this.lightsNode)),this.camera.isArrayCamera&&(e=ks(e,this.camera.cameras.length)),this.object.receiveShadow&&(e=ks(e,1)),e=ks(e,this.renderer.contextNode.id,this.renderer.contextNode.version),e}getCacheKey(){return this.getMaterialCacheKey()+this.getDynamicCacheKey()}dispose(){this.material.removeEventListener("dispose",this.onMaterialDispose),this.geometry.removeEventListener("dispose",this.onGeometryDispose),this.onDispose()}}const xy=[];class Ty{constructor(e,t,r,s,i,n){this.renderer=e,this.nodes=t,this.geometries=r,this.pipelines=s,this.bindings=i,this.info=n,this.chainMaps={}}get(e,t,r,s,i,n,a,o){const u=this.getChainMap(o);xy[0]=e,xy[1]=t,xy[2]=n,xy[3]=i;let l=u.get(xy);return void 0===l?(l=this.createRenderObject(this.nodes,this.geometries,this.renderer,e,t,r,s,i,n,a,o),u.set(xy,l)):(l.camera=s,l.updateClipping(a),l.needsGeometryUpdate&&l.setGeometry(e.geometry),(l.version!==t.version||l.needsUpdate)&&(l.initialCacheKey!==l.getCacheKey()?(l.dispose(),l=this.get(e,t,r,s,i,n,a,o)):l.version=t.version)),xy[0]=null,xy[1]=null,xy[2]=null,xy[3]=null,l}getChainMap(e="default"){return this.chainMaps[e]||(this.chainMaps[e]=new fy)}dispose(){this.chainMaps={}}createRenderObject(e,t,r,s,i,n,a,o,u,l,d){const c=this.getChainMap(d),h=new by(e,t,r,s,i,n,a,o,u,l);return h.onDispose=()=>{this.pipelines.delete(h),this.bindings.deleteForRender(h),this.nodes.delete(h),c.delete(h.getChainArray())},h}}class _y{constructor(){this.data=new WeakMap}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}delete(e){let t=null;return this.data.has(e)&&(t=this.data.get(e),this.data.delete(e)),t}has(e){return this.data.has(e)}dispose(){this.data=new WeakMap}}const vy=1,Ny=2,Sy=3,Ry=4,Ey=16;class Ay extends _y{constructor(e){super(),this.backend=e}delete(e){const t=super.delete(e);return null!==t&&this.backend.destroyAttribute(e),t}update(e,t){const r=this.get(e);if(void 0===r.version)t===vy?this.backend.createAttribute(e):t===Ny?this.backend.createIndexAttribute(e):t===Sy?this.backend.createStorageAttribute(e):t===Ry&&this.backend.createIndirectStorageAttribute(e),r.version=this._getBufferAttribute(e).version;else{const t=this._getBufferAttribute(e);(r.version=65535?Ie:Oe)(t,1);return i.version=wy(e),i.__id=Cy(e),i}class By extends _y{constructor(e,t){super(),this.attributes=e,this.info=t,this.wireframes=new WeakMap,this.attributeCall=new WeakMap,this._geometryDisposeListeners=new Map}has(e){const t=e.geometry;return super.has(t)&&!0===this.get(t).initialized}updateForRender(e){!1===this.has(e)&&this.initGeometry(e),this.updateAttributes(e)}initGeometry(e){const t=e.geometry;this.get(t).initialized=!0,this.info.memory.geometries++;const r=()=>{this.info.memory.geometries--;const s=t.index,i=e.getAttributes();null!==s&&this.attributes.delete(s);for(const e of i)this.attributes.delete(e);const n=this.wireframes.get(t);void 0!==n&&this.attributes.delete(n),t.removeEventListener("dispose",r),this._geometryDisposeListeners.delete(t)};t.addEventListener("dispose",r),this._geometryDisposeListeners.set(t,r)}updateAttributes(e){const t=e.getAttributes();for(const e of t)e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute?this.updateAttribute(e,Sy):this.updateAttribute(e,vy);const r=this.getIndex(e);null!==r&&this.updateAttribute(r,Ny);const s=e.geometry.indirect;null!==s&&this.updateAttribute(s,Ry)}updateAttribute(e,t){const r=this.info.render.calls;e.isInterleavedBufferAttribute?void 0===this.attributeCall.get(e)?(this.attributes.update(e,t),this.attributeCall.set(e,r)):this.attributeCall.get(e.data)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e.data,r),this.attributeCall.set(e,r)):this.attributeCall.get(e)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e,r))}getIndirect(e){return e.geometry.indirect}getIndirectOffset(e){return e.geometry.indirectOffset}getIndex(e){const{geometry:t,material:r}=e;let s=t.index;if(!0===r.wireframe){const e=this.wireframes;let r=e.get(t);void 0===r?(r=My(t),e.set(t,r)):r.version===wy(t)&&r.__id===Cy(t)||(this.attributes.delete(r),r=My(t),e.set(t,r)),s=r}return s}dispose(){for(const[e,t]of this._geometryDisposeListeners.entries())e.removeEventListener("dispose",t);this._geometryDisposeListeners.clear()}}class Fy{constructor(){this.autoReset=!0,this.frame=0,this.calls=0,this.render={calls:0,frameCalls:0,drawCalls:0,triangles:0,points:0,lines:0,timestamp:0},this.compute={calls:0,frameCalls:0,timestamp:0},this.memory={geometries:0,textures:0}}update(e,t,r){this.render.drawCalls++,e.isMesh||e.isSprite?this.render.triangles+=r*(t/3):e.isPoints?this.render.points+=r*t:e.isLineSegments?this.render.lines+=r*(t/2):e.isLine?this.render.lines+=r*(t-1):o("WebGPUInfo: Unknown object type.")}reset(){this.render.drawCalls=0,this.render.frameCalls=0,this.compute.frameCalls=0,this.render.triangles=0,this.render.points=0,this.render.lines=0}dispose(){this.reset(),this.calls=0,this.render.calls=0,this.compute.calls=0,this.render.timestamp=0,this.compute.timestamp=0,this.memory.geometries=0,this.memory.textures=0}}class Ly{constructor(e){this.cacheKey=e,this.usedTimes=0}}class Py extends Ly{constructor(e,t,r){super(e),this.vertexProgram=t,this.fragmentProgram=r}}class Dy extends Ly{constructor(e,t){super(e),this.computeProgram=t,this.isComputePipeline=!0}}let Uy=0;class Iy{constructor(e,t,r,s=null,i=null){this.id=Uy++,this.code=e,this.stage=t,this.name=r,this.transforms=s,this.attributes=i,this.usedTimes=0}}class Oy extends _y{constructor(e,t){super(),this.backend=e,this.nodes=t,this.bindings=null,this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}getForCompute(e,t){const{backend:r}=this,s=this.get(e);if(this._needsComputeUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.computeProgram.usedTimes--);const n=this.nodes.getForCompute(e);let a=this.programs.compute.get(n.computeShader);void 0===a&&(i&&0===i.computeProgram.usedTimes&&this._releaseProgram(i.computeProgram),a=new Iy(n.computeShader,"compute",e.name,n.transforms,n.nodeAttributes),this.programs.compute.set(n.computeShader,a),r.createProgram(a));const o=this._getComputeCacheKey(e,a);let u=this.caches.get(o);void 0===u&&(i&&0===i.usedTimes&&this._releasePipeline(i),u=this._getComputePipeline(e,a,o,t)),u.usedTimes++,a.usedTimes++,s.version=e.version,s.pipeline=u}return s.pipeline}getForRender(e,t=null){const{backend:r}=this,s=this.get(e);if(this._needsRenderUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.vertexProgram.usedTimes--,i.fragmentProgram.usedTimes--);const n=e.getNodeBuilderState(),a=e.material?e.material.name:"";let o=this.programs.vertex.get(n.vertexShader);void 0===o&&(i&&0===i.vertexProgram.usedTimes&&this._releaseProgram(i.vertexProgram),o=new Iy(n.vertexShader,"vertex",a),this.programs.vertex.set(n.vertexShader,o),r.createProgram(o));let u=this.programs.fragment.get(n.fragmentShader);void 0===u&&(i&&0===i.fragmentProgram.usedTimes&&this._releaseProgram(i.fragmentProgram),u=new Iy(n.fragmentShader,"fragment",a),this.programs.fragment.set(n.fragmentShader,u),r.createProgram(u));const l=this._getRenderCacheKey(e,o,u);let d=this.caches.get(l);void 0===d?(i&&0===i.usedTimes&&this._releasePipeline(i),d=this._getRenderPipeline(e,o,u,l,t)):e.pipeline=d,d.usedTimes++,o.usedTimes++,u.usedTimes++,s.pipeline=d}return s.pipeline}isReady(e){const t=this.get(e).pipeline;if(void 0===t)return!1;const r=this.backend.get(t);return void 0!==r.pipeline&&null!==r.pipeline}delete(e){const t=this.get(e).pipeline;return t&&(t.usedTimes--,0===t.usedTimes&&this._releasePipeline(t),t.isComputePipeline?(t.computeProgram.usedTimes--,0===t.computeProgram.usedTimes&&this._releaseProgram(t.computeProgram)):(t.fragmentProgram.usedTimes--,t.vertexProgram.usedTimes--,0===t.vertexProgram.usedTimes&&this._releaseProgram(t.vertexProgram),0===t.fragmentProgram.usedTimes&&this._releaseProgram(t.fragmentProgram))),super.delete(e)}dispose(){super.dispose(),this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}updateForRender(e){this.getForRender(e)}_getComputePipeline(e,t,r,s){r=r||this._getComputeCacheKey(e,t);let i=this.caches.get(r);return void 0===i&&(i=new Dy(r,t),this.caches.set(r,i),this.backend.createComputePipeline(i,s)),i}_getRenderPipeline(e,t,r,s,i){s=s||this._getRenderCacheKey(e,t,r);let n=this.caches.get(s);return void 0===n&&(n=new Py(s,t,r),this.caches.set(s,n),e.pipeline=n,this.backend.createRenderPipeline(e,i)),n}_getComputeCacheKey(e,t){return e.id+","+t.id}_getRenderCacheKey(e,t,r){return t.id+","+r.id+","+this.backend.getRenderCacheKey(e)}_releasePipeline(e){this.caches.delete(e.cacheKey)}_releaseProgram(e){const t=e.code,r=e.stage;this.programs[r].delete(t)}_needsComputeUpdate(e){const t=this.get(e);return void 0===t.pipeline||t.version!==e.version}_needsRenderUpdate(e){return void 0===this.get(e).pipeline||this.backend.needsRenderUpdate(e)}}class Vy extends _y{constructor(e,t,r,s,i,n){super(),this.backend=e,this.textures=r,this.pipelines=i,this.attributes=s,this.nodes=t,this.info=n,this.pipelines.bindings=this}getForRender(e){const t=e.getBindings();for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}getForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}updateForCompute(e){this._updateBindings(this.getForCompute(e))}updateForRender(e){this._updateBindings(this.getForRender(e))}deleteForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}deleteForRender(e){const t=e.getBindings();for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}_updateBindings(e){for(const t of e)this._update(t,e)}_init(e){for(const t of e.bindings)if(t.isSampledTexture)this.textures.updateTexture(t.texture);else if(t.isSampler)this.textures.updateSampler(t.texture);else if(t.isStorageBuffer){const e=t.attribute,r=e.isIndirectStorageBufferAttribute?Ry:Sy;this.attributes.update(e,r)}}_update(e,t){const{backend:r}=this;let s=!1,i=!0,n=0,a=0;for(const t of e.bindings){if(!1!==this.nodes.updateGroup(t)){if(t.isStorageBuffer){const e=t.attribute,i=e.isIndirectStorageBufferAttribute?Ry:Sy,n=r.get(t);this.attributes.update(e,i),n.attribute!==e&&(n.attribute=e,s=!0)}if(t.isUniformBuffer){t.update()&&r.updateBinding(t)}else if(t.isSampledTexture){const o=t.update(),u=t.texture,l=this.textures.get(u);o&&(this.textures.updateTexture(u),t.generation!==l.generation&&(t.generation=l.generation,s=!0),l.bindGroups.add(e));if(void 0!==r.get(u).externalTexture||l.isDefaultTexture?i=!1:(n=10*n+u.id,a+=u.version),!0===u.isStorageTexture&&!0===u.mipmapsAutoUpdate){const e=this.get(u);!0===t.store?e.needsMipmap=!0:this.textures.needsMipmaps(u)&&!0===e.needsMipmap&&(this.backend.generateMipmaps(u),e.needsMipmap=!1)}}else if(t.isSampler){if(t.update()){const e=this.textures.updateSampler(t.texture);t.samplerKey!==e&&(t.samplerKey=e,s=!0)}}t.isBuffer&&t.updateRanges.length>0&&t.clearUpdateRanges()}}!0===s&&this.backend.updateBindings(e,t,i?n:0,a)}}function ky(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?e.z-t.z:e.id-t.id}function Gy(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function $y(e){return(e.transmission>0||e.transmissionNode&&e.transmissionNode.isNode)&&e.side===P&&!1===e.forceSinglePass}class zy{constructor(e,t,r){this.renderItems=[],this.renderItemsIndex=0,this.opaque=[],this.transparentDoublePass=[],this.transparent=[],this.bundles=[],this.lightsNode=e.getNode(t,r),this.lightsArray=[],this.scene=t,this.camera=r,this.occlusionQueryCount=0}begin(){return this.renderItemsIndex=0,this.opaque.length=0,this.transparentDoublePass.length=0,this.transparent.length=0,this.bundles.length=0,this.lightsArray.length=0,this.occlusionQueryCount=0,this}getNextRenderItem(e,t,r,s,i,n,a){let o=this.renderItems[this.renderItemsIndex];return void 0===o?(o={id:e.id,object:e,geometry:t,material:r,groupOrder:s,renderOrder:e.renderOrder,z:i,group:n,clippingContext:a},this.renderItems[this.renderItemsIndex]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.groupOrder=s,o.renderOrder=e.renderOrder,o.z=i,o.group=n,o.clippingContext=a),this.renderItemsIndex++,o}push(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===e.occlusionTest&&this.occlusionQueryCount++,!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.push(o),this.transparent.push(o)):this.opaque.push(o)}unshift(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.unshift(o),this.transparent.unshift(o)):this.opaque.unshift(o)}pushBundle(e){this.bundles.push(e)}pushLight(e){this.lightsArray.push(e)}sort(e,t){this.opaque.length>1&&this.opaque.sort(e||ky),this.transparentDoublePass.length>1&&this.transparentDoublePass.sort(t||Gy),this.transparent.length>1&&this.transparent.sort(t||Gy)}finish(){this.lightsNode.setLights(this.lightsArray);for(let e=this.renderItemsIndex,t=this.renderItems.length;e>t,u=a.height>>t;let l=e.depthTexture||i[t];const d=!0===e.depthBuffer||!0===e.stencilBuffer;let c=!1;void 0===l&&d&&(l=new J,l.format=e.stencilBuffer?Ve:ke,l.type=e.stencilBuffer?Ge:S,l.image.width=o,l.image.height=u,l.image.depth=a.depth,l.renderTarget=e,l.isArrayTexture=!0===e.multiview&&a.depth>1,i[t]=l),r.width===a.width&&a.height===r.height||(c=!0,l&&(l.needsUpdate=!0,l.image.width=o,l.image.height=u,l.image.depth=l.isArrayTexture?l.image.depth:1)),r.width=a.width,r.height=a.height,r.textures=n,r.depthTexture=l||null,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,r.renderTarget=e,r.sampleCount!==s&&(c=!0,l&&(l.needsUpdate=!0),r.sampleCount=s);const h={sampleCount:s};if(!0!==e.isXRRenderTarget){for(let e=0;e{this._destroyRenderTarget(e)},e.addEventListener("dispose",r.onDispose))}updateTexture(e,t={}){const r=this.get(e);if(!0===r.initialized&&r.version===e.version)return;const s=e.isRenderTargetTexture||e.isDepthTexture||e.isFramebufferTexture,i=this.backend;if(s&&!0===r.initialized&&i.destroyTexture(e),e.isFramebufferTexture){const t=this.renderer.getRenderTarget();e.type=t?t.texture.type:$e}const{width:n,height:a,depth:o}=this.getSize(e);if(t.width=n,t.height=a,t.depth=o,t.needsMipmaps=this.needsMipmaps(e),t.levels=t.needsMipmaps?this.getMipLevels(e,n,a):1,e.isCubeTexture&&e.mipmaps.length>0&&t.levels++,s||!0===e.isStorageTexture||!0===e.isExternalTexture)i.createTexture(e,t),r.generation=e.version;else if(e.version>0){const s=e.image;if(void 0===s)d("Renderer: Texture marked for update but image is undefined.");else if(!1===s.complete)d("Renderer: Texture marked for update but image is incomplete.");else{if(e.images){const r=[];for(const t of e.images)r.push(t);t.images=r}else t.image=s;void 0!==r.isDefaultTexture&&!0!==r.isDefaultTexture||(i.createTexture(e,t),r.isDefaultTexture=!1,r.generation=e.version),!0===e.source.dataReady&&i.updateTexture(e,t);const n=!0===e.isStorageTexture&&!1===e.mipmapsAutoUpdate;t.needsMipmaps&&0===e.mipmaps.length&&!n&&i.generateMipmaps(e),e.onUpdate&&e.onUpdate(e)}}else i.createDefaultTexture(e),r.isDefaultTexture=!0,r.generation=e.version;!0!==r.initialized&&(r.initialized=!0,r.generation=e.version,r.bindGroups=new Set,this.info.memory.textures++,e.isVideoTexture&&!0===p.enabled&&p.getTransfer(e.colorSpace)!==g&&d("WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace."),r.onDispose=()=>{this._destroyTexture(e)},e.addEventListener("dispose",r.onDispose)),r.version=e.version}updateSampler(e){return this.backend.updateSampler(e)}getSize(e,t=Qy){let r=e.images?e.images[0]:e.image;return r?(void 0!==r.image&&(r=r.image),"undefined"!=typeof HTMLVideoElement&&r instanceof HTMLVideoElement?(t.width=r.videoWidth||1,t.height=r.videoHeight||1,t.depth=1):"undefined"!=typeof VideoFrame&&r instanceof VideoFrame?(t.width=r.displayWidth||1,t.height=r.displayHeight||1,t.depth=1):(t.width=r.width||1,t.height=r.height||1,t.depth=e.isCubeTexture?6:r.depth||1)):t.width=t.height=t.depth=1,t}getMipLevels(e,t,r){let s;return s=e.mipmaps.length>0?e.mipmaps.length:!0===e.isCompressedTexture?1:Math.floor(Math.log2(Math.max(t,r)))+1,s}needsMipmaps(e){return!0===e.generateMipmaps||e.mipmaps.length>0}_destroyRenderTarget(e){if(!0===this.has(e)){const t=this.get(e),r=t.textures,s=t.depthTexture;e.removeEventListener("dispose",t.onDispose);for(let e=0;e=2)for(let r=0;r{if(this._currentNode=t,!t.isVarNode||!t.isIntent(e)||!0===t.isAssign(e))if("setup"===s)t.build(e);else if("analyze"===s)t.build(e,this);else if("generate"===s){const r=e.getDataFromNode(t,"any").stages,s=r&&r[e.shaderStage];if(t.isVarNode&&s&&1===s.length&&s[0]&&s[0].isStackNode)return;t.build(e,"void")}},n=[...this.nodes];for(const e of n)i(e);this._currentNode=null;const a=this.nodes.filter(e=>-1===n.indexOf(e));for(const e of a)i(e);let o;return o=this.hasOutput(e)?this.outputNode.build(e,...t):super.build(e,...t),cn(r),e.removeActiveStack(this),o}}const tb=nn(eb).setParameterLength(0,1);class rb extends di{static get type(){return"StructTypeNode"}constructor(e,t=null){var r;super("struct"),this.membersLayout=(r=e,Object.entries(r).map(([e,t])=>"string"==typeof t?{name:e,type:t,atomic:!1}:{name:e,type:t.type,atomic:t.atomic||!1})),this.name=t,this.isStructLayoutNode=!0}getLength(){const e=Float32Array.BYTES_PER_ELEMENT;let t=1,r=0;for(const s of this.membersLayout){const i=s.type,n=qs(i),a=js(i)/e;t=Math.max(t,a);const o=r%t%a;0!==o&&(r+=a-o),r+=n}return Math.ceil(r/t)*t}getMemberType(e,t){const r=this.membersLayout.find(e=>e.name===t);return r?r.type:"void"}getNodeType(e){return e.getStructTypeFromNode(this,this.membersLayout,this.name).name}setup(e){e.getStructTypeFromNode(this,this.membersLayout,this.name),e.addInclude(this)}generate(e){return this.getNodeType(e)}}class sb extends di{static get type(){return"StructNode"}constructor(e,t){super("vec3"),this.structTypeNode=e,this.values=t,this.isStructNode=!0}getNodeType(e){return this.structTypeNode.getNodeType(e)}getMemberType(e,t){return this.structTypeNode.getMemberType(e,t)}_getChildren(){const e=super._getChildren(),t=e.find(e=>e.childNode===this.structTypeNode);return e.splice(e.indexOf(t),1),e.push(t),e}generate(e){const t=e.getVarFromNode(this),r=t.type,s=e.getPropertyName(t);return e.addLineFlowCode(`${s} = ${e.generateStruct(r,this.structTypeNode.membersLayout,this.values)}`,this),t.name}}class ib extends di{static get type(){return"OutputStructNode"}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}getNodeType(){return"OutputType"}generate(e){const t=e.getDataFromNode(this);if(void 0===t.membersLayout){const r=this.members,s=[];for(let t=0;tnew hb(e,"uint","float"),mb={};class fb extends io{static get type(){return"BitcountNode"}constructor(e,t){super(e,t),this.isBitcountNode=!0}_resolveElementType(e,t,r){"int"===r?t.assign(pb(e,"uint")):t.assign(e)}_returnDataNode(e){switch(e){case"uint":return bn;case"int":return yn;case"uvec2":return vn;case"uvec3":return En;case"uvec4":return Mn;case"ivec2":return _n;case"ivec3":return Rn;case"ivec4":return Cn}}_createTrailingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t);const i=fn(s.bitAnd(Do(s))),n=gb(i).shiftRight(23).sub(127);return r(n)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createLeadingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{pn(e.equal(bn(0)),()=>bn(32));const s=bn(0),i=bn(0);return this._resolveElementType(e,s,t),pn(s.shiftRight(16).equal(0),()=>{i.addAssign(16),s.shiftLeftAssign(16)}),pn(s.shiftRight(24).equal(0),()=>{i.addAssign(8),s.shiftLeftAssign(8)}),pn(s.shiftRight(28).equal(0),()=>{i.addAssign(4),s.shiftLeftAssign(4)}),pn(s.shiftRight(30).equal(0),()=>{i.addAssign(2),s.shiftLeftAssign(2)}),pn(s.shiftRight(31).equal(0),()=>{i.addAssign(1)}),r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createOneBitsBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t),s.assign(s.sub(s.shiftRight(bn(1)).bitAnd(bn(1431655765)))),s.assign(s.bitAnd(bn(858993459)).add(s.shiftRight(bn(2)).bitAnd(bn(858993459))));const i=s.add(s.shiftRight(bn(4))).bitAnd(bn(252645135)).mul(bn(16843009)).shiftRight(bn(24));return r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createMainLayout(e,t,r,s){const i=this._returnDataNode(t);return dn(([e])=>{if(1===r)return i(s(e));{const t=i(0),n=["x","y","z","w"];for(let i=0;id(r))()}}fb.COUNT_TRAILING_ZEROS="countTrailingZeros",fb.COUNT_LEADING_ZEROS="countLeadingZeros",fb.COUNT_ONE_BITS="countOneBits";const yb=on(fb,fb.COUNT_TRAILING_ZEROS).setParameterLength(1),bb=on(fb,fb.COUNT_LEADING_ZEROS).setParameterLength(1),xb=on(fb,fb.COUNT_ONE_BITS).setParameterLength(1),Tb=dn(([e])=>{const t=e.toUint().mul(747796405).add(2891336453),r=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return r.shiftRight(22).bitXor(r).toFloat().mul(1/2**32)}),_b=(e,t)=>eu(Pa(4,e.mul(La(1,e))),t);class vb extends pi{static get type(){return"PackFloatNode"}constructor(e,t){super(),this.vectorNode=t,this.encoding=e,this.isPackFloatNode=!0}getNodeType(){return"uint"}generate(e){const t=this.vectorNode.getNodeType(e);return`${e.getFloatPackingMethod(this.encoding)}(${this.vectorNode.build(e,t)})`}}const Nb=on(vb,"snorm").setParameterLength(1),Sb=on(vb,"unorm").setParameterLength(1),Rb=on(vb,"float16").setParameterLength(1);class Eb extends pi{static get type(){return"UnpackFloatNode"}constructor(e,t){super(),this.uintNode=t,this.encoding=e,this.isUnpackFloatNode=!0}getNodeType(){return"vec2"}generate(e){const t=this.uintNode.getNodeType(e);return`${e.getFloatUnpackingMethod(this.encoding)}(${this.uintNode.build(e,t)})`}}const Ab=on(Eb,"snorm").setParameterLength(1),wb=on(Eb,"unorm").setParameterLength(1),Cb=on(Eb,"float16").setParameterLength(1),Mb=dn(([e])=>e.fract().sub(.5).abs()).setLayout({name:"tri",type:"float",inputs:[{name:"x",type:"float"}]}),Bb=dn(([e])=>Sn(Mb(e.z.add(Mb(e.y.mul(1)))),Mb(e.z.add(Mb(e.x.mul(1)))),Mb(e.y.add(Mb(e.x.mul(1)))))).setLayout({name:"tri3",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),Fb=dn(([e,t,r])=>{const s=Sn(e).toVar(),i=fn(1.4).toVar(),n=fn(0).toVar(),a=Sn(s).toVar();return Ep({start:fn(0),end:fn(3),type:"float",condition:"<="},()=>{const e=Sn(Bb(a.mul(2))).toVar();s.addAssign(e.add(r.mul(fn(.1).mul(t)))),a.mulAssign(1.8),i.mulAssign(1.5),s.mulAssign(1.2);const o=fn(Mb(s.z.add(Mb(s.x.add(Mb(s.y)))))).toVar();n.addAssign(o.div(i)),a.addAssign(.14)}),n}).setLayout({name:"triNoise3D",type:"float",inputs:[{name:"position",type:"vec3"},{name:"speed",type:"float"},{name:"time",type:"float"}]});class Lb extends di{static get type(){return"FunctionOverloadingNode"}constructor(e=[],...t){super(),this.functionNodes=e,this.parametersNodes=t,this._candidateFn=null,this.global=!0}getNodeType(e){return this.getCandidateFn(e).shaderNode.layout.type}getCandidateFn(e){const t=this.parametersNodes;let r=this._candidateFn;if(null===r){let s=null,i=-1;for(const r of this.functionNodes){const n=r.shaderNode.layout;if(null===n)throw new Error("FunctionOverloadingNode: FunctionNode must be a layout.");const a=n.inputs;if(t.length===a.length){let n=0;for(let r=0;ri&&(s=r,i=n)}}this._candidateFn=r=s}return r}setup(e){return this.getCandidateFn(e)(...this.parametersNodes)}}const Pb=nn(Lb),Db=e=>(...t)=>Pb(e,...t),Ub=Na(0).setGroup(Ta).onRenderUpdate(e=>e.time),Ib=Na(0).setGroup(Ta).onRenderUpdate(e=>e.deltaTime),Ob=Na(0,"uint").setGroup(Ta).onRenderUpdate(e=>e.frameId);const Vb=dn(([e,t,r=Tn(.5)])=>ey(e.sub(r),t).add(r)),kb=dn(([e,t,r=Tn(.5)])=>{const s=e.sub(r),i=s.dot(s),n=i.mul(i).mul(t);return e.add(s.mul(n))}),Gb=dn(({position:e=null,horizontal:t=!0,vertical:r=!1})=>{let s;null!==e?(s=Id.toVar(),s[3][0]=e.x,s[3][1]=e.y,s[3][2]=e.z):s=Id;const i=vd.mul(s);return Yi(t)&&(i[0][0]=Id[0].length(),i[0][1]=0,i[0][2]=0),Yi(r)&&(i[1][0]=0,i[1][1]=Id[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Td.mul(i).mul(Qd)}),$b=dn(([e=null])=>{const t=rg();return rg(qp(e)).sub(t).lessThan(0).select(Kl,e)}),zb=dn(([e,t=Al(),r=fn(0)])=>{const s=e.x,i=e.y,n=r.mod(s.mul(i)).floor(),a=n.mod(s),o=i.sub(n.add(1).div(s).ceil()),u=e.reciprocal(),l=Tn(a,o);return t.add(l).mul(u)}),Wb=dn(([e,t=null,r=null,s=fn(1),i=Qd,n=oc])=>{let a=n.abs().normalize();a=a.div(a.dot(Sn(1)));const o=i.yz.mul(s),u=i.zx.mul(s),l=i.xy.mul(s),d=e.value,c=null!==t?t.value:d,h=null!==r?r.value:d,p=Ul(d,o).mul(a.x),g=Ul(c,u).mul(a.y),m=Ul(h,l).mul(a.z);return Fa(p,g,m)}),Hb=new Xe,qb=new r,jb=new r,Xb=new r,Kb=new a,Qb=new r(0,0,-1),Yb=new s,Zb=new r,Jb=new r,ex=new s,tx=new t,rx=new ae,sx=Kl.flipX();rx.depthTexture=new J(1,1);let ix=!1;class nx extends Pl{static get type(){return"ReflectorNode"}constructor(e={}){super(e.defaultTexture||rx.texture,sx),this._reflectorBaseNode=e.reflector||new ax(this,e),this._depthNode=null,this.setUpdateMatrix(!1)}get reflector(){return this._reflectorBaseNode}get target(){return this._reflectorBaseNode.target}getDepthNode(){if(null===this._depthNode){if(!0!==this._reflectorBaseNode.depth)throw new Error("THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ");this._depthNode=new nx({defaultTexture:rx.depthTexture,reflector:this._reflectorBaseNode})}return this._depthNode}setup(e){return e.object.isQuadMesh||this._reflectorBaseNode.build(e),super.setup(e)}clone(){const e=new this.constructor(this.reflectorNode);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e._reflectorBaseNode=this._reflectorBaseNode,e}dispose(){super.dispose(),this._reflectorBaseNode.dispose()}}class ax extends di{static get type(){return"ReflectorBaseNode"}constructor(e,t={}){super();const{target:r=new Ke,resolutionScale:s=1,generateMipmaps:i=!1,bounces:n=!0,depth:a=!1,samples:o=0}=t;this.textureNode=e,this.target=r,this.resolutionScale=s,void 0!==t.resolution&&(v('ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".'),this.resolutionScale=t.resolution),this.generateMipmaps=i,this.bounces=n,this.depth=a,this.samples=o,this.updateBeforeType=n?ti.RENDER:ti.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new Map,this.forceUpdate=!1,this.hasOutput=!1}_updateResolution(e,t){const r=this.resolutionScale;t.getDrawingBufferSize(tx),e.setSize(Math.round(tx.width*r),Math.round(tx.height*r))}setup(e){return this._updateResolution(rx,e.renderer),super.setup(e)}dispose(){super.dispose();for(const e of this.renderTargets.values())e.dispose()}getVirtualCamera(e){let t=this.virtualCameras.get(e);return void 0===t&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return void 0===t&&(t=new ae(0,0,{type:_e,samples:this.samples}),!0===this.generateMipmaps&&(t.texture.minFilter=Qe,t.texture.generateMipmaps=!0),!0===this.depth&&(t.depthTexture=new J),this.renderTargets.set(e,t)),t}updateBefore(e){if(!1===this.bounces&&ix)return!1;ix=!0;const{scene:t,camera:r,renderer:s,material:i}=e,{target:n}=this,a=this.getVirtualCamera(r),o=this.getRenderTarget(a);s.getDrawingBufferSize(tx),this._updateResolution(o,s),jb.setFromMatrixPosition(n.matrixWorld),Xb.setFromMatrixPosition(r.matrixWorld),Kb.extractRotation(n.matrixWorld),qb.set(0,0,1),qb.applyMatrix4(Kb),Zb.subVectors(jb,Xb);let u=!1;if(!0===Zb.dot(qb)>0&&!1===this.forceUpdate){if(!1===this.hasOutput)return void(ix=!1);u=!0}Zb.reflect(qb).negate(),Zb.add(jb),Kb.extractRotation(r.matrixWorld),Qb.set(0,0,-1),Qb.applyMatrix4(Kb),Qb.add(Xb),Jb.subVectors(jb,Qb),Jb.reflect(qb).negate(),Jb.add(jb),a.coordinateSystem=r.coordinateSystem,a.position.copy(Zb),a.up.set(0,1,0),a.up.applyMatrix4(Kb),a.up.reflect(qb),a.lookAt(Jb),a.near=r.near,a.far=r.far,a.updateMatrixWorld(),a.projectionMatrix.copy(r.projectionMatrix),Hb.setFromNormalAndCoplanarPoint(qb,jb),Hb.applyMatrix4(a.matrixWorldInverse),Yb.set(Hb.normal.x,Hb.normal.y,Hb.normal.z,Hb.constant);const l=a.projectionMatrix;ex.x=(Math.sign(Yb.x)+l.elements[8])/l.elements[0],ex.y=(Math.sign(Yb.y)+l.elements[9])/l.elements[5],ex.z=-1,ex.w=(1+l.elements[10])/l.elements[14],Yb.multiplyScalar(1/Yb.dot(ex));l.elements[2]=Yb.x,l.elements[6]=Yb.y,l.elements[10]=s.coordinateSystem===h?Yb.z-0:Yb.z+1-0,l.elements[14]=Yb.w,this.textureNode.value=o.texture,!0===this.depth&&(this.textureNode.getDepthNode().value=o.depthTexture),i.visible=!1;const d=s.getRenderTarget(),c=s.getMRT(),p=s.autoClear;s.setMRT(null),s.setRenderTarget(o),s.autoClear=!0;const g=t.name;t.name=(t.name||"Scene")+" [ Reflector ]",u?(s.clear(),this.hasOutput=!1):(s.render(t,a),this.hasOutput=!0),t.name=g,s.setMRT(c),s.setRenderTarget(d),s.autoClear=p,i.visible=!0,ix=!1,this.forceUpdate=!1}get resolution(){return v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale}set resolution(e){v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale=e}}const ox=new Se(-1,1,1,-1,0,1);class ux extends Ne{constructor(e=!1){super();const t=!1===e?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute("position",new Ye([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Ye(t,2))}}const lx=new ux;class dx extends ue{constructor(e=null){super(lx,e),this.camera=ox,this.isQuadMesh=!0}async renderAsync(e){v('QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await e.init(),e.render(this,ox)}render(e){e.render(this,ox)}}const cx=new t;class hx extends Pl{static get type(){return"RTTNode"}constructor(e,t=null,r=null,s={type:_e}){const i=new ae(t,r,s);super(i.texture,Al()),this.isRTTNode=!0,this.node=e,this.width=t,this.height=r,this.pixelRatio=1,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this._rttNode=null,this._quadMesh=new dx(new yg),this.updateBeforeType=ti.RENDER}get autoResize(){return null===this.width}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name="RTT",this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;const r=e*this.pixelRatio,s=t*this.pixelRatio;this.renderTarget.setSize(r,s),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(!1===this.textureNeedsUpdate&&!1===this.autoUpdate)return;if(this.textureNeedsUpdate=!1,!0===this.autoResize){const t=e.getPixelRatio(),r=e.getSize(cx),s=Math.floor(r.width*t),i=Math.floor(r.height*t);s===this.renderTarget.width&&i===this.renderTarget.height||(this.renderTarget.setSize(s,i),this.textureNeedsUpdate=!0)}let t="RTT";this.node.name&&(t=this.node.name+" [ "+t+" ]"),this._quadMesh.material.fragmentNode=this._rttNode,this._quadMesh.name=t;const r=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(r)}clone(){const e=new Pl(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}}const px=(e,...t)=>new hx(en(e),...t),gx=dn(([e,t,r],s)=>{let i;s.renderer.coordinateSystem===h?(e=Tn(e.x,e.y.oneMinus()).mul(2).sub(1),i=wn(Sn(e,t),1)):i=wn(Sn(e.x,e.y.oneMinus(),t).mul(2).sub(1),1);const n=wn(r.mul(i));return n.xyz.div(n.w)}),mx=dn(([e,t])=>{const r=t.mul(wn(e,1)),s=r.xy.div(r.w).mul(.5).add(.5).toVar();return Tn(s.x,s.y.oneMinus())}),fx=dn(([e,t,r])=>{const s=Cl(Il(t)),i=_n(e.mul(s)).toVar(),n=Il(t,i).toVar(),a=Il(t,i.sub(_n(2,0))).toVar(),o=Il(t,i.sub(_n(1,0))).toVar(),u=Il(t,i.add(_n(1,0))).toVar(),l=Il(t,i.add(_n(2,0))).toVar(),d=Il(t,i.add(_n(0,2))).toVar(),c=Il(t,i.add(_n(0,1))).toVar(),h=Il(t,i.sub(_n(0,1))).toVar(),p=Il(t,i.sub(_n(0,2))).toVar(),g=Fo(La(fn(2).mul(o).sub(a),n)).toVar(),m=Fo(La(fn(2).mul(u).sub(l),n)).toVar(),f=Fo(La(fn(2).mul(c).sub(d),n)).toVar(),y=Fo(La(fn(2).mul(h).sub(p),n)).toVar(),b=gx(e,n,r).toVar(),x=g.lessThan(m).select(b.sub(gx(e.sub(Tn(fn(1).div(s.x),0)),o,r)),b.negate().add(gx(e.add(Tn(fn(1).div(s.x),0)),u,r))),T=f.lessThan(y).select(b.sub(gx(e.add(Tn(0,fn(1).div(s.y))),c,r)),b.negate().add(gx(e.sub(Tn(0,fn(1).div(s.y))),h,r)));return So(Jo(x,T))}),yx=dn(([e])=>Ro(fn(52.9829189).mul(Ro(Zo(e,Tn(.06711056,.00583715)))))).setLayout({name:"interleavedGradientNoise",type:"float",inputs:[{name:"position",type:"vec2"}]}),bx=dn(([e,t,r])=>{const s=fn(2.399963229728653),i=To(fn(e).add(.5).div(fn(t))),n=fn(e).mul(s).add(r);return Tn(Ao(n),Eo(n)).mul(i)}).setLayout({name:"vogelDiskSample",type:"vec2",inputs:[{name:"sampleIndex",type:"int"},{name:"samplesCount",type:"int"},{name:"phi",type:"float"}]});class xx extends di{static get type(){return"SampleNode"}constructor(e,t=null){super(),this.callback=e,this.uvNode=t,this.isSampleNode=!0}setup(){return this.sample(Al())}sample(e){return this.callback(e)}}class Tx extends di{static get type(){return"EventNode"}constructor(e,t){super("void"),this.eventType=e,this.callback=t,e===Tx.OBJECT?this.updateType=ti.OBJECT:e===Tx.MATERIAL?this.updateType=ti.RENDER:e===Tx.BEFORE_OBJECT?this.updateBeforeType=ti.OBJECT:e===Tx.BEFORE_MATERIAL&&(this.updateBeforeType=ti.RENDER)}update(e){this.callback(e)}updateBefore(e){this.callback(e)}}Tx.OBJECT="object",Tx.MATERIAL="material",Tx.BEFORE_OBJECT="beforeObject",Tx.BEFORE_MATERIAL="beforeMaterial";const _x=(e,t)=>new Tx(e,t).toStack();class vx extends j{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageInstancedBufferAttribute=!0}}class Nx extends Ce{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageBufferAttribute=!0}}class Sx extends di{static get type(){return"PointUVNode"}constructor(){super("vec2"),this.isPointUVNode=!0}generate(){return"vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )"}}const Rx=an(Sx),Ex=new D,Ax=new a,wx=Na(0).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundBlurriness),Cx=Na(1).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundIntensity),Mx=Na(new a).setGroup(Ta).onRenderUpdate(({scene:e})=>{const t=e.background;return null!==t&&t.isTexture&&t.mapping!==Ze?(Ex.copy(e.backgroundRotation),Ex.x*=-1,Ex.y*=-1,Ex.z*=-1,Ax.makeRotationFromEuler(Ex)):Ax.identity(),Ax});class Bx extends Pl{static get type(){return"StorageTextureNode"}constructor(e,t,r=null){super(e,t),this.storeNode=r,this.mipLevel=0,this.isStorageTextureNode=!0,this.access=si.WRITE_ONLY}getInputType(){return"storageTexture"}setup(e){super.setup(e);const t=e.getNodeProperties(this);return t.storeNode=this.storeNode,t}setAccess(e){return this.access=e,this}setMipLevel(e){return this.mipLevel=e,this}generate(e,t){let r;return r=null!==this.storeNode?this.generateStore(e):super.generate(e,t),r}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;return e.generateStorageTextureLoad(l,t,r,s,n,u)}toReadWrite(){return this.setAccess(si.READ_WRITE)}toReadOnly(){return this.setAccess(si.READ_ONLY)}toWriteOnly(){return this.setAccess(si.WRITE_ONLY)}generateStore(e){const t=e.getNodeProperties(this),{uvNode:r,storeNode:s,depthNode:i}=t,n=super.generate(e,"property"),a=r.build(e,!0===this.value.is3DTexture?"uvec3":"uvec2"),o=s.build(e,"vec4"),u=i?i.build(e,"int"):null,l=e.generateTextureStore(e,n,a,u,o);e.addLineFlowCode(l,this)}clone(){const e=super.clone();return e.storeNode=this.storeNode,e.mipLevel=this.mipLevel,e.access=this.access,e}}const Fx=nn(Bx).setParameterLength(1,3),Lx=dn(({texture:e,uv:t})=>{const r=1e-4,s=Sn().toVar();return pn(t.x.lessThan(r),()=>{s.assign(Sn(1,0,0))}).ElseIf(t.y.lessThan(r),()=>{s.assign(Sn(0,1,0))}).ElseIf(t.z.lessThan(r),()=>{s.assign(Sn(0,0,1))}).ElseIf(t.x.greaterThan(.9999),()=>{s.assign(Sn(-1,0,0))}).ElseIf(t.y.greaterThan(.9999),()=>{s.assign(Sn(0,-1,0))}).ElseIf(t.z.greaterThan(.9999),()=>{s.assign(Sn(0,0,-1))}).Else(()=>{const r=.01,i=e.sample(t.add(Sn(-.01,0,0))).r.sub(e.sample(t.add(Sn(r,0,0))).r),n=e.sample(t.add(Sn(0,-.01,0))).r.sub(e.sample(t.add(Sn(0,r,0))).r),a=e.sample(t.add(Sn(0,0,-.01))).r.sub(e.sample(t.add(Sn(0,0,r))).r);s.assign(Sn(i,n,a))}),s.normalize()});class Px extends Pl{static get type(){return"Texture3DNode"}constructor(e,t=null,r=null){super(e,t,r),this.isTexture3DNode=!0}getInputType(){return"texture3D"}getDefaultUV(){return Sn(.5,.5,.5)}setUpdateMatrix(){}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}generateOffset(e,t){return t.build(e,"ivec3")}normal(e){return Lx({texture:this,uv:e})}}const Dx=nn(Px).setParameterLength(1,3);class Ux extends Lc{static get type(){return"UserDataNode"}constructor(e,t,r=null){super(e,t,r),this.userData=r}updateReference(e){return this.reference=null!==this.userData?this.userData:e.object.userData,this.reference}}const Ix=new WeakMap;class Ox extends pi{static get type(){return"VelocityNode"}constructor(){super("vec2"),this.projectionMatrix=null,this.updateType=ti.OBJECT,this.updateAfterType=ti.OBJECT,this.previousModelWorldMatrix=Na(new a),this.previousProjectionMatrix=Na(new a).setGroup(Ta),this.previousCameraViewMatrix=Na(new a)}setProjectionMatrix(e){this.projectionMatrix=e}update({frameId:e,camera:t,object:r}){const s=kx(r);this.previousModelWorldMatrix.value.copy(s);const i=Vx(t);i.frameId!==e&&(i.frameId=e,void 0===i.previousProjectionMatrix?(i.previousProjectionMatrix=new a,i.previousCameraViewMatrix=new a,i.currentProjectionMatrix=new a,i.currentCameraViewMatrix=new a,i.previousProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){kx(e).copy(e.matrixWorld)}setup(){const e=null===this.projectionMatrix?Td:Na(this.projectionMatrix),t=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),r=e.mul(Wd).mul(Qd),s=this.previousProjectionMatrix.mul(t).mul(Yd),i=r.xy.div(r.w),n=s.xy.div(s.w);return La(i,n)}}function Vx(e){let t=Ix.get(e);return void 0===t&&(t={},Ix.set(e,t)),t}function kx(e,t=0){const r=Vx(e);let s=r[t];return void 0===s&&(r[t]=s=new a,r[t].copy(e.matrixWorld)),s}const Gx=an(Ox),$x=dn(([e])=>qx(e.rgb)),zx=dn(([e,t=fn(1)])=>t.mix(qx(e.rgb),e.rgb)),Wx=dn(([e,t=fn(1)])=>{const r=Fa(e.r,e.g,e.b).div(3),s=e.r.max(e.g.max(e.b)),i=s.sub(r).mul(t).mul(-3);return ou(e.rgb,s,i)}),Hx=dn(([e,t=fn(1)])=>{const r=Sn(.57735,.57735,.57735),s=t.cos();return Sn(e.rgb.mul(s).add(r.cross(e.rgb).mul(t.sin()).add(r.mul(Zo(r,e.rgb).mul(s.oneMinus())))))}),qx=(e,t=Sn(p.getLuminanceCoefficients(new r)))=>Zo(e,t),jx=dn(([e,t=Sn(1),s=Sn(0),i=Sn(1),n=fn(1),a=Sn(p.getLuminanceCoefficients(new r,Ee))])=>{const o=e.rgb.dot(Sn(a)),u=jo(e.rgb.mul(t).add(s),0).toVar(),l=u.pow(i).toVar();return pn(u.r.greaterThan(0),()=>{u.r.assign(l.r)}),pn(u.g.greaterThan(0),()=>{u.g.assign(l.g)}),pn(u.b.greaterThan(0),()=>{u.b.assign(l.b)}),u.assign(o.add(u.sub(o).mul(n))),wn(u.rgb,e.a)}),Xx=dn(([e,t])=>e.mul(t).floor().div(t));let Kx=null;class Qx extends Vp{static get type(){return"ViewportSharedTextureNode"}constructor(e=Kl,t=null){null===Kx&&(Kx=new Y),super(e,t,Kx)}getTextureForReference(){return Kx}updateReference(){return this}}const Yx=nn(Qx).setParameterLength(0,2),Zx=new t;class Jx extends Pl{static get type(){return"PassTextureNode"}constructor(e,t){super(t),this.passNode=e,this.isPassTextureNode=!0,this.setUpdateMatrix(!1)}setup(e){return e.getNodeProperties(this).passNode=this.passNode,super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}}class eT extends Jx{static get type(){return"PassMultipleTextureNode"}constructor(e,t,r=!1){super(e,null),this.textureName=t,this.previousTexture=r,this.isPassMultipleTextureNode=!0}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){const e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}class tT extends pi{static get type(){return"PassNode"}constructor(e,t,r,s={}){super("vec4"),this.scope=e,this.scene=t,this.camera=r,this.options=s,this._pixelRatio=1,this._width=1,this._height=1;const i=new J;i.isRenderTargetTexture=!0,i.name="depth";const n=new ae(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:_e,...s});n.texture.name="output",n.depthTexture=i,this.renderTarget=n,this.overrideMaterial=null,this.transparent=!0,this.opaque=!0,this.contextNode=null,this._contextNodeCache=null,this._textures={output:n.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Na(0),this._cameraFar=Na(0),this._mrt=null,this._layers=null,this._resolutionScale=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=ti.FRAME,this.global=!0}setResolutionScale(e){return this._resolutionScale=e,this}getResolutionScale(){return this._resolutionScale}setResolution(e){return d("PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead."),this.setResolutionScale(e)}getResolution(){return d("PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead."),this.getResolutionScale()}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];if(void 0===t){t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)}return t}getPreviousTexture(e){let t=this._previousTextures[e];return void 0===t&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){const t=this._previousTextures[e];if(void 0!==t){const r=this._textures[e],s=this.renderTarget.textures.indexOf(r);this.renderTarget.textures[s]=t,this._textures[e]=t,this._previousTextures[e]=r,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e="output"){let t=this._textureNodes[e];return void 0===t&&(t=new eT(this,e),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e="output"){let t=this._previousTextureNodes[e];return void 0===t&&(void 0===this._textureNodes[e]&&this.getTextureNode(e),t=new eT(this,e,!0),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e="depth"){let t=this._viewZNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar;this._viewZNodes[e]=t=Zp(this.getTextureNode(e),r,s)}return t}getLinearDepthNode(e="depth"){let t=this._linearDepthNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Xp(i,r,s)}return t}async compileAsync(e){const t=e.getRenderTarget(),r=e.getMRT();e.setRenderTarget(this.renderTarget),e.setMRT(this._mrt),await e.compileAsync(this.scene,this.camera),e.setRenderTarget(t),e.setMRT(r)}setup({renderer:e}){return this.renderTarget.samples=void 0===this.options.samples?e.samples:this.options.samples,this.renderTarget.texture.type=e.getOutputBufferType(),this.scope===tT.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){const{renderer:t}=e,{scene:r}=this;let s,i;const n=t.getOutputRenderTarget();n&&!0===n.isXRRenderTarget?(i=1,s=t.xr.getCamera(),t.xr.updateCamera(s),Zx.set(n.width,n.height)):(s=this.camera,i=t.getPixelRatio(),t.getSize(Zx)),this._pixelRatio=i,this.setSize(Zx.width,Zx.height);const a=t.getRenderTarget(),o=t.getMRT(),u=t.autoClear,l=t.transparent,d=t.opaque,c=s.layers.mask,h=t.contextNode,p=r.overrideMaterial;this._cameraNear.value=s.near,this._cameraFar.value=s.far,null!==this._layers&&(s.layers.mask=this._layers.mask);for(const e in this._previousTextures)this.toggleTexture(e);null!==this.overrideMaterial&&(r.overrideMaterial=this.overrideMaterial),t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.autoClear=!0,t.transparent=this.transparent,t.opaque=this.opaque,null!==this.contextNode&&(null!==this._contextNodeCache&&this._contextNodeCache.version===this.version||(this._contextNodeCache={version:this.version,context:vu({...t.contextNode.getFlowContextData(),...this.contextNode.getFlowContextData()})}),t.contextNode=this._contextNodeCache.context);const g=r.name;r.name=this.name?this.name:r.name,t.render(r,s),r.name=g,r.overrideMaterial=p,t.setRenderTarget(a),t.setMRT(o),t.autoClear=u,t.transparent=l,t.opaque=d,t.contextNode=h,s.layers.mask=c}setSize(e,t){this._width=e,this._height=t;const r=Math.floor(this._width*this._pixelRatio*this._resolutionScale),s=Math.floor(this._height*this._pixelRatio*this._resolutionScale);this.renderTarget.setSize(r,s),null!==this._scissor&&this.renderTarget.scissor.copy(this._scissor),null!==this._viewport&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,r,i){null===e?this._scissor=null:(null===this._scissor&&(this._scissor=new s),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,r,i),this._scissor.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setViewport(e,t,r,i){null===e?this._viewport=null:(null===this._viewport&&(this._viewport=new s),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,r,i),this._viewport.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}}tT.COLOR="color",tT.DEPTH="depth";class rT extends tT{static get type(){return"ToonOutlinePassNode"}constructor(e,t,r,s,i){super(tT.COLOR,e,t),this.colorNode=r,this.thicknessNode=s,this.alphaNode=i,this._materialCache=new WeakMap,this.name="Outline Pass"}updateBefore(e){const{renderer:t}=e,r=t.getRenderObjectFunction();t.setRenderObjectFunction((e,r,s,i,n,a,o,u)=>{if((n.isMeshToonMaterial||n.isMeshToonNodeMaterial)&&!1===n.wireframe){const l=this._getOutlineMaterial(n);t.renderObject(e,r,s,i,l,a,o,u)}t.renderObject(e,r,s,i,n,a,o,u)}),super.updateBefore(e),t.setRenderObjectFunction(r)}_createMaterial(){const e=new yg;e.isMeshToonOutlineMaterial=!0,e.name="Toon_Outline",e.side=L;const t=oc.negate(),r=Td.mul(Wd),s=fn(1),i=r.mul(wn(Qd,1)),n=r.mul(wn(Qd.add(t),1)),a=So(i.sub(n));return e.vertexNode=i.add(a.mul(this.thicknessNode).mul(i.w).mul(s)),e.colorNode=wn(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return void 0===t&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}}const sT=dn(([e,t])=>e.mul(t).clamp()).setLayout({name:"linearToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),iT=dn(([e,t])=>(e=e.mul(t)).div(e.add(1)).clamp()).setLayout({name:"reinhardToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),nT=dn(([e,t])=>{const r=(e=(e=e.mul(t)).sub(.004).max(0)).mul(e.mul(6.2).add(.5)),s=e.mul(e.mul(6.2).add(1.7)).add(.06);return r.div(s).pow(2.2)}).setLayout({name:"cineonToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),aT=dn(([e])=>{const t=e.mul(e.add(.0245786)).sub(90537e-9),r=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(r)}),oT=dn(([e,t])=>{const r=Ln(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),s=Ln(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=r.mul(e),e=aT(e),(e=s.mul(e)).clamp()}).setLayout({name:"acesFilmicToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),uT=Ln(Sn(1.6605,-.1246,-.0182),Sn(-.5876,1.1329,-.1006),Sn(-.0728,-.0083,1.1187)),lT=Ln(Sn(.6274,.0691,.0164),Sn(.3293,.9195,.088),Sn(.0433,.0113,.8956)),dT=dn(([e])=>{const t=Sn(e).toVar(),r=Sn(t.mul(t)).toVar(),s=Sn(r.mul(r)).toVar();return fn(15.5).mul(s.mul(r)).sub(Pa(40.14,s.mul(t))).add(Pa(31.96,s).sub(Pa(6.868,r.mul(t))).add(Pa(.4298,r).add(Pa(.1191,t).sub(.00232))))}),cT=dn(([e,t])=>{const r=Sn(e).toVar(),s=Ln(Sn(.856627153315983,.137318972929847,.11189821299995),Sn(.0951212405381588,.761241990602591,.0767994186031903),Sn(.0482516061458583,.101439036467562,.811302368396859)),i=Ln(Sn(1.1271005818144368,-.1413297634984383,-.14132976349843826),Sn(-.11060664309660323,1.157823702216272,-.11060664309660294),Sn(-.016493938717834573,-.016493938717834257,1.2519364065950405)),n=fn(-12.47393),a=fn(4.026069);return r.mulAssign(t),r.assign(lT.mul(r)),r.assign(s.mul(r)),r.assign(jo(r,1e-10)),r.assign(xo(r)),r.assign(r.sub(n).div(a.sub(n))),r.assign(uu(r,0,1)),r.assign(dT(r)),r.assign(i.mul(r)),r.assign(eu(jo(Sn(0),r),Sn(2.2))),r.assign(uT.mul(r)),r.assign(uu(r,0,1)),r}).setLayout({name:"agxToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),hT=dn(([e,t])=>{const r=fn(.76),s=fn(.15);e=e.mul(t);const i=qo(e.r,qo(e.g,e.b)),n=Tu(i.lessThan(.08),i.sub(Pa(6.25,i.mul(i))),.04);e.subAssign(n);const a=jo(e.r,jo(e.g,e.b));pn(a.lessThan(r),()=>e);const o=La(1,r),u=La(1,o.mul(o).div(a.add(o.sub(r))));e.mulAssign(u.div(a));const l=La(1,Da(1,s.mul(a.sub(u)).add(1)));return ou(e,Sn(u),l)}).setLayout({name:"neutralToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]});class pT extends di{static get type(){return"CodeNode"}constructor(e="",t=[],r=""){super("code"),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=r}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){const t=this.getIncludes(e);for(const r of t)r.build(e);const r=e.getCodeFromNode(this,this.getNodeType(e));return r.code=this.code,r.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}}const gT=nn(pT).setParameterLength(1,3);class mT extends pT{static get type(){return"FunctionNode"}constructor(e="",t=[],r=""){super(e,t,r)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){const r=this.getNodeType(e);return e.getStructTypeNode(r).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){const t=e.getDataFromNode(this);let r=t.nodeFunction;return void 0===r&&(r=e.parser.parseFunction(this.code),t.nodeFunction=r),r}generate(e,t){super.generate(e);const r=this.getNodeFunction(e),s=r.name,i=r.type,n=e.getCodeFromNode(this,i);""!==s&&(n.name=s);const a=e.getPropertyName(n),o=this.getNodeFunction(e).getCode(a);return n.code=o+"\n","property"===t?a:e.format(`${a}()`,i,t)}}const fT=(e,t=[],r="")=>{for(let e=0;es.call(...e);return i.functionNode=s,i};function yT(e){let t;const r=e.context.getViewZ;return void 0!==r&&(t=r(this)),(t||ec.z).negate()}const bT=dn(([e,t],r)=>{const s=yT(r);return cu(e,t,s)}),xT=dn(([e],t)=>{const r=yT(t);return e.mul(e,r,r).negate().exp().oneMinus()}),TT=dn(([e,t],r)=>{const s=yT(r),i=t.sub(Zd.y).max(0).toConst().mul(s).toConst();return e.mul(e,i,i).negate().exp().oneMinus()}),_T=dn(([e,t])=>wn(t.toFloat().mix(aa.rgb,e.toVec3()),aa.a));let vT=null,NT=null;class ST extends di{static get type(){return"RangeNode"}constructor(e=fn(),t=fn()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){const t=this.getConstNode(this.minNode),r=this.getConstNode(this.maxNode),s=e.getTypeLength(Xs(t.value)),i=e.getTypeLength(Xs(r.value));return s>i?s:i}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):"float"}getConstNode(e){let t=null;if(e.traverse(e=>{!0===e.isConstNode&&(t=e)}),null===t)throw new Fl('THREE.TSL: No "ConstNode" found in node graph.',this.stackTrace);return t}setup(e){const t=e.object;let r=null;if(t.count>1){const i=this.getConstNode(this.minNode),n=this.getConstNode(this.maxNode),a=i.value,o=n.value,u=e.getTypeLength(Xs(a)),d=e.getTypeLength(Xs(o));vT=vT||new s,NT=NT||new s,vT.setScalar(0),NT.setScalar(0),1===u?vT.setScalar(a):a.isColor?vT.set(a.r,a.g,a.b,1):vT.set(a.x,a.y,a.z||0,a.w||0),1===d?NT.setScalar(o):o.isColor?NT.set(o.r,o.g,o.b,1):NT.set(o.x,o.y,o.z||0,o.w||0);const c=4,h=c*t.count,p=new Float32Array(h);for(let e=0;enew ET(e,t),wT=AT("numWorkgroups","uvec3"),CT=AT("workgroupId","uvec3"),MT=AT("globalId","uvec3"),BT=AT("localId","uvec3"),FT=AT("subgroupSize","uint");class LT extends di{constructor(e){super(),this.scope=e}generate(e){const{scope:t}=this,{renderer:r}=e;!0===r.backend.isWebGLBackend?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}const PT=nn(LT);class DT extends ci{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let r;const s=e.context.assign;if(r=super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}class UT extends di{constructor(e,t,r=0){super(t),this.bufferType=t,this.bufferCount=r,this.isWorkgroupInfoNode=!0,this.elementType=t,this.scope=e,this.name=""}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setScope(e){return this.scope=e,this}getElementType(){return this.elementType}getInputType(){return`${this.scope}Array`}element(e){return new DT(this,e)}generate(e){const t=""!==this.name?this.name:`${this.scope}Array_${this.id}`;return e.getScopedArray(t,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}}class IT extends di{static get type(){return"AtomicFunctionNode"}constructor(e,t,r){super("uint"),this.method=e,this.pointerNode=t,this.valueNode=r,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){const t=e.getNodeProperties(this),r=t.parents,s=this.method,i=this.getNodeType(e),n=this.getInputType(e),a=this.pointerNode,o=this.valueNode,u=[];u.push(`&${a.build(e,n)}`),null!==o&&u.push(o.build(e,n));const l=`${e.getMethod(s,i)}( ${u.join(", ")} )`;if(!(!!r&&(1===r.length&&!0===r[0].isStackNode)))return void 0===t.constNode&&(t.constNode=fl(l,i).toConst()),t.constNode.build(e);e.addLineFlowCode(l,this)}}IT.ATOMIC_LOAD="atomicLoad",IT.ATOMIC_STORE="atomicStore",IT.ATOMIC_ADD="atomicAdd",IT.ATOMIC_SUB="atomicSub",IT.ATOMIC_MAX="atomicMax",IT.ATOMIC_MIN="atomicMin",IT.ATOMIC_AND="atomicAnd",IT.ATOMIC_OR="atomicOr",IT.ATOMIC_XOR="atomicXor";const OT=nn(IT),VT=(e,t,r)=>OT(e,t,r).toStack();class kT extends pi{static get type(){return"SubgroupFunctionNode"}constructor(e,t=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=r}getInputType(e){const t=this.aNode?this.aNode.getNodeType(e):null,r=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(r)?0:e.getTypeLength(r))?t:r}getNodeType(e){const t=this.method;return t===kT.SUBGROUP_ELECT?"bool":t===kT.SUBGROUP_BALLOT?"uvec4":this.getInputType(e)}generate(e,t){const r=this.method,s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=[];if(r===kT.SUBGROUP_BROADCAST||r===kT.SUBGROUP_SHUFFLE||r===kT.QUAD_BROADCAST){const t=a.getNodeType(e);o.push(n.build(e,s),a.build(e,"float"===t?"int":s))}else r===kT.SUBGROUP_SHUFFLE_XOR||r===kT.SUBGROUP_SHUFFLE_DOWN||r===kT.SUBGROUP_SHUFFLE_UP?o.push(n.build(e,s),a.build(e,"uint")):(null!==n&&o.push(n.build(e,i)),null!==a&&o.push(a.build(e,i)));const u=0===o.length?"()":`( ${o.join(", ")} )`;return e.format(`${e.getMethod(r,s)}${u}`,s,t)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}kT.SUBGROUP_ELECT="subgroupElect",kT.SUBGROUP_BALLOT="subgroupBallot",kT.SUBGROUP_ADD="subgroupAdd",kT.SUBGROUP_INCLUSIVE_ADD="subgroupInclusiveAdd",kT.SUBGROUP_EXCLUSIVE_AND="subgroupExclusiveAdd",kT.SUBGROUP_MUL="subgroupMul",kT.SUBGROUP_INCLUSIVE_MUL="subgroupInclusiveMul",kT.SUBGROUP_EXCLUSIVE_MUL="subgroupExclusiveMul",kT.SUBGROUP_AND="subgroupAnd",kT.SUBGROUP_OR="subgroupOr",kT.SUBGROUP_XOR="subgroupXor",kT.SUBGROUP_MIN="subgroupMin",kT.SUBGROUP_MAX="subgroupMax",kT.SUBGROUP_ALL="subgroupAll",kT.SUBGROUP_ANY="subgroupAny",kT.SUBGROUP_BROADCAST_FIRST="subgroupBroadcastFirst",kT.QUAD_SWAP_X="quadSwapX",kT.QUAD_SWAP_Y="quadSwapY",kT.QUAD_SWAP_DIAGONAL="quadSwapDiagonal",kT.SUBGROUP_BROADCAST="subgroupBroadcast",kT.SUBGROUP_SHUFFLE="subgroupShuffle",kT.SUBGROUP_SHUFFLE_XOR="subgroupShuffleXor",kT.SUBGROUP_SHUFFLE_UP="subgroupShuffleUp",kT.SUBGROUP_SHUFFLE_DOWN="subgroupShuffleDown",kT.QUAD_BROADCAST="quadBroadcast";const GT=on(kT,kT.SUBGROUP_ELECT).setParameterLength(0),$T=on(kT,kT.SUBGROUP_BALLOT).setParameterLength(1),zT=on(kT,kT.SUBGROUP_ADD).setParameterLength(1),WT=on(kT,kT.SUBGROUP_INCLUSIVE_ADD).setParameterLength(1),HT=on(kT,kT.SUBGROUP_EXCLUSIVE_AND).setParameterLength(1),qT=on(kT,kT.SUBGROUP_MUL).setParameterLength(1),jT=on(kT,kT.SUBGROUP_INCLUSIVE_MUL).setParameterLength(1),XT=on(kT,kT.SUBGROUP_EXCLUSIVE_MUL).setParameterLength(1),KT=on(kT,kT.SUBGROUP_AND).setParameterLength(1),QT=on(kT,kT.SUBGROUP_OR).setParameterLength(1),YT=on(kT,kT.SUBGROUP_XOR).setParameterLength(1),ZT=on(kT,kT.SUBGROUP_MIN).setParameterLength(1),JT=on(kT,kT.SUBGROUP_MAX).setParameterLength(1),e_=on(kT,kT.SUBGROUP_ALL).setParameterLength(0),t_=on(kT,kT.SUBGROUP_ANY).setParameterLength(0),r_=on(kT,kT.SUBGROUP_BROADCAST_FIRST).setParameterLength(2),s_=on(kT,kT.QUAD_SWAP_X).setParameterLength(1),i_=on(kT,kT.QUAD_SWAP_Y).setParameterLength(1),n_=on(kT,kT.QUAD_SWAP_DIAGONAL).setParameterLength(1),a_=on(kT,kT.SUBGROUP_BROADCAST).setParameterLength(2),o_=on(kT,kT.SUBGROUP_SHUFFLE).setParameterLength(2),u_=on(kT,kT.SUBGROUP_SHUFFLE_XOR).setParameterLength(2),l_=on(kT,kT.SUBGROUP_SHUFFLE_UP).setParameterLength(2),d_=on(kT,kT.SUBGROUP_SHUFFLE_DOWN).setParameterLength(2),c_=on(kT,kT.QUAD_BROADCAST).setParameterLength(1);let h_;function p_(e){h_=h_||new WeakMap;let t=h_.get(e);return void 0===t&&h_.set(e,t={}),t}function g_(e){const t=p_(e);return t.shadowMatrix||(t.shadowMatrix=Na("mat4").setGroup(Ta).onRenderUpdate(t=>(!0===e.castShadow&&!1!==t.renderer.shadowMap.enabled||(e.shadow.camera.coordinateSystem!==t.camera.coordinateSystem&&(e.shadow.camera.coordinateSystem=t.camera.coordinateSystem,e.shadow.camera.updateProjectionMatrix()),e.shadow.updateMatrices(e)),e.shadow.matrix)))}function m_(e,t=Zd){const r=g_(e).mul(t);return r.xyz.div(r.w)}function f_(e){const t=p_(e);return t.position||(t.position=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.matrixWorld)))}function y_(e){const t=p_(e);return t.targetPosition||(t.targetPosition=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.target.matrixWorld)))}function b_(e){const t=p_(e);return t.viewPosition||(t.viewPosition=Na(new r).setGroup(Ta).onRenderUpdate(({camera:t},s)=>{s.value=s.value||new r,s.value.setFromMatrixPosition(e.matrixWorld),s.value.applyMatrix4(t.matrixWorldInverse)}))}const x_=e=>vd.transformDirection(f_(e).sub(y_(e))),T_=(e,t)=>{for(const r of t)if(r.isAnalyticLightNode&&r.light.id===e)return r;return null},__=new WeakMap,v_=[];class N_ extends di{static get type(){return"LightsNode"}constructor(){super("vec3"),this.totalDiffuseNode=On("vec3","totalDiffuse"),this.totalSpecularNode=On("vec3","totalSpecular"),this.outgoingLightNode=On("vec3","outgoingLight"),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){const e=this._lights;for(let t=0;te.sort((e,t)=>e.id-t.id))(this._lights),i=e.renderer.library;for(const e of s)if(e.isNode)t.push(en(e));else{let s=null;if(null!==r&&(s=T_(e.id,r)),null===s){const r=i.getLightNodeClass(e.constructor);if(null===r){d(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let s=null;__.has(e)?s=__.get(e):(s=new r(e),__.set(e,s)),t.push(s)}}this._lightNodes=t}setupDirectLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.direct({...r,lightNode:t,reflectedLight:i},e)}setupDirectRectAreaLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.directRectArea({...r,lightNode:t,reflectedLight:i},e)}setupLights(e,t){for(const r of t)r.build(e)}getLightNodes(e){return null===this._lightNodes&&this.setupLightsNode(e),this._lightNodes}setup(e){const t=e.lightsNode;e.lightsNode=this;let r=this.outgoingLightNode;const s=e.context,i=s.lightingModel,n=e.getNodeProperties(this);if(i){const{totalDiffuseNode:t,totalSpecularNode:a}=this;s.outgoingLight=r;const o=e.addStack();n.nodes=o.nodes,i.start(e);const{backdrop:u,backdropAlpha:l}=s,{directDiffuse:d,directSpecular:c,indirectDiffuse:h,indirectSpecular:p}=s.reflectedLight;let g=d.add(h);null!==u&&(g=Sn(null!==l?l.mix(g,u):u)),t.assign(g),a.assign(c.add(p)),r.assign(t.add(a)),i.finish(e),r=r.bypass(e.removeStack())}else n.nodes=[];return e.lightsNode=t,r}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}}class S_ extends di{static get type(){return"ShadowBaseNode"}constructor(e){super(),this.light=e,this.updateBeforeType=ti.RENDER,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){R_.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Zd)}}const R_=On("vec3","shadowPositionWorld");function E_(t,r={}){return r.toneMapping=t.toneMapping,r.toneMappingExposure=t.toneMappingExposure,r.outputColorSpace=t.outputColorSpace,r.renderTarget=t.getRenderTarget(),r.activeCubeFace=t.getActiveCubeFace(),r.activeMipmapLevel=t.getActiveMipmapLevel(),r.renderObjectFunction=t.getRenderObjectFunction(),r.pixelRatio=t.getPixelRatio(),r.mrt=t.getMRT(),r.clearColor=t.getClearColor(r.clearColor||new e),r.clearAlpha=t.getClearAlpha(),r.autoClear=t.autoClear,r.scissorTest=t.getScissorTest(),r}function A_(e,t){return t=E_(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}function w_(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}function C_(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}function M_(e,t){return t=C_(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}function B_(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}function F_(e,t,r){return r=M_(t,r=A_(e,r))}function L_(e,t,r){w_(e,r),B_(t,r)}var P_=Object.freeze({__proto__:null,resetRendererAndSceneState:F_,resetRendererState:A_,resetSceneState:M_,restoreRendererAndSceneState:L_,restoreRendererState:w_,restoreSceneState:B_,saveRendererAndSceneState:function(e,t,r={}){return r=C_(t,r=E_(e,r))},saveRendererState:E_,saveSceneState:C_});const D_=new WeakMap,U_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r})=>{let s=Ul(e,t.xy).setName("t_basic");return e.isArrayTexture&&(s=s.depth(r)),s.compare(t.z)}),I_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Pc("radius","float",r).setGroup(Ta),o=Tn(1).div(n),u=a.mul(o.x),l=yx(Yl.xy).mul(6.28318530718);return Fa(i(t.xy.add(bx(0,5,l).mul(u)),t.z),i(t.xy.add(bx(1,5,l).mul(u)),t.z),i(t.xy.add(bx(2,5,l).mul(u)),t.z),i(t.xy.add(bx(3,5,l).mul(u)),t.z),i(t.xy.add(bx(4,5,l).mul(u)),t.z)).mul(.2)}),O_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Tn(1).div(n),o=a.x,u=a.y,l=t.xy,d=Ro(l.mul(n).add(.5));return l.subAssign(d.mul(a)),Fa(i(l,t.z),i(l.add(Tn(o,0)),t.z),i(l.add(Tn(0,u)),t.z),i(l.add(a),t.z),ou(i(l.add(Tn(o.negate(),0)),t.z),i(l.add(Tn(o.mul(2),0)),t.z),d.x),ou(i(l.add(Tn(o.negate(),u)),t.z),i(l.add(Tn(o.mul(2),u)),t.z),d.x),ou(i(l.add(Tn(0,u.negate())),t.z),i(l.add(Tn(0,u.mul(2))),t.z),d.y),ou(i(l.add(Tn(o,u.negate())),t.z),i(l.add(Tn(o,u.mul(2))),t.z),d.y),ou(ou(i(l.add(Tn(o.negate(),u.negate())),t.z),i(l.add(Tn(o.mul(2),u.negate())),t.z),d.x),ou(i(l.add(Tn(o.negate(),u.mul(2))),t.z),i(l.add(Tn(o.mul(2),u.mul(2))),t.z),d.x),d.y)).mul(1/9)}),V_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r},s)=>{let i=Ul(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(r)),i=i.rg;const n=i.x,a=jo(1e-7,i.y.mul(i.y)),o=s.renderer.reversedDepthBuffer?Xo(n,t.z):Xo(t.z,n),u=fn(1).toVar();return pn(o.notEqual(1),()=>{const e=t.z.sub(n);let r=a.div(a.add(e.mul(e)));r=uu(La(r,.3).div(.65)),u.assign(jo(o,r))}),u}),k_=e=>{let t=D_.get(e);return void 0===t&&(t=new yg,t.colorNode=wn(0,0,0,1),t.isShadowPassMaterial=!0,t.name="ShadowMaterial",t.blending=se,t.fog=!1,D_.set(e,t)),t},G_=e=>{const t=D_.get(e);void 0!==t&&(t.dispose(),D_.delete(e))},$_=new fy,z_=[],W_=(e,t,r,s)=>{z_[0]=e,z_[1]=t;let i=$_.get(z_);return void 0!==i&&i.shadowType===r&&i.useVelocity===s||(i=(i,n,a,o,u,l,...d)=>{(!0===i.castShadow||i.receiveShadow&&r===tt)&&(s&&(Qs(i).useVelocity=!0),i.onBeforeShadow(e,i,a,t.camera,o,n.overrideMaterial,l),e.renderObject(i,n,a,o,u,l,...d),i.onAfterShadow(e,i,a,t.camera,o,n.overrideMaterial,l))},i.shadowType=r,i.useVelocity=s,$_.set(z_,i)),z_[0]=null,z_[1]=null,i},H_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanVertical"),a=fn(0).toVar("squareMeanVertical"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(0,l).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),d=d.x,n.addAssign(d),a.addAssign(d.mul(d))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),q_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanHorizontal"),a=fn(0).toVar("squareMeanHorizontal"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(l,0).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),n.addAssign(d.x),a.addAssign(Fa(d.y.mul(d.y),d.x.mul(d.x)))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),j_=[U_,I_,O_,V_];let X_;const K_=new dx;class Q_ extends S_{static get type(){return"ShadowNode"}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._currentShadowType=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n}){const a=s.x.greaterThanEqual(0).and(s.x.lessThanEqual(1)).and(s.y.greaterThanEqual(0)).and(s.y.lessThanEqual(1)).and(s.z.lessThanEqual(1)),o=t({depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n});return a.select(o,fn(1))}setupShadowCoord(e,t){const{shadow:r}=this,{renderer:s}=e,i=r.biasNode||Pc("bias","float",r).setGroup(Ta);let n,a=t;if(r.camera.isOrthographicCamera||!0!==s.logarithmicDepthBuffer)a=a.xyz.div(a.w),n=a.z;else{const e=a.w;a=a.xy.div(e);const t=Pc("near","float",r.camera).setGroup(Ta),s=Pc("far","float",r.camera).setGroup(Ta);n=Jp(e.negate(),t,s)}return a=Sn(a.x,a.y.oneMinus(),s.reversedDepthBuffer?n.sub(i):n.add(i)),a}getShadowFilterFn(e){return j_[e]}setupRenderTarget(e,t){const r=new J(e.mapSize.width,e.mapSize.height);r.name="ShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return s.texture.name="ShadowMap",s.texture.type=e.mapType,s.depthTexture=r,{shadowMap:s,depthTexture:r}}setupShadow(e){const{renderer:t,camera:r}=e,{light:s,shadow:i}=this,{depthTexture:n,shadowMap:a}=this.setupRenderTarget(i,e),o=t.shadowMap.type,u=t.hasCompatibility(E.TEXTURE_COMPARE);if(o!==Je&&o!==et||!u?(n.minFilter=B,n.magFilter=B):(n.minFilter=de,n.magFilter=de),i.camera.coordinateSystem=r.coordinateSystem,i.camera.updateProjectionMatrix(),o===tt&&!0!==i.isPointLightShadow){n.compareFunction=null,a.depth>1?(a._vsmShadowMapVertical||(a._vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapVertical.texture.name="VSMVertical"),this.vsmShadowMapVertical=a._vsmShadowMapVertical,a._vsmShadowMapHorizontal||(a._vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapHorizontal.texture.name="VSMHorizontal"),this.vsmShadowMapHorizontal=a._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}));let t=Ul(n);n.isArrayTexture&&(t=t.depth(this.depthLayer));let r=Ul(this.vsmShadowMapVertical.texture);n.isArrayTexture&&(r=r.depth(this.depthLayer));const s=Pc("blurSamples","float",i).setGroup(Ta),o=Pc("radius","float",i).setGroup(Ta),u=Pc("mapSize","vec2",i).setGroup(Ta);let l=this.vsmMaterialVertical||(this.vsmMaterialVertical=new yg);l.fragmentNode=H_({samples:s,radius:o,size:u,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMVertical",l=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new yg),l.fragmentNode=q_({samples:s,radius:o,size:u,shadowPass:r,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMHorizontal"}const l=Pc("intensity","float",i).setGroup(Ta),d=Pc("normalBias","float",i).setGroup(Ta),c=g_(s).mul(R_.add(hc.mul(d))),h=this.setupShadowCoord(e,c),p=i.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(null===p)throw new Error("THREE.WebGPURenderer: Shadow map type not supported yet.");const g=o===tt&&!0!==i.isPointLightShadow?this.vsmShadowMapHorizontal.texture:n,m=this.setupShadowFilter(e,{filterFn:p,shadowTexture:a.texture,depthTexture:g,shadowCoord:h,shadow:i,depthLayer:this.depthLayer});let f,y;!0===t.shadowMap.transmitted&&(a.texture.isCubeTexture?f=Bc(a.texture,h.xyz):(f=Ul(a.texture,h),n.isArrayTexture&&(f=f.depth(this.depthLayer)))),y=f?ou(1,m.rgb.mix(f,1),l.mul(f.a)).toVar():ou(1,m,l).toVar(),this.shadowMap=a,this.shadow.map=a;const b=`${this.light.type} Shadow [ ${this.light.name||"ID: "+this.light.id} ]`;return f&&y.toInspector(`${b} / Color`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture):Ul(this.shadowMap.texture)),y.toInspector(`${b} / Depth`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture).r.oneMinus():Il(this.shadowMap.depthTexture,Al().mul(Cl(Ul(this.shadowMap.depthTexture)))).r.oneMinus())}setup(e){if(!1!==e.renderer.shadowMap.enabled)return dn(()=>{const t=e.renderer.shadowMap.type;this._currentShadowType!==t&&(this._reset(),this._node=null);let r=this._node;return this.setupShadowPosition(e),null===r&&(this._node=r=this.setupShadow(e),this._currentShadowType=t),e.material.receivedShadowNode&&(r=e.material.receivedShadowNode(r)),r})()}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e;t.updateMatrices(s),r.setSize(t.mapSize.width,t.mapSize.height,r.depth);const a=n.name;n.name=`Shadow Map [ ${s.name||"ID: "+s.id} ]`,i.render(n,t.camera),n.name=a}updateShadow(e){const{shadowMap:t,light:r,shadow:s}=this,{renderer:i,scene:n,camera:a}=e,o=i.shadowMap.type,u=t.depthTexture.version;this._depthVersionCached=u;const l=s.camera.layers.mask;4294967294&s.camera.layers.mask||(s.camera.layers.mask=a.layers.mask);const d=i.getRenderObjectFunction(),c=i.getMRT(),h=!!c&&c.has("velocity");X_=F_(i,n,X_),n.overrideMaterial=k_(r),i.setRenderObjectFunction(W_(i,s,o,h)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(d),o===tt&&!0!==s.isPointLightShadow&&this.vsmPass(i),s.camera.layers.mask=l,L_(i,n,X_)}vsmPass(e){const{shadow:t}=this,r=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,r),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,r),e.setRenderTarget(this.vsmShadowMapVertical),K_.material=this.vsmMaterialVertical,K_.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),K_.material=this.vsmMaterialHorizontal,K_.render(e)}dispose(){this._reset(),super.dispose()}_reset(){this._currentShadowType=null,G_(this.light),this.shadowMap&&(this.shadowMap.dispose(),this.shadowMap=null),null!==this.vsmShadowMapVertical&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),null!==this.vsmShadowMapHorizontal&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null)}updateBefore(e){const{shadow:t}=this;let r=t.needsUpdate||t.autoUpdate;r&&(this._cameraFrameId[e.camera]===e.frameId&&(r=!1),this._cameraFrameId[e.camera]=e.frameId),r&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}}const Y_=(e,t)=>new Q_(e,t),Z_=new e,J_=new a,ev=new r,tv=new r,rv=[new r(1,0,0),new r(-1,0,0),new r(0,-1,0),new r(0,1,0),new r(0,0,1),new r(0,0,-1)],sv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,-1),new r(0,0,1),new r(0,-1,0),new r(0,-1,0)],iv=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],nv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],av=dn(({depthTexture:e,bd3D:t,dp:r})=>Bc(e,t).compare(r)),ov=dn(({depthTexture:e,bd3D:t,dp:r,shadow:s})=>{const i=Pc("radius","float",s).setGroup(Ta),n=Pc("mapSize","vec2",s).setGroup(Ta),a=i.div(n.x),o=Fo(t),u=So(Jo(t,o.x.greaterThan(o.z).select(Sn(0,1,0),Sn(1,0,0)))),l=Jo(t,u),d=yx(Yl.xy).mul(6.28318530718),c=bx(0,5,d),h=bx(1,5,d),p=bx(2,5,d),g=bx(3,5,d),m=bx(4,5,d);return Bc(e,t.add(u.mul(c.x).add(l.mul(c.y)).mul(a))).compare(r).add(Bc(e,t.add(u.mul(h.x).add(l.mul(h.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(p.x).add(l.mul(p.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(g.x).add(l.mul(g.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(m.x).add(l.mul(m.y)).mul(a))).compare(r)).mul(.2)}),uv=dn(({filterFn:e,depthTexture:t,shadowCoord:r,shadow:s},i)=>{const n=r.xyz.toConst(),a=n.abs().toConst(),o=a.x.max(a.y).max(a.z),u=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.near),l=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.far),d=Pc("bias","float",s).setGroup(Ta),c=fn(1).toVar();return pn(o.sub(l).lessThanEqual(0).and(o.sub(u).greaterThanEqual(0)),()=>{let r;i.renderer.reversedDepthBuffer?(r=Yp(o.negate(),u,l),r.subAssign(d)):(r=Qp(o.negate(),u,l),r.addAssign(d));const a=n.normalize();c.assign(e({depthTexture:t,bd3D:a,dp:r,shadow:s}))}),c});class lv extends Q_{static get type(){return"PointShadowNode"}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return e===rt?av:ov}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i}){return uv({filterFn:t,depthTexture:r,shadowCoord:s,shadow:i})}setupRenderTarget(e,t){const r=new st(e.mapSize.width);r.name="PointShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createCubeRenderTarget(e.mapSize.width);return s.texture.name="PointShadowMap",s.depthTexture=r,{shadowMap:s,depthTexture:r}}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e,a=t.camera,o=t.matrix,u=i.coordinateSystem===h,l=u?rv:iv,d=u?sv:nv;r.setSize(t.mapSize.width,t.mapSize.width);const c=i.autoClear,p=i.getClearColor(Z_),g=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha);for(let e=0;e<6;e++){i.setRenderTarget(r,e),i.clear();const u=s.distance||a.far;u!==a.far&&(a.far=u,a.updateProjectionMatrix()),ev.setFromMatrixPosition(s.matrixWorld),a.position.copy(ev),tv.copy(a.position),tv.add(l[e]),a.up.copy(d[e]),a.lookAt(tv),a.updateMatrixWorld(),o.makeTranslation(-ev.x,-ev.y,-ev.z),J_.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),t._frustum.setFromProjectionMatrix(J_,a.coordinateSystem,a.reversedDepth);const c=n.name;n.name=`Point Light Shadow [ ${s.name||"ID: "+s.id} ] - Face ${e+1}`,i.render(n,a),n.name=c}i.autoClear=c,i.setClearColor(p,g)}}const dv=(e,t)=>new lv(e,t);class cv extends Lp{static get type(){return"AnalyticLightNode"}constructor(t=null){super(),this.light=t,this.color=new e,this.colorNode=t&&t.colorNode||Na(this.color).setGroup(Ta),this.baseColorNode=null,this.shadowNode=null,this.shadowColorNode=null,this.isAnalyticLightNode=!0,this.updateType=ti.FRAME,t&&t.shadow&&(this._shadowDisposeListener=()=>{this.disposeShadow()},t.addEventListener("dispose",this._shadowDisposeListener))}dispose(){this._shadowDisposeListener&&this.light.removeEventListener("dispose",this._shadowDisposeListener),super.dispose()}disposeShadow(){null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null),this.shadowColorNode=null,null!==this.baseColorNode&&(this.colorNode=this.baseColorNode,this.baseColorNode=null)}getHash(){return this.light.uuid}getLightVector(e){return b_(this.light).sub(e.context.positionView||ec)}setupDirect(){}setupDirectRectArea(){}setupShadowNode(){return Y_(this.light)}setupShadow(e){const{renderer:t}=e;if(!1===t.shadowMap.enabled)return;let r=this.shadowColorNode;if(null===r){const e=this.light.shadow.shadowNode;let t;t=void 0!==e?en(e):this.setupShadowNode(),this.shadowNode=t,this.shadowColorNode=r=this.colorNode.mul(t),this.baseColorNode=this.colorNode}e.context.getShadow&&(r=e.context.getShadow(this,e)),this.colorNode=r}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null,this.shadowColorNode=null);const t=this.setupDirect(e),r=this.setupDirectRectArea(e);t&&e.lightsNode.setupDirectLight(e,this,t),r&&e.lightsNode.setupDirectRectAreaLight(e,this,r)}update(){const{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}}const hv=dn(({lightDistance:e,cutoffDistance:t,decayExponent:r})=>{const s=e.pow(r).max(.01).reciprocal();return t.greaterThan(0).select(s.mul(e.div(t).pow4().oneMinus().clamp().pow2()),s)}),pv=({color:e,lightVector:t,cutoffDistance:r,decayExponent:s})=>{const i=t.normalize(),n=t.length(),a=hv({lightDistance:n,cutoffDistance:r,decayExponent:s});return{lightDirection:i,lightColor:e.mul(a)}};class gv extends cv{static get type(){return"PointLightNode"}constructor(e=null){super(e),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(2).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setupShadowNode(){return dv(this.light)}setupDirect(e){return pv({color:this.colorNode,lightVector:this.getLightVector(e),cutoffDistance:this.cutoffDistanceNode,decayExponent:this.decayExponentNode})}}const mv=dn(([e=Al()])=>{const t=e.mul(2),r=t.x.floor(),s=t.y.floor();return r.add(s).mod(2).sign()}),fv=dn(([e=Al()],{renderer:t,material:r})=>{const s=au(e.mul(2).sub(1));let i;if(r.alphaToCoverage&&t.currentSamples>0){const e=fn(s.fwidth()).toVar();i=cu(e.oneMinus(),e.add(1),s).oneMinus()}else i=Tu(s.greaterThan(1),0,1);return i}),yv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=xn(e).toVar();return Tu(n,i,s)}).setLayout({name:"mx_select",type:"float",inputs:[{name:"b",type:"bool"},{name:"t",type:"float"},{name:"f",type:"float"}]}),bv=dn(([e,t])=>{const r=xn(t).toVar(),s=fn(e).toVar();return Tu(r,s.negate(),s)}).setLayout({name:"mx_negate_if",type:"float",inputs:[{name:"val",type:"float"},{name:"b",type:"bool"}]}),xv=dn(([e])=>{const t=fn(e).toVar();return yn(vo(t))}).setLayout({name:"mx_floor",type:"int",inputs:[{name:"x",type:"float"}]}),Tv=dn(([e,t])=>{const r=fn(e).toVar();return t.assign(xv(r)),r.sub(fn(t))}),_v=Db([dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=fn(s).toVar(),l=fn(r).toVar(),d=fn(t).toVar(),c=fn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"}]}),dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=Sn(s).toVar(),l=Sn(r).toVar(),d=Sn(t).toVar(),c=Sn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"}]})]),vv=Db([dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=fn(o).toVar(),m=fn(a).toVar(),f=fn(n).toVar(),y=fn(i).toVar(),b=fn(s).toVar(),x=fn(r).toVar(),T=fn(t).toVar(),_=fn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"v4",type:"float"},{name:"v5",type:"float"},{name:"v6",type:"float"},{name:"v7",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]}),dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=Sn(o).toVar(),m=Sn(a).toVar(),f=Sn(n).toVar(),y=Sn(i).toVar(),b=Sn(s).toVar(),x=Sn(r).toVar(),T=Sn(t).toVar(),_=Sn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"v4",type:"vec3"},{name:"v5",type:"vec3"},{name:"v6",type:"vec3"},{name:"v7",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]})]),Nv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=bn(e).toVar(),a=bn(n.bitAnd(bn(7))).toVar(),o=fn(yv(a.lessThan(bn(4)),i,s)).toVar(),u=fn(Pa(2,yv(a.lessThan(bn(4)),s,i))).toVar();return bv(o,xn(a.bitAnd(bn(1)))).add(bv(u,xn(a.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_0",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Sv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=bn(e).toVar(),u=bn(o.bitAnd(bn(15))).toVar(),l=fn(yv(u.lessThan(bn(8)),a,n)).toVar(),d=fn(yv(u.lessThan(bn(4)),n,yv(u.equal(bn(12)).or(u.equal(bn(14))),a,i))).toVar();return bv(l,xn(u.bitAnd(bn(1)))).add(bv(d,xn(u.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_1",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),Rv=Db([Nv,Sv]),Ev=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=En(e).toVar();return Sn(Rv(n.x,i,s),Rv(n.y,i,s),Rv(n.z,i,s))}).setLayout({name:"mx_gradient_vec3_0",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Av=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=En(e).toVar();return Sn(Rv(o.x,a,n,i),Rv(o.y,a,n,i),Rv(o.z,a,n,i))}).setLayout({name:"mx_gradient_vec3_1",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),wv=Db([Ev,Av]),Cv=dn(([e])=>{const t=fn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Mv=dn(([e])=>{const t=fn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Bv=Db([Cv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Fv=Db([Mv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Lv=dn(([e,t])=>{const r=yn(t).toVar(),s=bn(e).toVar();return s.shiftLeft(r).bitOr(s.shiftRight(yn(32).sub(r)))}).setLayout({name:"mx_rotl32",type:"uint",inputs:[{name:"x",type:"uint"},{name:"k",type:"int"}]}),Pv=dn(([e,t,r])=>{e.subAssign(r),e.bitXorAssign(Lv(r,yn(4))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(6))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(8))),t.addAssign(e),e.subAssign(r),e.bitXorAssign(Lv(r,yn(16))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(19))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(4))),t.addAssign(e)}),Dv=dn(([e,t,r])=>{const s=bn(r).toVar(),i=bn(t).toVar(),n=bn(e).toVar();return s.bitXorAssign(i),s.subAssign(Lv(i,yn(14))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(11))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(25))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(16))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(4))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(14))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(24))),s}).setLayout({name:"mx_bjfinal",type:"uint",inputs:[{name:"a",type:"uint"},{name:"b",type:"uint"},{name:"c",type:"uint"}]}),Uv=dn(([e])=>{const t=bn(e).toVar();return fn(t).div(fn(bn(yn(4294967295))))}).setLayout({name:"mx_bits_to_01",type:"float",inputs:[{name:"bits",type:"uint"}]}),Iv=dn(([e])=>{const t=fn(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:"mx_fade",type:"float",inputs:[{name:"t",type:"float"}]}),Ov=Db([dn(([e])=>{const t=yn(e).toVar(),r=bn(bn(1)).toVar(),s=bn(bn(yn(3735928559)).add(r.shiftLeft(bn(2))).add(bn(13))).toVar();return Dv(s.add(bn(t)),s,s)}).setLayout({name:"mx_hash_int_0",type:"uint",inputs:[{name:"x",type:"int"}]}),dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(bn(2)).toVar(),n=bn().toVar(),a=bn().toVar(),o=bn().toVar();return n.assign(a.assign(o.assign(bn(yn(3735928559)).add(i.shiftLeft(bn(2))).add(bn(13))))),n.addAssign(bn(s)),a.addAssign(bn(r)),Dv(n,a,o)}).setLayout({name:"mx_hash_int_1",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(bn(3)).toVar(),o=bn().toVar(),u=bn().toVar(),l=bn().toVar();return o.assign(u.assign(l.assign(bn(yn(3735928559)).add(a.shiftLeft(bn(2))).add(bn(13))))),o.addAssign(bn(n)),u.addAssign(bn(i)),l.addAssign(bn(s)),Dv(o,u,l)}).setLayout({name:"mx_hash_int_2",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]}),dn(([e,t,r,s])=>{const i=yn(s).toVar(),n=yn(r).toVar(),a=yn(t).toVar(),o=yn(e).toVar(),u=bn(bn(4)).toVar(),l=bn().toVar(),d=bn().toVar(),c=bn().toVar();return l.assign(d.assign(c.assign(bn(yn(3735928559)).add(u.shiftLeft(bn(2))).add(bn(13))))),l.addAssign(bn(o)),d.addAssign(bn(a)),c.addAssign(bn(n)),Pv(l,d,c),l.addAssign(bn(i)),Dv(l,d,c)}).setLayout({name:"mx_hash_int_3",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"}]}),dn(([e,t,r,s,i])=>{const n=yn(i).toVar(),a=yn(s).toVar(),o=yn(r).toVar(),u=yn(t).toVar(),l=yn(e).toVar(),d=bn(bn(5)).toVar(),c=bn().toVar(),h=bn().toVar(),p=bn().toVar();return c.assign(h.assign(p.assign(bn(yn(3735928559)).add(d.shiftLeft(bn(2))).add(bn(13))))),c.addAssign(bn(l)),h.addAssign(bn(u)),p.addAssign(bn(o)),Pv(c,h,p),c.addAssign(bn(a)),h.addAssign(bn(n)),Dv(c,h,p)}).setLayout({name:"mx_hash_int_4",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"},{name:"yy",type:"int"}]})]),Vv=Db([dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(Ov(s,r)).toVar(),n=En().toVar();return n.x.assign(i.bitAnd(yn(255))),n.y.assign(i.shiftRight(yn(8)).bitAnd(yn(255))),n.z.assign(i.shiftRight(yn(16)).bitAnd(yn(255))),n}).setLayout({name:"mx_hash_vec3_0",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(Ov(n,i,s)).toVar(),o=En().toVar();return o.x.assign(a.bitAnd(yn(255))),o.y.assign(a.shiftRight(yn(8)).bitAnd(yn(255))),o.z.assign(a.shiftRight(yn(16)).bitAnd(yn(255))),o}).setLayout({name:"mx_hash_vec3_1",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]})]),kv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=fn(_v(Rv(Ov(r,s),i,n),Rv(Ov(r.add(yn(1)),s),i.sub(1),n),Rv(Ov(r,s.add(yn(1))),i,n.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=fn(vv(Rv(Ov(r,s,i),n,a,o),Rv(Ov(r.add(yn(1)),s,i),n.sub(1),a,o),Rv(Ov(r,s.add(yn(1)),i),n,a.sub(1),o),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),Rv(Ov(r,s,i.add(yn(1))),n,a,o.sub(1)),Rv(Ov(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),Rv(Ov(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"}]})]),Gv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=Sn(_v(wv(Vv(r,s),i,n),wv(Vv(r.add(yn(1)),s),i.sub(1),n),wv(Vv(r,s.add(yn(1))),i,n.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=Sn(vv(wv(Vv(r,s,i),n,a,o),wv(Vv(r.add(yn(1)),s,i),n.sub(1),a,o),wv(Vv(r,s.add(yn(1)),i),n,a.sub(1),o),wv(Vv(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),wv(Vv(r,s,i.add(yn(1))),n,a,o.sub(1)),wv(Vv(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),wv(Vv(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"}]})]),$v=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Uv(Ov(r))}).setLayout({name:"mx_cell_noise_float_0",type:"float",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Uv(Ov(r,s))}).setLayout({name:"mx_cell_noise_float_1",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Uv(Ov(r,s,i))}).setLayout({name:"mx_cell_noise_float_2",type:"float",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Uv(Ov(r,s,i,n))}).setLayout({name:"mx_cell_noise_float_3",type:"float",inputs:[{name:"p",type:"vec4"}]})]),zv=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Sn(Uv(Ov(r,yn(0))),Uv(Ov(r,yn(1))),Uv(Ov(r,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Sn(Uv(Ov(r,s,yn(0))),Uv(Ov(r,s,yn(1))),Uv(Ov(r,s,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Sn(Uv(Ov(r,s,i,yn(0))),Uv(Ov(r,s,i,yn(1))),Uv(Ov(r,s,i,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_2",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Sn(Uv(Ov(r,s,i,n,yn(0))),Uv(Ov(r,s,i,n,yn(1))),Uv(Ov(r,s,i,n,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_3",type:"vec3",inputs:[{name:"p",type:"vec4"}]})]),Wv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=fn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(kv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_float",type:"float",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Hv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(Gv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_vec3",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),qv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar();return Tn(Wv(o,a,n,i),Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i))}).setLayout({name:"mx_fractal_noise_vec2",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),jv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(Hv(o,a,n,i)).toVar(),l=fn(Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i)).toVar();return wn(u,l)}).setLayout({name:"mx_fractal_noise_vec4",type:"vec4",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Xv=Db([dn(([e,t,r,s,i,n,a])=>{const o=yn(a).toVar(),u=fn(n).toVar(),l=yn(i).toVar(),d=yn(s).toVar(),c=yn(r).toVar(),h=yn(t).toVar(),p=Tn(e).toVar(),g=Sn(zv(Tn(h.add(d),c.add(l)))).toVar(),m=Tn(g.x,g.y).toVar();m.subAssign(.5),m.mulAssign(u),m.addAssign(.5);const f=Tn(Tn(fn(h),fn(c)).add(m)).toVar(),y=Tn(f.sub(p)).toVar();return pn(o.equal(yn(2)),()=>Fo(y.x).add(Fo(y.y))),pn(o.equal(yn(3)),()=>jo(Fo(y.x),Fo(y.y))),Zo(y,y)}).setLayout({name:"mx_worley_distance_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),dn(([e,t,r,s,i,n,a,o,u])=>{const l=yn(u).toVar(),d=fn(o).toVar(),c=yn(a).toVar(),h=yn(n).toVar(),p=yn(i).toVar(),g=yn(s).toVar(),m=yn(r).toVar(),f=yn(t).toVar(),y=Sn(e).toVar(),b=Sn(zv(Sn(f.add(p),m.add(h),g.add(c)))).toVar();b.subAssign(.5),b.mulAssign(d),b.addAssign(.5);const x=Sn(Sn(fn(f),fn(m),fn(g)).add(b)).toVar(),T=Sn(x.sub(y)).toVar();return pn(l.equal(yn(2)),()=>Fo(T.x).add(Fo(T.y)).add(Fo(T.z))),pn(l.equal(yn(3)),()=>jo(Fo(T.x),Fo(T.y),Fo(T.z))),Zo(T,T)}).setLayout({name:"mx_worley_distance_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"zoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Kv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();l.assign(qo(l,r))})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Qv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.y.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec2_0",type:"vec2",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Yv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(r)}).ElseIf(r.lessThan(l.z),()=>{l.z.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Zv=Db([Kv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();d.assign(qo(d,n))})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Jv=Db([Qv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.y.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec2_1",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),eN=Db([Yv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.z.assign(d.y),d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.z.assign(d.y),d.y.assign(n)}).ElseIf(n.lessThan(d.z),()=>{d.z.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),tN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Tn(t).toVar(),p=Tn(r).toVar(),g=Tn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(Sn(v,0),x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise2d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"texcoord",type:"vec2"},{name:"freq",type:"vec2"},{name:"offset",type:"vec2"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),rN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Sn(t).toVar(),p=Sn(r).toVar(),g=Sn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(v,x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise3d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"position",type:"vec3"},{name:"freq",type:"vec3"},{name:"offset",type:"vec3"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),sN=dn(([e])=>{const t=e.y,r=e.z,s=Sn().toVar();return pn(t.lessThan(1e-4),()=>{s.assign(Sn(r,r,r))}).Else(()=>{let i=e.x;i=i.sub(vo(i)).mul(6).toVar();const n=yn(Go(i)),a=i.sub(fn(n)),o=r.mul(t.oneMinus()),u=r.mul(t.mul(a).oneMinus()),l=r.mul(t.mul(a.oneMinus()).oneMinus());pn(n.equal(yn(0)),()=>{s.assign(Sn(r,l,o))}).ElseIf(n.equal(yn(1)),()=>{s.assign(Sn(u,r,o))}).ElseIf(n.equal(yn(2)),()=>{s.assign(Sn(o,r,l))}).ElseIf(n.equal(yn(3)),()=>{s.assign(Sn(o,u,r))}).ElseIf(n.equal(yn(4)),()=>{s.assign(Sn(l,o,r))}).Else(()=>{s.assign(Sn(r,o,u))})}),s}).setLayout({name:"mx_hsvtorgb",type:"vec3",inputs:[{name:"hsv",type:"vec3"}]}),iN=dn(([e])=>{const t=Sn(e).toVar(),r=fn(t.x).toVar(),s=fn(t.y).toVar(),i=fn(t.z).toVar(),n=fn(qo(r,qo(s,i))).toVar(),a=fn(jo(r,jo(s,i))).toVar(),o=fn(a.sub(n)).toVar(),u=fn().toVar(),l=fn().toVar(),d=fn().toVar();return d.assign(a),pn(a.greaterThan(0),()=>{l.assign(o.div(a))}).Else(()=>{l.assign(0)}),pn(l.lessThanEqual(0),()=>{u.assign(0)}).Else(()=>{pn(r.greaterThanEqual(a),()=>{u.assign(s.sub(i).div(o))}).ElseIf(s.greaterThanEqual(a),()=>{u.assign(Fa(2,i.sub(r).div(o)))}).Else(()=>{u.assign(Fa(4,r.sub(s).div(o)))}),u.mulAssign(1/6),pn(u.lessThan(0),()=>{u.addAssign(1)})}),Sn(u,l,d)}).setLayout({name:"mx_rgbtohsv",type:"vec3",inputs:[{name:"c",type:"vec3"}]}),nN=dn(([e])=>{const t=Sn(e).toVar(),r=An(ka(t,Sn(.04045))).toVar(),s=Sn(t.div(12.92)).toVar(),i=Sn(eu(jo(t.add(Sn(.055)),Sn(0)).div(1.055),Sn(2.4))).toVar();return ou(s,i,r)}).setLayout({name:"mx_srgb_texture_to_lin_rec709",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),aN=(e,t)=>{e=fn(e),t=fn(t);const r=Tn(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return cu(e.sub(r),e.add(r),t)},oN=(e,t,r,s)=>ou(e,t,r[s].clamp()),uN=(e,t,r,s,i)=>ou(e,t,aN(r,s[i])),lN=dn(([e,t,r])=>{const s=So(e).toVar(),i=La(fn(.5).mul(t.sub(r)),Zd).div(s).toVar(),n=La(fn(-.5).mul(t.sub(r)),Zd).div(s).toVar(),a=Sn().toVar();a.x=s.x.greaterThan(fn(0)).select(i.x,n.x),a.y=s.y.greaterThan(fn(0)).select(i.y,n.y),a.z=s.z.greaterThan(fn(0)).select(i.z,n.z);const o=qo(a.x,a.y,a.z).toVar();return Zd.add(s.mul(o)).toVar().sub(r)}),dN=dn(([e,t])=>{const r=e.x,s=e.y,i=e.z;let n=t.element(0).mul(.886227);return n=n.add(t.element(1).mul(1.023328).mul(s)),n=n.add(t.element(2).mul(1.023328).mul(i)),n=n.add(t.element(3).mul(1.023328).mul(r)),n=n.add(t.element(4).mul(.858086).mul(r).mul(s)),n=n.add(t.element(5).mul(.858086).mul(s).mul(i)),n=n.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),n=n.add(t.element(7).mul(.858086).mul(r).mul(i)),n=n.add(t.element(8).mul(.429043).mul(Pa(r,r).sub(Pa(s,s)))),n});var cN=Object.freeze({__proto__:null,BRDF_GGX:tm,BRDF_Lambert:kg,BasicPointShadowFilter:av,BasicShadowFilter:U_,Break:Ap,Const:Bu,Continue:()=>fl("continue").toStack(),DFGLUT:im,D_GGX:Zg,Discard:yl,EPSILON:no,F_Schlick:Vg,Fn:dn,HALF_PI:co,INFINITY:ao,If:pn,Loop:Ep,NodeAccess:si,NodeShaderStage:ei,NodeType:ri,NodeUpdateType:ti,OnBeforeMaterialUpdate:e=>_x(Tx.BEFORE_MATERIAL,e),OnBeforeObjectUpdate:e=>_x(Tx.BEFORE_OBJECT,e),OnMaterialUpdate:e=>_x(Tx.MATERIAL,e),OnObjectUpdate:e=>_x(Tx.OBJECT,e),PCFShadowFilter:I_,PCFSoftShadowFilter:O_,PI:oo,PI2:uo,PointShadowFilter:ov,Return:()=>fl("return").toStack(),Schlick_to_F0:om,ShaderNode:Ji,Stack:gn,Switch:(...e)=>Ni.Switch(...e),TBNViewMatrix:oh,TWO_PI:lo,VSMShadowFilter:V_,V_GGX_SmithCorrelated:Qg,Var:Mu,VarIntent:Fu,abs:Fo,acesFilmicToneMapping:oT,acos:Mo,add:Fa,addMethodChaining:Ri,addNodeElement:function(e){d("TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add",e)},agxToneMapping:cT,all:ho,alphaT:Zn,and:za,anisotropy:Jn,anisotropyB:ta,anisotropyT:ea,any:po,append:e=>(d("TSL: append() has been renamed to Stack().",new Us),gn(e)),array:Ra,arrayBuffer:e=>new _i(e,"ArrayBuffer"),asin:Co,assign:Aa,atan:Bo,atomicAdd:(e,t)=>VT(IT.ATOMIC_ADD,e,t),atomicAnd:(e,t)=>VT(IT.ATOMIC_AND,e,t),atomicFunc:VT,atomicLoad:e=>VT(IT.ATOMIC_LOAD,e,null),atomicMax:(e,t)=>VT(IT.ATOMIC_MAX,e,t),atomicMin:(e,t)=>VT(IT.ATOMIC_MIN,e,t),atomicOr:(e,t)=>VT(IT.ATOMIC_OR,e,t),atomicStore:(e,t)=>VT(IT.ATOMIC_STORE,e,t),atomicSub:(e,t)=>VT(IT.ATOMIC_SUB,e,t),atomicXor:(e,t)=>VT(IT.ATOMIC_XOR,e,t),attenuationColor:ga,attenuationDistance:pa,attribute:El,attributeArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new Nx(e,r,s);return up(i,t,e)},backgroundBlurriness:wx,backgroundIntensity:Cx,backgroundRotation:Mx,batch:_p,bentNormalView:lh,billboarding:Gb,bitAnd:ja,bitNot:Xa,bitOr:Ka,bitXor:Qa,bitangentGeometry:sh,bitangentLocal:ih,bitangentView:nh,bitangentWorld:ah,bitcast:pb,blendBurn:dg,blendColor:gg,blendDodge:cg,blendOverlay:pg,blendScreen:hg,blur:uf,bool:xn,buffer:Vl,bufferAttribute:tl,builtin:Wl,builtinAOContext:Eu,builtinShadowContext:Ru,bumpMap:yh,bvec2:Nn,bvec3:An,bvec4:Bn,bypass:cl,cache:ll,call:Ca,cameraFar:xd,cameraIndex:yd,cameraNear:bd,cameraNormalMatrix:Sd,cameraPosition:Rd,cameraProjectionMatrix:Td,cameraProjectionMatrixInverse:_d,cameraViewMatrix:vd,cameraViewport:Ed,cameraWorldMatrix:Nd,cbrt:nu,cdl:jx,ceil:No,checker:mv,cineonToneMapping:nT,clamp:uu,clearcoat:Hn,clearcoatNormalView:pc,clearcoatRoughness:qn,clipSpace:Xd,code:gT,color:mn,colorSpaceToWorking:zu,colorToDirection:e=>en(e).mul(2).sub(1),compute:al,computeKernel:nl,computeSkinning:(e,t=null)=>{const r=new Np(e);return r.positionNode=up(new j(e.geometry.getAttribute("position").array,3),"vec3").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinIndexNode=up(new j(new Uint32Array(e.geometry.getAttribute("skinIndex").array),4),"uvec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinWeightNode=up(new j(e.geometry.getAttribute("skinWeight").array,4),"vec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.bindMatrixNode=Na(e.bindMatrix,"mat4"),r.bindMatrixInverseNode=Na(e.bindMatrixInverse,"mat4"),r.boneMatricesNode=Vl(e.skeleton.boneMatrices,"mat4",e.skeleton.bones.length),r.toPositionNode=t,en(r)},context:vu,convert:Un,convertColorSpace:(e,t,r)=>new Gu(en(e),t,r),convertToTexture:(e,...t)=>e.isSampleNode||e.isTextureNode?e:e.isPassNode?e.getTextureNode():px(e,...t),cos:Ao,countLeadingZeros:bb,countOneBits:xb,countTrailingZeros:yb,cross:Jo,cubeTexture:Bc,cubeTextureBase:Mc,dFdx:Io,dFdy:Oo,dashSize:oa,debug:_l,decrement:ro,decrementBefore:eo,defaultBuildStages:ni,defaultShaderStages:ii,defined:Yi,degrees:mo,deltaTime:Ib,densityFogFactor:xT,depth:tg,depthPass:(e,t,r)=>new tT(tT.DEPTH,e,t,r),determinant:Wo,difference:Yo,diffuseColor:kn,diffuseContribution:Gn,directPointLight:pv,directionToColor:dh,directionToFaceDirection:nc,dispersion:ma,disposeShadowMaterial:G_,distance:Qo,div:Da,dot:Zo,drawIndex:mp,dynamicBufferAttribute:(e,t=null,r=0,s=0)=>el(e,t,r,s,x),element:Dn,emissive:$n,equal:Ia,equirectUV:Eg,exp:fo,exp2:yo,exponentialHeightFogFactor:TT,expression:fl,faceDirection:ic,faceForward:hu,faceforward:yu,float:fn,floatBitsToInt:e=>new hb(e,"int","float"),floatBitsToUint:gb,floor:vo,fog:_T,fract:Ro,frameGroup:xa,frameId:Ob,frontFacing:sc,fwidth:$o,gain:(e,t)=>e.lessThan(.5)?_b(e.mul(2),t).div(2):La(1,_b(Pa(La(1,e),2),t).div(2)),gapSize:ua,getConstNodeType:Zi,getCurrentStack:hn,getDirection:sf,getDistanceAttenuation:hv,getGeometryRoughness:Xg,getNormalFromDepth:fx,getParallaxCorrectNormal:lN,getRoughness:Kg,getScreenPosition:mx,getShIrradianceAt:dN,getShadowMaterial:k_,getShadowRenderObjectFunction:W_,getTextureIndex:lb,getViewPosition:gx,ggxConvolution:hf,globalId:MT,glsl:(e,t)=>gT(e,t,"glsl"),glslFn:(e,t)=>fT(e,t,"glsl"),grayscale:$x,greaterThan:ka,greaterThanEqual:$a,hash:Tb,highpModelNormalViewMatrix:jd,highpModelViewMatrix:qd,hue:Hx,increment:to,incrementBefore:Ja,inspector:Sl,instance:yp,instanceIndex:cp,instancedArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new vx(e,r,s);return up(i,t,i.count)},instancedBufferAttribute:rl,instancedDynamicBufferAttribute:sl,instancedMesh:xp,int:yn,intBitsToFloat:e=>new hb(e,"float","int"),interleavedGradientNoise:yx,inverse:Ho,inverseSqrt:_o,inversesqrt:bu,invocationLocalIndex:gp,invocationSubgroupIndex:pp,ior:da,iridescence:Kn,iridescenceIOR:Qn,iridescenceThickness:Yn,isolate:ul,ivec2:_n,ivec3:Rn,ivec4:Cn,js:(e,t)=>gT(e,t,"js"),label:Au,length:Po,lengthSq:au,lessThan:Va,lessThanEqual:Ga,lightPosition:f_,lightProjectionUV:m_,lightShadowMatrix:g_,lightTargetDirection:x_,lightTargetPosition:y_,lightViewPosition:b_,lightingContext:Up,lights:(e=[])=>(new N_).setLights(e),linearDepth:rg,linearToneMapping:sT,localId:BT,log:bo,log2:xo,logarithmicDepthToViewZ:(e,t,r)=>{const s=e.mul(bo(r.div(t)));return fn(Math.E).pow(s).mul(t).negate()},luminance:qx,mat2:Fn,mat3:Ln,mat4:Pn,matcapUV:Qf,materialAO:rp,materialAlphaTest:Th,materialAnisotropy:Vh,materialAnisotropyVector:sp,materialAttenuationColor:jh,materialAttenuationDistance:qh,materialClearcoat:Lh,materialClearcoatNormal:Dh,materialClearcoatRoughness:Ph,materialColor:_h,materialDispersion:ep,materialEmissive:Nh,materialEnvIntensity:vc,materialEnvRotation:Nc,materialIOR:Hh,materialIridescence:kh,materialIridescenceIOR:Gh,materialIridescenceThickness:$h,materialLightMap:tp,materialLineDashOffset:Zh,materialLineDashSize:Kh,materialLineGapSize:Qh,materialLineScale:Xh,materialLineWidth:Yh,materialMetalness:Bh,materialNormal:Fh,materialOpacity:Sh,materialPointSize:Jh,materialReference:Ic,materialReflectivity:Ch,materialRefractionRatio:_c,materialRotation:Uh,materialRoughness:Mh,materialSheen:Ih,materialSheenRoughness:Oh,materialShininess:vh,materialSpecular:Rh,materialSpecularColor:Ah,materialSpecularIntensity:Eh,materialSpecularStrength:wh,materialThickness:Wh,materialTransmission:zh,max:jo,maxMipLevel:Bl,mediumpModelViewMatrix:Hd,metalness:Wn,min:qo,mix:ou,mixElement:gu,mod:Ua,modInt:so,modelDirection:Ud,modelNormalMatrix:$d,modelPosition:Od,modelRadius:Gd,modelScale:Vd,modelViewMatrix:Wd,modelViewPosition:kd,modelViewProjection:ip,modelWorldMatrix:Id,modelWorldMatrixInverse:zd,morphReference:Fp,mrt:cb,mul:Pa,mx_aastep:aN,mx_add:(e,t=fn(0))=>Fa(e,t),mx_atan2:(e=fn(0),t=fn(1))=>Bo(e,t),mx_cell_noise_float:(e=Al())=>$v(e.convert("vec2|vec3")),mx_contrast:(e,t=1,r=.5)=>fn(e).sub(r).mul(t).add(r),mx_divide:(e,t=fn(1))=>Da(e,t),mx_fractal_noise_float:(e=Al(),t=3,r=2,s=.5,i=1)=>Wv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec2:(e=Al(),t=3,r=2,s=.5,i=1)=>qv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec3:(e=Al(),t=3,r=2,s=.5,i=1)=>Hv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec4:(e=Al(),t=3,r=2,s=.5,i=1)=>jv(e,yn(t),r,s).mul(i),mx_frame:()=>Ob,mx_heighttonormal:(e,t)=>(e=Sn(e),t=fn(t),yh(e,t)),mx_hsvtorgb:sN,mx_ifequal:(e,t,r,s)=>e.equal(t).mix(r,s),mx_ifgreater:(e,t,r,s)=>e.greaterThan(t).mix(r,s),mx_ifgreatereq:(e,t,r,s)=>e.greaterThanEqual(t).mix(r,s),mx_invert:(e,t=fn(1))=>La(t,e),mx_modulo:(e,t=fn(1))=>Ua(e,t),mx_multiply:(e,t=fn(1))=>Pa(e,t),mx_noise_float:(e=Al(),t=1,r=0)=>kv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec3:(e=Al(),t=1,r=0)=>Gv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec4:(e=Al(),t=1,r=0)=>{e=e.convert("vec2|vec3");return wn(Gv(e),kv(e.add(Tn(19,73)))).mul(t).add(r)},mx_place2d:(e,t=Tn(.5,.5),r=Tn(1,1),s=fn(0),i=Tn(0,0))=>{let n=e;if(t&&(n=n.sub(t)),r&&(n=n.mul(r)),s){const e=s.mul(Math.PI/180),t=e.cos(),r=e.sin();n=Tn(n.x.mul(t).sub(n.y.mul(r)),n.x.mul(r).add(n.y.mul(t)))}return t&&(n=n.add(t)),i&&(n=n.add(i)),n},mx_power:(e,t=fn(1))=>eu(e,t),mx_ramp4:(e,t,r,s,i=Al())=>{const n=i.x.clamp(),a=i.y.clamp(),o=ou(e,t,n),u=ou(r,s,n);return ou(o,u,a)},mx_ramplr:(e,t,r=Al())=>oN(e,t,r,"x"),mx_ramptb:(e,t,r=Al())=>oN(e,t,r,"y"),mx_rgbtohsv:iN,mx_rotate2d:(e,t)=>{e=Tn(e);const r=(t=fn(t)).mul(Math.PI/180);return ey(e,r)},mx_rotate3d:(e,t,r)=>{e=Sn(e),t=fn(t),r=Sn(r);const s=t.mul(Math.PI/180),i=r.normalize(),n=s.cos(),a=s.sin(),o=fn(1).sub(n);return e.mul(n).add(i.cross(e).mul(a)).add(i.mul(i.dot(e)).mul(o))},mx_safepower:(e,t=1)=>(e=fn(e)).abs().pow(t).mul(e.sign()),mx_separate:(e,t=null)=>{if("string"==typeof t){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3},s=t.replace(/^out/,"").toLowerCase();if(void 0!==r[s])return e.element(r[s])}if("number"==typeof t)return e.element(t);if("string"==typeof t&&1===t.length){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3};if(void 0!==r[t])return e.element(r[t])}return e},mx_splitlr:(e,t,r,s=Al())=>uN(e,t,r,s,"x"),mx_splittb:(e,t,r,s=Al())=>uN(e,t,r,s,"y"),mx_srgb_texture_to_lin_rec709:nN,mx_subtract:(e,t=fn(0))=>La(e,t),mx_timer:()=>Ub,mx_transform_uv:(e=1,t=0,r=Al())=>r.mul(e).add(t),mx_unifiednoise2d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>tN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_unifiednoise3d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>rN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_worley_noise_float:(e=Al(),t=1)=>Zv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec2:(e=Al(),t=1)=>Jv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec3:(e=Al(),t=1)=>eN(e.convert("vec2|vec3"),t,yn(1)),negate:Do,neutralToneMapping:hT,nodeArray:sn,nodeImmutable:an,nodeObject:en,nodeObjectIntent:tn,nodeObjects:rn,nodeProxy:nn,nodeProxyIntent:on,normalFlat:uc,normalGeometry:ac,normalLocal:oc,normalMap:ph,normalView:cc,normalViewGeometry:lc,normalWorld:hc,normalWorldGeometry:dc,normalize:So,not:Ha,notEqual:Oa,numWorkgroups:wT,objectDirection:Cd,objectGroup:_a,objectPosition:Bd,objectRadius:Pd,objectScale:Fd,objectViewPosition:Ld,objectWorldMatrix:Md,oneMinus:Uo,or:Wa,orthographicDepthToViewZ:Kp,oscSawtooth:(e=Ub)=>e.fract(),oscSine:(e=Ub)=>e.add(.75).mul(2*Math.PI).sin().mul(.5).add(.5),oscSquare:(e=Ub)=>e.fract().round(),oscTriangle:(e=Ub)=>e.add(.5).fract().mul(2).sub(1).abs(),output:aa,outputStruct:nb,overloadingFn:Db,packHalf2x16:Rb,packSnorm2x16:Nb,packUnorm2x16:Sb,parabola:_b,parallaxDirection:uh,parallaxUV:(e,t)=>e.sub(uh.mul(t)),parameter:(e,t)=>new Jy(e,t),pass:(e,t,r)=>new tT(tT.COLOR,e,t,r),passTexture:(e,t)=>new Jx(e,t),pcurve:(e,t,r)=>eu(Da(eu(e,t),Fa(eu(e,t),eu(La(1,e),r))),1/t),perspectiveDepthToViewZ:Zp,pmremTexture:Df,pointShadow:dv,pointUV:Rx,pointWidth:la,positionGeometry:Kd,positionLocal:Qd,positionPrevious:Yd,positionView:ec,positionViewDirection:tc,positionWorld:Zd,positionWorldDirection:Jd,posterize:Xx,pow:eu,pow2:tu,pow3:ru,pow4:su,premultiplyAlpha:mg,property:On,quadBroadcast:c_,quadSwapDiagonal:n_,quadSwapX:s_,quadSwapY:i_,radians:go,rand:pu,range:RT,rangeFogFactor:bT,reciprocal:ko,reference:Pc,referenceBuffer:Dc,reflect:Ko,reflectVector:Ec,reflectView:Sc,reflector:e=>new nx(e),refract:du,refractVector:Ac,refractView:Rc,reinhardToneMapping:iT,remap:pl,remapClamp:gl,renderGroup:Ta,renderOutput:xl,rendererReference:ju,replaceDefaultUV:function(e,t=null){return vu(t,{getUV:"function"==typeof e?e:()=>e})},rotate:ey,rotateUV:Vb,roughness:zn,round:Vo,rtt:px,sRGBTransferEOTF:Ou,sRGBTransferOETF:Vu,sample:(e,t=null)=>new xx(e,en(t)),sampler:e=>(!0===e.isNode?e:Ul(e)).convert("sampler"),samplerComparison:e=>(!0===e.isNode?e:Ul(e)).convert("samplerComparison"),saturate:lu,saturation:zx,screenCoordinate:Yl,screenDPR:Xl,screenSize:Ql,screenUV:Kl,select:Tu,setCurrentStack:cn,setName:Su,shaderStages:ai,shadow:Y_,shadowPositionWorld:R_,shapeCircle:fv,sharedUniformGroup:ba,sheen:jn,sheenRoughness:Xn,shiftLeft:Ya,shiftRight:Za,shininess:na,sign:Lo,sin:Eo,sinc:(e,t)=>Eo(oo.mul(t.mul(e).sub(1))).div(oo.mul(t.mul(e).sub(1))),skinning:Sp,smoothstep:cu,smoothstepElement:mu,specularColor:ra,specularColorBlended:sa,specularF90:ia,spherizeUV:kb,split:(e,t)=>new fi(en(e),t),spritesheetUV:zb,sqrt:To,stack:tb,step:Xo,stepElement:fu,storage:up,storageBarrier:()=>PT("storage").toStack(),storageTexture:Fx,string:(e="")=>new _i(e,"string"),struct:(e,t=null)=>{const r=new rb(e,t),s=(...t)=>{let s=null;if(t.length>0)if(t[0].isNode){s={};const r=Object.keys(e);for(let e=0;eDx(e,t).level(r),texture3DLoad:(...e)=>Dx(...e).setSampler(!1),textureBarrier:()=>PT("texture").toStack(),textureBicubic:Am,textureBicubicLevel:Em,textureCubeUV:nf,textureLevel:(e,t,r)=>Ul(e,t).level(r),textureLoad:Il,textureSize:Cl,textureStore:(e,t,r)=>{let s;return!0===e.isStorageTextureNode?(s=e.clone(),s.uvNode=t,s.storeNode=r):s=Fx(e,t,r),null!==r&&s.toStack(),s},thickness:ha,time:Ub,toneMapping:Ku,toneMappingExposure:Qu,toonOutlinePass:(t,r,s=new e(0,0,0),i=.003,n=1)=>new rT(t,r,en(s),en(i),en(n)),transformDirection:iu,transformNormal:gc,transformNormalToView:mc,transformedClearcoatNormalView:bc,transformedNormalView:fc,transformedNormalWorld:yc,transmission:ca,transpose:zo,triNoise3D:Fb,triplanarTexture:(...e)=>Wb(...e),triplanarTextures:Wb,trunc:Go,uint:bn,uintBitsToFloat:e=>new hb(e,"float","uint"),uniform:Na,uniformArray:$l,uniformCubeTexture:(e=wc)=>Mc(e),uniformFlow:Nu,uniformGroup:ya,uniformTexture:(e=Ll)=>Ul(e),unpackHalf2x16:Cb,unpackNormal:ch,unpackSnorm2x16:Ab,unpackUnorm2x16:wb,unpremultiplyAlpha:fg,userData:(e,t,r)=>new Ux(e,t,r),uv:Al,uvec2:vn,uvec3:En,uvec4:Mn,varying:Uu,varyingProperty:Vn,vec2:Tn,vec3:Sn,vec4:wn,vectorComponents:oi,velocity:Gx,vertexColor:lg,vertexIndex:dp,vertexStage:Iu,vibrance:Wx,viewZToLogarithmicDepth:Jp,viewZToOrthographicDepth:Xp,viewZToPerspectiveDepth:Qp,viewZToReversedOrthographicDepth:(e,t,r)=>e.add(r).div(r.sub(t)),viewZToReversedPerspectiveDepth:Yp,viewport:Zl,viewportCoordinate:ed,viewportDepthTexture:qp,viewportLinearDepth:sg,viewportMipTexture:Gp,viewportOpaqueMipTexture:zp,viewportResolution:rd,viewportSafeUV:$b,viewportSharedTexture:Yx,viewportSize:Jl,viewportTexture:kp,viewportUV:td,vogelDiskSample:bx,wgsl:(e,t)=>gT(e,t,"wgsl"),wgslFn:(e,t)=>fT(e,t,"wgsl"),workgroupArray:(e,t)=>new UT("Workgroup",e,t),workgroupBarrier:()=>PT("workgroup").toStack(),workgroupId:CT,workingToColorSpace:$u,xor:qa});const hN=new Zy;class pN extends _y{constructor(e,t){super(),this.renderer=e,this.nodes=t}update(e,t,r){const s=this.renderer,i=this.nodes.getBackgroundNode(e)||e.background;let n=!1;if(null===i)s._clearColor.getRGB(hN),hN.a=s._clearColor.a;else if(!0===i.isColor)i.getRGB(hN),hN.a=1,n=!0;else if(!0===i.isNode){const u=this.get(e),l=i;hN.copy(s._clearColor);let d=u.backgroundMesh;if(void 0===d){const h=wn(l).mul(Cx).context({getUV:()=>Mx.mul(dc),getTextureLevel:()=>wx}),p=Td.element(3).element(3).equal(1),g=Da(1,Td.element(1).element(1)).mul(3),m=p.select(Qd.mul(g),Qd),f=Wd.mul(wn(m,0));let y=Td.mul(wn(f.xyz,1));y=y.setZ(y.w);const b=new yg;function x(){i.removeEventListener("dispose",x),d.material.dispose(),d.geometry.dispose()}b.name="Background.material",b.side=L,b.depthTest=!1,b.depthWrite=!1,b.allowOverride=!1,b.fog=!1,b.lights=!1,b.vertexNode=y,b.colorNode=h,u.backgroundMeshNode=h,u.backgroundMesh=d=new ue(new it(1,32,32),b),d.frustumCulled=!1,d.name="Background.mesh",i.addEventListener("dispose",x)}const c=l.getCacheKey();u.backgroundCacheKey!==c&&(u.backgroundMeshNode.node=wn(l).mul(Cx),u.backgroundMeshNode.needsUpdate=!0,d.material.needsUpdate=!0,u.backgroundCacheKey=c),t.unshift(d,d.geometry,d.material,0,0,null,null)}else o("Renderer: Unsupported background configuration.",i);const a=s.xr.getEnvironmentBlendMode();if("additive"===a?hN.set(0,0,0,1):"alpha-blend"===a&&hN.set(0,0,0,0),!0===s.autoClear||!0===n){const T=r.clearColorValue;T.r=hN.r,T.g=hN.g,T.b=hN.b,T.a=hN.a,!0!==s.backend.isWebGLBackend&&!0!==s.alpha||(T.r*=T.a,T.g*=T.a,T.b*=T.a),r.depthClearValue=s.getClearDepth(),r.stencilClearValue=s.getClearStencil(),r.clearColor=!0===s.autoClearColor,r.clearDepth=!0===s.autoClearDepth,r.clearStencil=!0===s.autoClearStencil}else r.clearColor=!1,r.clearDepth=!1,r.clearStencil=!1}}let gN=0;class mN{constructor(e="",t=[],r=0){this.name=e,this.bindings=t,this.index=r,this.id=gN++}}class fN{constructor(e,t,r,s,i,n,a,o,u,l=[]){this.vertexShader=e,this.fragmentShader=t,this.computeShader=r,this.transforms=l,this.nodeAttributes=s,this.bindings=i,this.updateNodes=n,this.updateBeforeNodes=a,this.updateAfterNodes=o,this.observer=u,this.usedTimes=0}createBindings(){const e=[];for(const t of this.bindings){if(!0!==t.bindings[0].groupNode.shared){const r=new mN(t.name,[],t.index);e.push(r);for(const e of t.bindings)r.bindings.push(e.clone())}else e.push(t)}return e}}class yN{constructor(e,t,r=null){this.isNodeAttribute=!0,this.name=e,this.type=t,this.node=r}}class bN{constructor(e,t,r){this.isNodeUniform=!0,this.name=e,this.type=t,this.node=r}get value(){return this.node.value}set value(e){this.node.value=e}get id(){return this.node.id}get groupNode(){return this.node.groupNode}}class xN{constructor(e,t,r=!1,s=null){this.isNodeVar=!0,this.name=e,this.type=t,this.readOnly=r,this.count=s}}class TN extends xN{constructor(e,t,r=null,s=null){super(e,t),this.needsInterpolation=!1,this.isNodeVarying=!0,this.interpolationType=r,this.interpolationSampling=s}}class _N{constructor(e,t,r=""){this.name=e,this.type=t,this.code=r,Object.defineProperty(this,"isNodeCode",{value:!0})}}let vN=0;class NN{constructor(e=null){this.id=vN++,this.nodesData=new WeakMap,this.parent=e}getData(e){let t=this.nodesData.get(e);return void 0===t&&null!==this.parent&&(t=this.parent.getData(e)),t}setData(e,t){this.nodesData.set(e,t)}}class SN{constructor(e,t){this.name=e,this.members=t,this.output=!1}}class RN{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0,this.index=-1}setValue(e){this.value=e}getValue(){return this.value}}class EN extends RN{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}}class AN extends RN{constructor(e,r=new t){super(e,r),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}}class wN extends RN{constructor(e,t=new r){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}}class CN extends RN{constructor(e,t=new s){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}}class MN extends RN{constructor(t,r=new e){super(t,r),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}}class BN extends RN{constructor(e,t=new i){super(e,t),this.isMatrix2Uniform=!0,this.boundary=8,this.itemSize=4}}class FN extends RN{constructor(e,t=new n){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}}class LN extends RN{constructor(e,t=new a){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}}class PN extends EN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class DN extends AN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class UN extends wN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class IN extends CN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class ON extends MN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class VN extends BN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class kN extends FN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class GN extends LN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}let $N=0;const zN=new WeakMap,WN=new WeakMap,HN=new Map([[Int8Array,"int"],[Int16Array,"int"],[Int32Array,"int"],[Uint8Array,"uint"],[Uint16Array,"uint"],[Uint32Array,"uint"],[Float32Array,"float"]]),qN=e=>/e/g.test(e)?String(e).replace(/\+/g,""):(e=Number(e))+(e%1?"":".0");class jN{constructor(e,t,r){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=r,this.scene=null,this.camera=null,this.nodes=[],this.sequentialNodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.observer=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:"",fragment:"",compute:""},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.types={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.declarations={},this.flow={code:""},this.chaining=[],this.stack=tb(),this.stacks=[],this.tab="\t",this.currentFunctionNode=null,this.context={material:this.material},this.cache=new NN,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.subBuildLayers=[],this.activeStacks=[],this.subBuildFn=null,this.fnCall=null,Object.defineProperty(this,"id",{value:$N++})}isFlatShading(){return!0===this.material.flatShading||!1===this.geometry.hasAttribute("normal")}isOpaque(){const e=this.material;return!1===e.transparent&&e.blending===ze&&!1===e.alphaToCoverage}createRenderTarget(e,t,r){return new ae(e,t,r)}createCubeRenderTarget(e,t){return new Ag(e,t)}includes(e){return this.nodes.includes(e)}getOutputStructName(){}_getBindGroup(e,t){const r=t[0].groupNode;let s,i=r.shared;if(i)for(let e=1;ee.nodeUniform.node.id-t.nodeUniform.node.id);for(const t of e.uniforms)r+=t.nodeUniform.node.id}else r+=e.nodeUniform.id;const i=this.renderer._currentRenderContext||this.renderer;let n=zN.get(i);void 0===n&&(n=new Map,zN.set(i,n));const a=Os(r);s=n.get(a),void 0===s&&(s=new mN(e,t,this.bindingsIndexes[e].group),n.set(a,s))}else s=new mN(e,t,this.bindingsIndexes[e].group);return s}getBindGroupArray(e,t){const r=this.bindings[t];let s=r[e];return void 0===s&&(void 0===this.bindingsIndexes[e]&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),r[e]=s=[]),s}getBindings(){let e=this.bindGroups;if(null===e){const t={},r=this.bindings;for(const e of ai)for(const s in r[e]){const i=r[e][s],n=t[s]||(t[s]=[]);for(const e of i)!1===n.includes(e)&&n.push(e)}e=[];for(const r in t){const s=t[r],i=this._getBindGroup(r,s);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){const e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(n)}u`:"0u";if("bool"===i)return n?"true":"false";if("color"===i)return`${this.getType("vec3")}( ${qN(n.r)}, ${qN(n.g)}, ${qN(n.b)} )`;const a=this.getTypeLength(i),o=this.getComponentType(i),u=e=>this.generateConst(o,e);if(2===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)} )`;if(3===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)} )`;if(4===a&&"mat2"!==i)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)}, ${u(n.w)} )`;if(a>=4&&n&&(n.isMatrix2||n.isMatrix3||n.isMatrix4))return`${this.getType(i)}( ${n.elements.map(u).join(", ")} )`;if(a>4)return`${this.getType(i)}()`;throw new Error(`NodeBuilder: Type '${i}' not found in generate constant attempt.`)}getType(e){return"color"===e?"vec3":e}hasGeometryAttribute(e){return this.geometry&&void 0!==this.geometry.getAttribute(e)}getAttribute(e,t){const r=this.attributes;for(const t of r)if(t.name===e)return t;const s=new yN(e,t);return this.registerDeclaration(s),r.push(s),s}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return"void"===e||"property"===e||"sampler"===e||"samplerComparison"===e||"texture"===e||"cubeTexture"===e||"storageTexture"===e||"depthTexture"===e||"texture3D"===e}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){const t=e.type;if(e.isDataTexture){if(t===R)return"int";if(t===S)return"uint"}return"float"}getElementType(e){return"mat2"===e?"vec2":"mat3"===e?"vec3":"mat4"===e?"vec4":this.getComponentType(e)}getComponentType(e){if("float"===(e=this.getVectorType(e))||"bool"===e||"int"===e||"uint"===e)return e;const t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return null===t?null:"b"===t[1]?"bool":"i"===t[1]?"int":"u"===t[1]?"uint":"float"}getVectorType(e){return"color"===e?"vec3":"texture"===e||"cubeTexture"===e||"storageTexture"===e||"texture3D"===e?"vec4":e}getTypeFromLength(e,t="float"){if(1===e)return t;let r=zs(e);const s="float"===t?"":t[0];return!0===/mat2/.test(t)&&(r=r.replace("vec","mat")),s+r}getTypeFromArray(e){return HN.get(e.constructor)}isInteger(e){return/int|uint|(i|u)vec/.test(e)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);const r=t.array,s=e.itemSize,i=e.normalized;let n;return e instanceof ot||!0===i||(n=this.getTypeFromArray(r)),this.getTypeFromLength(s,n)}getTypeLength(e){const t=this.getVectorType(e),r=/vec([2-4])/.exec(t);return null!==r?Number(r[1]):"float"===t||"bool"===t||"int"===t||"uint"===t?1:!0===/mat2/.test(e)?4:!0===/mat3/.test(e)?9:!0===/mat4/.test(e)?16:0}getVectorFromMatrix(e){return e.replace("mat","vec")}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){const t=this.getComponentType(e);return"int"===t||"uint"===t?e:this.changeComponentType(e,"int")}setActiveStack(e){this.activeStacks.push(e)}removeActiveStack(e){if(this.activeStacks[this.activeStacks.length-1]!==e)throw new Error("NodeBuilder: Invalid active stack removal.");this.activeStacks.pop()}getActiveStack(){return this.activeStacks[this.activeStacks.length-1]}getBaseStack(){return this.activeStacks[0]}addStack(){this.stack=tb(this.stack);const e=hn();return this.stacks.push(e),cn(this.stack),this.stack}removeStack(){const e=this.stack;for(const t of e.nodes){this.getDataFromNode(t).stack=e}return this.stack=e.parent,cn(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,r=null){let s=(r=null===r?e.isGlobal(this)?this.globalCache:this.cache:r).getData(e);void 0===s&&(s={},r.setData(e,s)),void 0===s[t]&&(s[t]={});let i=s[t];const n=s.any?s.any.subBuilds:null,a=this.getClosestSubBuild(n);return a&&(void 0===i.subBuildsCache&&(i.subBuildsCache={}),i=i.subBuildsCache[a]||(i.subBuildsCache[a]={}),i.subBuilds=n),i}getNodeProperties(e,t="any"){const r=this.getDataFromNode(e,t);return r.properties||(r.properties={outputNode:null})}getBufferAttributeFromNode(e,t){const r=this.getDataFromNode(e,"vertex");let s=r.bufferAttribute;if(void 0===s){const i=this.uniforms.index++;s=new yN("nodeAttribute"+i,t,e),this.bufferAttributes.push(s),r.bufferAttribute=s}return s}getStructTypeNode(e,t=this.shaderStage){return this.types[t][e]||null}getStructTypeFromNode(e,t,r=null,s=this.shaderStage){const i=this.getDataFromNode(e,s,this.globalCache);let n=i.structType;if(void 0===n){const a=this.structs.index++;null===r&&(r="StructType"+a),n=new SN(r,t),this.structs[s].push(n),this.types[s][r]=e,i.structType=n}return n}getOutputStructTypeFromNode(e,t){const r=this.getStructTypeFromNode(e,t,"OutputType","fragment");return r.output=!0,r}getUniformFromNode(e,t,r=this.shaderStage,s=null){const i=this.getDataFromNode(e,r,this.globalCache);let n=i.uniform;if(void 0===n){const a=this.uniforms.index++;n=new bN(s||"nodeUniform"+a,t,e),this.uniforms[r].push(n),this.registerDeclaration(n),i.uniform=n}return n}getVarFromNode(e,t=null,r=e.getNodeType(this),s=this.shaderStage,i=!1){const n=this.getDataFromNode(e,s),a=this.getSubBuildProperty("variable",n.subBuilds);let o=n[a];if(void 0===o){const u=i?"_const":"_var",l=this.vars[s]||(this.vars[s]=[]),d=this.vars[u]||(this.vars[u]=0);null===t&&(t=(i?"nodeConst":"nodeVar")+d,this.vars[u]++),"variable"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds));const c=e.getArrayCount(this);o=new xN(t,r,i,c),i||l.push(o),this.registerDeclaration(o),n[a]=o}return o}isDeterministic(e){if(e.isMathNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode))&&(!e.cNode||this.isDeterministic(e.cNode));if(e.isOperatorNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode));if(e.isArrayNode){if(null!==e.values)for(const t of e.values)if(!this.isDeterministic(t))return!1;return!0}return!!e.isConstNode}getVaryingFromNode(e,t=null,r=e.getNodeType(this),s=null,i=null){const n=this.getDataFromNode(e,"any"),a=this.getSubBuildProperty("varying",n.subBuilds);let o=n[a];if(void 0===o){const e=this.varyings,u=e.length;null===t&&(t="nodeVarying"+u),"varying"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds)),o=new TN(t,r,s,i),e.push(o),this.registerDeclaration(o),n[a]=o}return o}registerDeclaration(e){const t=this.shaderStage,r=this.declarations[t]||(this.declarations[t]={}),s=this.getPropertyName(e);let i=1,n=s;for(;void 0!==r[n];)n=s+"_"+i++;i>1&&(e.name=n,d(`TSL: Declaration name '${s}' of '${e.type}' already in use. Renamed to '${n}'.`)),r[n]=e}getCodeFromNode(e,t,r=this.shaderStage){const s=this.getDataFromNode(e);let i=s.code;if(void 0===i){const e=this.codes[r]||(this.codes[r]=[]),n=e.length;i=new _N("nodeCode"+n,t),e.push(i),s.code=i}return i}addFlowCodeHierarchy(e,t){const{flowCodes:r,flowCodeBlock:s}=this.getDataFromNode(e);let i=!0,n=t;for(;n;){if(!0===s.get(n)){i=!1;break}n=this.getDataFromNode(n).parentNodeBlock}if(i)for(const e of r)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,r){const s=this.getDataFromNode(e),i=s.flowCodes||(s.flowCodes=[]),n=s.flowCodeBlock||(s.flowCodeBlock=new WeakMap);i.push(t),n.set(r,!0)}addLineFlowCode(e,t=null){return""===e||(null!==t&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=";\n"),this.flow.code+=e),this}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+="\t",this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){const t=e.getNodeType(this),r=this.flowChildNode(e,t);return this.flowsData.set(e,r),r}addInclude(e){null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(e)}buildFunctionNode(e){const t=new mT,r=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=r,t}flowShaderNode(e){const t=e.layout,r={[Symbol.iterator](){let e=0;const t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(const e of t.inputs)r[e.name]=new Jy(e.type,e.name);e.layout=null;const s=e.call(r),i=this.flowStagesNode(s,t.type);return e.layout=t,i}flowBuildStage(e,t,r=null){const s=this.getBuildStage();this.setBuildStage(t);const i=e.build(this,r);return this.setBuildStage(s),i}flowStagesNode(e,t=null){const r=this.flow,s=this.vars,i=this.declarations,n=this.cache,a=this.buildStage,o=this.stack,u={code:""};this.flow=u,this.vars={},this.declarations={},this.cache=new NN,this.stack=tb();for(const r of ni)this.setBuildStage(r),u.result=e.build(this,t);return u.vars=this.getVars(this.shaderStage),this.flow=r,this.vars=s,this.declarations=i,this.cache=n,this.stack=o,this.setBuildStage(a),u}getFunctionOperator(){return null}buildFunctionCode(){d("Abstract function.")}flowChildNode(e,t=null){const r=this.flow,s={code:""};return this.flow=s,s.result=e.build(this,t),this.flow=r,s}flowNodeFromShaderStage(e,t,r=null,s=null){const i=this.tab,n=this.cache,a=this.shaderStage,o=this.context;this.setShaderStage(e);const u={...this.context};delete u.nodeBlock,this.cache=this.globalCache,this.tab="\t",this.context=u;let l=null;if("generate"===this.buildStage){const i=this.flowChildNode(t,r);null!==s&&(i.code+=`${this.tab+s} = ${i.result};\n`),this.flowCode[e]=this.flowCode[e]+i.code,l=i}else l=t.build(this);return this.setShaderStage(a),this.cache=n,this.tab=i,this.context=o,l}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){d("Abstract function.")}getVaryings(){d("Abstract function.")}getVar(e,t,r=null){return`${null!==r?this.generateArrayDeclaration(e,r):this.getType(e)} ${t}`}getVars(e){let t="";const r=this.vars[e];if(void 0!==r)for(const e of r)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){d("Abstract function.")}getCodes(e){const t=this.codes[e];let r="";if(void 0!==t)for(const e of t)r+=e.code+"\n";return r}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){d("Abstract function.")}get subBuild(){return this.subBuildLayers[this.subBuildLayers.length-1]||null}addSubBuild(e){this.subBuildLayers.push(e)}removeSubBuild(){return this.subBuildLayers.pop()}getClosestSubBuild(e){let t;if(t=e&&e.isNode?e.isShaderCallNodeInternal?e.shaderNode.subBuilds:e.isStackNode?[e.subBuild]:this.getDataFromNode(e,"any").subBuilds:e instanceof Set?[...e]:e,!t)return null;const r=this.subBuildLayers;for(let e=t.length-1;e>=0;e--){const s=t[e];if(r.includes(s))return s}return null}getSubBuildOutput(e){return this.getSubBuildProperty("outputNode",e)}getSubBuildProperty(e="",t=null){let r,s;return r=null!==t?this.getClosestSubBuild(t):this.subBuildFn,s=r?e?r+"_"+e:r:e,s}build(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}async buildAsync(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this);await ut()}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getSharedDataFromNode(e){let t=WN.get(e);return void 0===t&&(t={}),t}getNodeUniform(e,t){const r=this.getSharedDataFromNode(e);let s=r.cache;if(void 0===s){if("float"===t||"int"===t||"uint"===t)s=new PN(e);else if("vec2"===t||"ivec2"===t||"uvec2"===t)s=new DN(e);else if("vec3"===t||"ivec3"===t||"uvec3"===t)s=new UN(e);else if("vec4"===t||"ivec4"===t||"uvec4"===t)s=new IN(e);else if("color"===t)s=new ON(e);else if("mat2"===t)s=new VN(e);else if("mat3"===t)s=new kN(e);else{if("mat4"!==t)throw new Error(`Uniform "${t}" not implemented.`);s=new GN(e)}r.cache=s}return s}format(e,t,r){if((t=this.getVectorType(t))===(r=this.getVectorType(r))||null===r||this.isReference(r))return e;const s=this.getTypeLength(t),i=this.getTypeLength(r);return 16===s&&9===i?`${this.getType(r)}( ${e}[ 0 ].xyz, ${e}[ 1 ].xyz, ${e}[ 2 ].xyz )`:9===s&&4===i?`${this.getType(r)}( ${e}[ 0 ].xy, ${e}[ 1 ].xy )`:s>4||i>4||0===i?e:s===i?`${this.getType(r)}( ${e} )`:s>i?(e="bool"===r?`all( ${e} )`:`${e}.${"xyz".slice(0,i)}`,this.format(e,this.getTypeFromLength(i,this.getComponentType(t)),r)):4===i&&s>1?`${this.getType(r)}( ${this.format(e,t,"vec3")}, 1.0 )`:2===s?`${this.getType(r)}( ${this.format(e,t,"vec2")}, 0.0 )`:(1===s&&i>1&&t!==this.getComponentType(r)&&(e=`${this.getType(this.getComponentType(r))}( ${e} )`),`${this.getType(r)}( ${e} )`)}getSignature(){return`// Three.js r${lt} - Node System\n`}needsPreviousData(){const e=this.renderer.getMRT();return e&&e.has("velocity")||!0===Qs(this.object).useVelocity}}class XN{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let r=e.get(t);return void 0===r&&(r={renderId:0,frameId:0},e.set(t,r)),r}updateBeforeNode(e){const t=e.getUpdateBeforeType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateBeforeMap,r);if(t.frameId!==this.frameId){const r=t.frameId;t.frameId=this.frameId,!1===e.updateBefore(this)&&(t.frameId=r)}}else if(t===ti.RENDER){const t=this._getMaps(this.updateBeforeMap,r);if(t.renderId!==this.renderId){const r=t.renderId;t.renderId=this.renderId,!1===e.updateBefore(this)&&(t.renderId=r)}}else t===ti.OBJECT&&e.updateBefore(this)}updateAfterNode(e){const t=e.getUpdateAfterType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateAfterMap,r);t.frameId!==this.frameId&&!1!==e.updateAfter(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateAfterMap,r);t.renderId!==this.renderId&&!1!==e.updateAfter(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.updateAfter(this)}updateNode(e){const t=e.getUpdateType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateMap,r);t.frameId!==this.frameId&&!1!==e.update(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateMap,r);t.renderId!==this.renderId&&!1!==e.update(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.update(this)}update(){this.frameId++,void 0===this.lastTime&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}}class KN{constructor(e,t,r=null,s="",i=!1){this.type=e,this.name=t,this.count=r,this.qualifier=s,this.isConst=i}}KN.isNodeFunctionInput=!0;class QN extends cv{static get type(){return"AmbientLightNode"}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}}class YN extends cv{static get type(){return"DirectionalLightNode"}constructor(e=null){super(e)}setupDirect(){const e=this.colorNode;return{lightDirection:x_(this.light),lightColor:e}}}class ZN extends cv{static get type(){return"HemisphereLightNode"}constructor(t=null){super(t),this.lightPositionNode=f_(t),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=Na(new e).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){const{colorNode:t,groundColorNode:r,lightDirectionNode:s}=this,i=hc.dot(s).mul(.5).add(.5),n=ou(r,t,i);e.context.irradiance.addAssign(n)}}class JN extends cv{static get type(){return"SpotLightNode"}constructor(e=null){super(e),this.coneCosNode=Na(0).setGroup(Ta),this.penumbraCosNode=Na(0).setGroup(Ta),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(0).setGroup(Ta),this.colorNode=Na(this.color).setGroup(Ta)}update(e){super.update(e);const{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e,t){const{coneCosNode:r,penumbraCosNode:s}=this;return cu(r,s,t)}getLightCoord(e){const t=e.getNodeProperties(this);let r=t.projectionUV;return void 0===r&&(r=m_(this.light,e.context.positionWorld),t.projectionUV=r),r}setupDirect(e){const{colorNode:t,cutoffDistanceNode:r,decayExponentNode:s,light:i}=this,n=this.getLightVector(e),a=n.normalize(),o=a.dot(x_(i)),u=this.getSpotAttenuation(e,o),l=n.length(),d=hv({lightDistance:l,cutoffDistance:r,decayExponent:s});let c,h,p=t.mul(u).mul(d);if(i.colorNode?(h=this.getLightCoord(e),c=i.colorNode(h)):i.map&&(h=this.getLightCoord(e),c=Ul(i.map,h.xy).onRenderUpdate(()=>i.map)),c){p=h.mul(2).sub(1).abs().lessThan(1).all().select(p.mul(c),p)}return{lightColor:p,lightDirection:a}}}class eS extends JN{static get type(){return"IESSpotLightNode"}getSpotAttenuation(e,t){const r=this.light.iesMap;let s=null;if(r&&!0===r.isTexture){const e=t.acos().mul(1/Math.PI);s=Ul(r,Tn(e,0),0).r}else s=super.getSpotAttenuation(t);return s}}class tS extends cv{static get type(){return"LightProbeNode"}constructor(e=null){super(e);const t=[];for(let e=0;e<9;e++)t.push(new r);this.lightProbe=$l(t)}update(e){const{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){const t=dN(hc,this.lightProbe);e.context.irradiance.addAssign(t)}}const rS=dn(([e,t])=>{const r=e.abs().sub(t);return Po(jo(r,0)).add(qo(jo(r.x,r.y),0))});class sS extends JN{static get type(){return"ProjectorLightNode"}update(e){super.update(e);const t=this.light;if(this.penumbraCosNode.value=Math.min(Math.cos(t.angle*(1-t.penumbra)),.99999),null===t.aspect){let e=1;null!==t.map&&(e=t.map.width/t.map.height),t.shadow.aspect=e}else t.shadow.aspect=t.aspect}getSpotAttenuation(e){const t=fn(0),r=this.penumbraCosNode,s=g_(this.light).mul(e.context.positionWorld||Zd);return pn(s.w.greaterThan(0),()=>{const e=s.xyz.div(s.w),i=rS(e.xy.sub(Tn(.5)),Tn(.5)),n=Da(-1,La(1,Mo(r)).sub(1));t.assign(lu(i.mul(-2).mul(n)))}),t}}const iS=new a,nS=new a;let aS=null;class oS extends cv{static get type(){return"RectAreaLightNode"}constructor(e=null){super(e),this.halfHeight=Na(new r).setGroup(Ta),this.halfWidth=Na(new r).setGroup(Ta),this.updateType=ti.RENDER}update(e){super.update(e);const{light:t}=this,r=e.camera.matrixWorldInverse;nS.identity(),iS.copy(t.matrixWorld),iS.premultiply(r),nS.extractRotation(iS),this.halfWidth.value.set(.5*t.width,0,0),this.halfHeight.value.set(0,.5*t.height,0),this.halfWidth.value.applyMatrix4(nS),this.halfHeight.value.applyMatrix4(nS)}setupDirectRectArea(e){let t,r;e.isAvailable("float32Filterable")?(t=Ul(aS.LTC_FLOAT_1),r=Ul(aS.LTC_FLOAT_2)):(t=Ul(aS.LTC_HALF_1),r=Ul(aS.LTC_HALF_2));const{colorNode:s,light:i}=this;return{lightColor:s,lightPosition:b_(i),halfWidth:this.halfWidth,halfHeight:this.halfHeight,ltc_1:t,ltc_2:r}}static setLTC(e){aS=e}}class uS{parseFunction(){d("Abstract function.")}}class lS{constructor(e,t,r="",s=""){this.type=e,this.inputs=t,this.name=r,this.precision=s}getCode(){d("Abstract function.")}}lS.isNodeFunction=!0;const dS=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,cS=/[a-z_0-9]+/gi,hS="#pragma main";class pS extends lS{constructor(e){const{type:t,inputs:r,name:s,precision:i,inputsCode:n,blockCode:a,headerCode:o}=(e=>{const t=(e=e.trim()).indexOf(hS),r=-1!==t?e.slice(t+12):e,s=r.match(dS);if(null!==s&&5===s.length){const i=s[4],n=[];let a=null;for(;null!==(a=cS.exec(i));)n.push(a);const o=[];let u=0;for(;u{let r=this._createNodeBuilder(e,e.material);try{t?await r.buildAsync():r.build()}catch(s){r=this._createNodeBuilder(e,new yg),t?await r.buildAsync():r.build(),o("TSL: "+s)}return r})().then(e=>(s=this._createNodeBuilderState(e),i.set(n,s),s.usedTimes++,r.nodeBuilderState=s,s));{let t=this._createNodeBuilder(e,e.material);try{t.build()}catch(r){t=this._createNodeBuilder(e,new yg),t.build();let s=r.stackTrace;!s&&r.stack&&(s=new Us(r.stack)),o("TSL: "+r,s)}s=this._createNodeBuilderState(t),i.set(n,s)}}s.usedTimes++,r.nodeBuilderState=s}return s}getForRenderAsync(e){const t=this.getForRender(e,!0);return t.then?t:Promise.resolve(t)}getForRenderDeferred(e){const t=this.get(e);if(void 0!==t.nodeBuilderState)return t.nodeBuilderState;const r=this.getForRenderCacheKey(e),s=this.nodeBuilderCache.get(r);return void 0!==s?(s.usedTimes++,t.nodeBuilderState=s,s):(!0!==t.pendingBuild&&(t.pendingBuild=!0,this._buildQueue.push(()=>this.getForRenderAsync(e).then(()=>{t.pendingBuild=!1})),this._processBuildQueue()),null)}_processBuildQueue(){if(this._buildInProgress||0===this._buildQueue.length)return;this._buildInProgress=!0;this._buildQueue.shift()().then(()=>{this._buildInProgress=!1,this._processBuildQueue()})}delete(e){if(e.isRenderObject){const t=this.get(e).nodeBuilderState;t.usedTimes--,0===t.usedTimes&&this.nodeBuilderCache.delete(this.getForRenderCacheKey(e))}return super.delete(e)}getForCompute(e){const t=this.get(e);let r=t.nodeBuilderState;if(void 0===r){const s=this.backend.createNodeBuilder(e,this.renderer);s.build(),r=this._createNodeBuilderState(s),t.nodeBuilderState=r}return r}_createNodeBuilderState(e){return new fN(e.vertexShader,e.fragmentShader,e.computeShader,e.getAttributesArray(),e.getBindings(),e.updateNodes,e.updateBeforeNodes,e.updateAfterNodes,e.observer,e.transforms)}getEnvironmentNode(e){this.updateEnvironment(e);let t=null;if(e.environmentNode&&e.environmentNode.isNode)t=e.environmentNode;else{const r=this.get(e);r.environmentNode&&(t=r.environmentNode)}return t}getBackgroundNode(e){this.updateBackground(e);let t=null;if(e.backgroundNode&&e.backgroundNode.isNode)t=e.backgroundNode;else{const r=this.get(e);r.backgroundNode&&(t=r.backgroundNode)}return t}getFogNode(e){return this.updateFog(e),e.fogNode||this.get(e).fogNode||null}getCacheKey(e,t){fS[0]=e,fS[1]=t;const r=this.renderer.info.calls,s=this.callHashCache.get(fS)||{};if(s.callId!==r){const i=this.getEnvironmentNode(e),n=this.getFogNode(e);t&&yS.push(t.getCacheKey(!0)),i&&yS.push(i.getCacheKey()),n&&yS.push(n.getCacheKey()),yS.push(this.renderer.getOutputRenderTarget()&&this.renderer.getOutputRenderTarget().multiview?1:0),yS.push(this.renderer.shadowMap.enabled?1:0),yS.push(this.renderer.shadowMap.type),s.callId=r,s.cacheKey=Vs(yS),this.callHashCache.set(fS,s),yS.length=0}return fS[0]=null,fS[1]=null,s.cacheKey}get isToneMappingState(){return!this.renderer.getRenderTarget()}updateBackground(e){const t=this.get(e),r=e.background;if(r){const s=0===e.backgroundBlurriness&&t.backgroundBlurriness>0||e.backgroundBlurriness>0&&0===t.backgroundBlurriness;if(t.background!==r||s){const i=this.getCacheNode("background",r,()=>{if(!0===r.isCubeTexture||r.mapping===he||r.mapping===pe||r.mapping===we){if(e.backgroundBlurriness>0||r.mapping===we)return Df(r);{let e;return e=!0===r.isCubeTexture?Bc(r):Ul(r),Fg(e)}}if(!0===r.isTexture)return Ul(r,Kl.flipY()).setUpdateMatrix(!0);!0!==r.isColor&&o("WebGPUNodes: Unsupported background configuration.",r)},s);t.backgroundNode=i,t.background=r,t.backgroundBlurriness=e.backgroundBlurriness}}else t.backgroundNode&&(delete t.backgroundNode,delete t.background)}getCacheNode(e,t,r,s=!1){const i=this.cacheLib[e]||(this.cacheLib[e]=new WeakMap);let n=i.get(t);return(void 0===n||s)&&(n=r(),i.set(t,n)),n}updateFog(e){const t=this.get(e),r=e.fog;if(r){if(t.fog!==r){const e=this.getCacheNode("fog",r,()=>{if(r.isFogExp2){const e=Pc("color","color",r).setGroup(Ta),t=Pc("density","float",r).setGroup(Ta);return _T(e,xT(t))}if(r.isFog){const e=Pc("color","color",r).setGroup(Ta),t=Pc("near","float",r).setGroup(Ta),s=Pc("far","float",r).setGroup(Ta);return _T(e,bT(t,s))}o("Renderer: Unsupported fog configuration.",r)});t.fogNode=e,t.fog=r}}else delete t.fogNode,delete t.fog}updateEnvironment(e){const t=this.get(e),r=e.environment;if(r){if(t.environment!==r){const e=this.getCacheNode("environment",r,()=>!0===r.isCubeTexture?Bc(r):!0===r.isTexture?Ul(r):void o("Nodes: Unsupported environment configuration.",r));t.environmentNode=e,t.environment=r}}else t.environmentNode&&(delete t.environmentNode,delete t.environment)}getNodeFrame(e=this.renderer,t=null,r=null,s=null,i=null){const n=this.nodeFrame;return n.renderer=e,n.scene=t,n.object=r,n.camera=s,n.material=i,n}getNodeFrameForRender(e){return this.getNodeFrame(e.renderer,e.scene,e.object,e.camera,e.material)}getOutputCacheKey(){const e=this.renderer;return e.toneMapping+","+e.currentColorSpace+","+e.xr.isPresenting}hasOutputChange(e){return mS.get(e)!==this.getOutputCacheKey()}getOutputNode(e){const t=this.renderer,r=this.getOutputCacheKey(),s=e.isArrayTexture?Dx(e,Sn(Kl,Wl("gl_ViewID_OVR"))).renderOutput(t.toneMapping,t.currentColorSpace):Ul(e,Kl).renderOutput(t.toneMapping,t.currentColorSpace);return mS.set(e,r),s}updateBefore(e){const t=e.getNodeBuilderState();for(const r of t.updateBeforeNodes)this.getNodeFrameForRender(e).updateBeforeNode(r)}updateAfter(e){const t=e.getNodeBuilderState();for(const r of t.updateAfterNodes)this.getNodeFrameForRender(e).updateAfterNode(r)}updateForCompute(e){const t=this.getNodeFrame(),r=this.getForCompute(e);for(const e of r.updateNodes)t.updateNode(e)}updateForRender(e){const t=this.getNodeFrameForRender(e),r=e.getNodeBuilderState();for(const e of r.updateNodes)t.updateNode(e)}needsRefresh(e){const t=this.getNodeFrameForRender(e);return e.getMonitor().needsRefresh(e,t)}dispose(){super.dispose(),this.nodeFrame=new XN,this.nodeBuilderCache=new Map,this.cacheLib={}}}const xS=new Xe;class TS{constructor(e=null){this.version=0,this.clipIntersection=null,this.cacheKey="",this.shadowPass=!1,this.viewNormalMatrix=new n,this.clippingGroupContexts=new WeakMap,this.intersectionPlanes=[],this.unionPlanes=[],this.parentVersion=null,null!==e&&(this.viewNormalMatrix=e.viewNormalMatrix,this.clippingGroupContexts=e.clippingGroupContexts,this.shadowPass=e.shadowPass,this.viewMatrix=e.viewMatrix)}projectPlanes(e,t,r){const s=e.length;for(let i=0;i0,alpha:!0,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:this.getFramebufferScaleFactor()},i=new XRWebGLLayer(e,s,r);this._glBaseLayer=i,e.updateRenderState({baseLayer:i}),t.setPixelRatio(1),t._setXRLayerSize(i.framebufferWidth,i.framebufferHeight),this._xrRenderTarget=new wS(i.framebufferWidth,i.framebufferHeight,{format:Ae,type:$e,colorSpace:t.outputColorSpace,stencilBuffer:t.stencil,resolveDepthBuffer:!1===i.ignoreDepthValues,resolveStencilBuffer:!1===i.ignoreDepthValues}),this._xrRenderTarget._isOpaqueFramebuffer=!0,this._referenceSpace=await e.requestReferenceSpace(this.getReferenceSpaceType())}this.setFoveation(this.getFoveation()),t._animation.setAnimationLoop(this._onAnimationFrame),t._animation.setContext(e),t._animation.start(),this.isPresenting=!0,this.dispatchEvent({type:"sessionstart"})}}updateCamera(e){const t=this._session;if(null===t)return;const r=e.near,s=e.far,i=this._cameraXR,n=this._cameraL,a=this._cameraR;i.near=a.near=n.near=r,i.far=a.far=n.far=s,i.isMultiViewCamera=this._useMultiview,this._currentDepthNear===i.near&&this._currentDepthFar===i.far||(t.updateRenderState({depthNear:i.near,depthFar:i.far}),this._currentDepthNear=i.near,this._currentDepthFar=i.far),i.layers.mask=6|e.layers.mask,n.layers.mask=-5&i.layers.mask,a.layers.mask=-3&i.layers.mask;const o=e.parent,u=i.cameras;FS(i,o);for(let e=0;e=0&&(r[n]=null,t[n].disconnect(i))}for(let s=0;s=r.length){r.push(i),n=e;break}if(null===r[e]){r[e]=i,n=e;break}}if(-1===n)break}const a=t[n];a&&a.connect(i)}}function US(e){return"quad"===e.type?this._glBinding.createQuadLayer({transform:new XRRigidTransform(e.translation,e.quaternion),width:e.width/2,height:e.height/2,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1}):this._glBinding.createCylinderLayer({transform:new XRRigidTransform(e.translation,e.quaternion),radius:e.radius,centralAngle:e.centralAngle,aspectRatio:e.aspectRatio,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1})}function IS(e,t){if(void 0===t)return;const r=this._cameraXR,i=this._renderer,n=i.backend,a=this._glBaseLayer,o=this.getReferenceSpace(),u=t.getViewerPose(o);if(this._xrFrame=t,null!==u){const e=u.views;null!==this._glBaseLayer&&n.setXRTarget(a.framebuffer);let t=!1;e.length!==r.cameras.length&&(r.cameras.length=0,t=!0);for(let i=0;i{await this.compileAsync(e,t);const s=this._renderLists.get(e,t),i=this._renderContexts.get(this._renderTarget,this._mrt),n=e.overrideMaterial||r.material,a=this._objects.get(r,n,e,t,s.lightsNode,i,i.clippingContext),{fragmentShader:o,vertexShader:u}=a.getNodeBuilderState();return{fragmentShader:o,vertexShader:u}}}}async init(){return null!==this._initPromise||(this._initPromise=new Promise(async(e,t)=>{let r=this.backend;try{await r.init(this)}catch(e){if(null===this._getFallback)return void t(e);try{this.backend=r=this._getFallback(e),await r.init(this)}catch(e){return void t(e)}}this._nodes=new bS(this,r),this._animation=new my(this,this._nodes,this.info),this._attributes=new Ay(r),this._background=new pN(this,this._nodes),this._geometries=new By(this._attributes,this.info),this._textures=new Yy(this,r,this.info),this._pipelines=new Oy(r,this._nodes),this._bindings=new Vy(r,this._nodes,this._textures,this._attributes,this._pipelines,this.info),this._objects=new Ty(this,this._nodes,this._geometries,this._pipelines,this._bindings,this.info),this._renderLists=new Hy(this.lighting),this._bundles=new NS,this._renderContexts=new Ky(this),this._animation.start(),this._initialized=!0,this._inspector.init(),e(this)})),this._initPromise}get domElement(){return this._canvasTarget.domElement}get coordinateSystem(){return this.backend.coordinateSystem}async compileAsync(e,t,r=null){if(!0===this._isDeviceLost)return;!1===this._initialized&&await this.init();const s=this._nodes.nodeFrame,i=s.renderId,n=this._currentRenderContext,a=this._currentRenderObjectFunction,o=this._handleObjectFunction,u=this._compilationPromises;null===r&&(r=e);const l=!0===e.isScene?e:!0===r.isScene?r:VS,d=this.needsFrameBufferTarget&&null===this._renderTarget?this._getFrameBufferTarget():this._renderTarget||this._outputRenderTarget,c=this._renderContexts.get(d,this._mrt),h=this._activeMipmapLevel,p=[];this._currentRenderContext=c,this._currentRenderObjectFunction=this.renderObject,this._handleObjectFunction=this._createObjectPipeline,this._compilationPromises=p,s.renderId++,s.update(),c.depth=this.depth,c.stencil=this.stencil,c.clippingContext||(c.clippingContext=new TS),c.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,d);const g=this._renderLists.get(l,t);if(g.begin(),this._projectObject(e,t,0,g,c.clippingContext),r!==e&&r.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&g.pushLight(e)}),g.finish(),null!==d){this._textures.updateRenderTarget(d,h);const e=this._textures.get(d);c.textures=e.textures,c.depthTexture=e.depthTexture}else c.textures=null,c.depthTexture=null;r!==e?this._background.update(r,g,c):this._background.update(l,g,c);const m=g.opaque,f=g.transparent,y=g.transparentDoublePass,b=g.lightsNode;!0===this.opaque&&m.length>0&&this._renderObjects(m,t,l,b),!0===this.transparent&&f.length>0&&this._renderTransparents(f,y,t,l,b),s.renderId=i,this._currentRenderContext=n,this._currentRenderObjectFunction=a,this._handleObjectFunction=o,this._compilationPromises=u;for(const e of p){const t=this._objects.get(e.object,e.material,e.scene,e.camera,e.lightsNode,e.renderContext,e.clippingContext,e.passId);t.drawRange=e.object.geometry.drawRange,t.group=e.group,this._geometries.updateForRender(t),await this._nodes.getForRenderAsync(t),this._nodes.updateBefore(t),this._nodes.updateForRender(t),this._bindings.updateForRender(t);const r=[];this._pipelines.getForRender(t,r),r.length>0&&await Promise.all(r),this._nodes.updateAfter(t),await ut()}}async renderAsync(e,t){v('Renderer: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.render(e,t)}async waitForGPU(){o("Renderer: waitForGPU() has been removed. Read https://github.com/mrdoob/three.js/issues/32012 for more information.")}set inspector(e){null!==this._inspector&&this._inspector.setRenderer(null),this._inspector=e,this._inspector.setRenderer(this)}get inspector(){return this._inspector}set highPrecision(e){const t=this.contextNode.value;!0===e?(t.modelViewMatrix=qd,t.modelNormalViewMatrix=jd):this.highPrecision&&(delete t.modelViewMatrix,delete t.modelNormalViewMatrix)}get highPrecision(){const e=this.contextNode.value;return e.modelViewMatrix===qd&&e.modelNormalViewMatrix===jd}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getOutputBufferType(){return this._outputBufferType}getColorBufferType(){return v('Renderer: ".getColorBufferType()" has been renamed to ".getOutputBufferType()".'),this.getOutputBufferType()}_onDeviceLost(e){let t=`THREE.WebGPURenderer: ${e.api} Device Lost:\n\nMessage: ${e.message}`;e.reason&&(t+=`\nReason: ${e.reason}`),o(t),this._isDeviceLost=!0}_renderBundle(e,t,r){const{bundleGroup:s,camera:i,renderList:n}=e,a=this._currentRenderContext,o=this._bundles.get(s,i),u=this.backend.get(o);void 0===u.renderContexts&&(u.renderContexts=new Set);const l=s.version!==u.version,d=!1===u.renderContexts.has(a)||l;if(u.renderContexts.add(a),d){this.backend.beginBundle(a),(void 0===u.renderObjects||l)&&(u.renderObjects=[]),this._currentRenderBundle=o;const{transparentDoublePass:e,transparent:d,opaque:c}=n;!0===this.opaque&&c.length>0&&this._renderObjects(c,i,t,r),!0===this.transparent&&d.length>0&&this._renderTransparents(d,e,i,t,r),this._currentRenderBundle=null,this.backend.finishBundle(a,o),u.version=s.version}else{const{renderObjects:e}=u;for(let t=0,r=e.length;t>=h,g.viewportValue.height>>=h,g.viewportValue.minDepth=T,g.viewportValue.maxDepth=_,g.viewport=!1===g.viewportValue.equals(GS),g.scissorValue.copy(b).multiplyScalar(x).floor(),g.scissor=f._scissorTest&&!1===g.scissorValue.equals(GS),g.scissorValue.width>>=h,g.scissorValue.height>>=h,g.clippingContext||(g.clippingContext=new TS),g.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,p);const v=t.isArrayCamera?zS:$S;t.isArrayCamera||(WS.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),v.setFromProjectionMatrix(WS,t.coordinateSystem,t.reversedDepth));const N=this._renderLists.get(e,t);if(N.begin(),this._projectObject(e,t,0,N,g.clippingContext),N.finish(),!0===this.sortObjects&&N.sort(this._opaqueSort,this._transparentSort),null!==p){this._textures.updateRenderTarget(p,h);const e=this._textures.get(p);g.textures=e.textures,g.depthTexture=e.depthTexture,g.width=e.width,g.height=e.height,g.renderTarget=p,g.depth=p.depthBuffer,g.stencil=p.stencilBuffer}else g.textures=null,g.depthTexture=null,g.width=kS.width,g.height=kS.height,g.depth=this.depth,g.stencil=this.stencil;g.width>>=h,g.height>>=h,g.activeCubeFace=c,g.activeMipmapLevel=h,g.occlusionQueryCount=N.occlusionQueryCount,g.scissorValue.max(HS.set(0,0,0,0)),g.scissorValue.x+g.scissorValue.width>g.width&&(g.scissorValue.width=Math.max(g.width-g.scissorValue.x,0)),g.scissorValue.y+g.scissorValue.height>g.height&&(g.scissorValue.height=Math.max(g.height-g.scissorValue.y,0)),this._background.update(l,N,g),g.camera=t,this.backend.beginRender(g);const{bundles:S,lightsNode:R,transparentDoublePass:E,transparent:A,opaque:w}=N;return S.length>0&&this._renderBundles(S,l,R),!0===this.opaque&&w.length>0&&this._renderObjects(w,t,l,R),!0===this.transparent&&A.length>0&&this._renderTransparents(A,E,t,l,R),this.backend.finishRender(g),i.renderId=n,this._currentRenderContext=a,this._currentRenderObjectFunction=o,this._handleObjectFunction=u,this._callDepth--,null!==s&&(this.setRenderTarget(d,c,h),this._renderOutput(p)),l.onAfterRender(this,e,t,p),this.inspector.finishRender(this.backend.getTimestampUID(g)),g}_setXRLayerSize(e,t){this._canvasTarget._width=e,this._canvasTarget._height=t,this.setViewport(0,0,e,t)}_renderOutput(e){const t=this._quad;this._nodes.hasOutputChange(e.texture)&&(t.material.fragmentNode=this._nodes.getOutputNode(e.texture),t.material.needsUpdate=!0);const r=this.autoClear,s=this.xr.enabled;this.autoClear=!1,this.xr.enabled=!1,this._renderScene(t,t.camera,!1),this.autoClear=r,this.xr.enabled=s}getMaxAnisotropy(){return this.backend.getMaxAnisotropy()}getActiveCubeFace(){return this._activeCubeFace}getActiveMipmapLevel(){return this._activeMipmapLevel}async setAnimationLoop(e){!1===this._initialized&&await this.init(),this._animation.setAnimationLoop(e)}getAnimationLoop(){return this._animation.getAnimationLoop()}async getArrayBufferAsync(e){return await this.backend.getArrayBufferAsync(e)}getContext(){return this.backend.getContext()}getPixelRatio(){return this._canvasTarget.getPixelRatio()}getDrawingBufferSize(e){return this._canvasTarget.getDrawingBufferSize(e)}getSize(e){return this._canvasTarget.getSize(e)}setPixelRatio(e=1){this._canvasTarget.setPixelRatio(e)}setDrawingBufferSize(e,t,r){this.xr&&this.xr.isPresenting||this._canvasTarget.setDrawingBufferSize(e,t,r)}setSize(e,t,r=!0){this.xr&&this.xr.isPresenting||this._canvasTarget.setSize(e,t,r)}setOpaqueSort(e){this._opaqueSort=e}setTransparentSort(e){this._transparentSort=e}getScissor(e){return this._canvasTarget.getScissor(e)}setScissor(e,t,r,s){this._canvasTarget.setScissor(e,t,r,s)}getScissorTest(){return this._canvasTarget.getScissorTest()}setScissorTest(e){this._canvasTarget.setScissorTest(e),this.backend.setScissorTest(e)}getViewport(e){return this._canvasTarget.getViewport(e)}setViewport(e,t,r,s,i=0,n=1){this._canvasTarget.setViewport(e,t,r,s,i,n)}getClearColor(e){return e.copy(this._clearColor)}setClearColor(e,t=1){this._clearColor.set(e),this._clearColor.a=t}getClearAlpha(){return this._clearColor.a}setClearAlpha(e){this._clearColor.a=e}getClearDepth(){return!0===this.reversedDepthBuffer?1-this._clearDepth:this._clearDepth}setClearDepth(e){this._clearDepth=e}getClearStencil(){return this._clearStencil}setClearStencil(e){this._clearStencil=e}isOccluded(e){const t=this._currentRenderContext;return t&&this.backend.isOccluded(t,e)}clear(e=!0,t=!0,r=!0){if(!1===this._initialized)throw new Error('Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.');const s=this._renderTarget||this._getFrameBufferTarget();let i=null;if(null!==s){this._textures.updateRenderTarget(s);const e=this._textures.get(s);i=this._renderContexts.get(s),i.textures=e.textures,i.depthTexture=e.depthTexture,i.width=e.width,i.height=e.height,i.renderTarget=s,i.depth=s.depthBuffer,i.stencil=s.stencilBuffer;const t=this.backend.getClearColor();i.clearColorValue.r=t.r,i.clearColorValue.g=t.g,i.clearColorValue.b=t.b,i.clearColorValue.a=t.a,i.clearDepthValue=this.getClearDepth(),i.clearStencilValue=this.getClearStencil(),i.activeCubeFace=this.getActiveCubeFace(),i.activeMipmapLevel=this.getActiveMipmapLevel()}this.backend.clear(e,t,r,i),null!==s&&null===this._renderTarget&&this._renderOutput(s)}clearColor(){this.clear(!0,!1,!1)}clearDepth(){this.clear(!1,!0,!1)}clearStencil(){this.clear(!1,!1,!0)}async clearAsync(e=!0,t=!0,r=!0){v('Renderer: "clearAsync()" has been deprecated. Use "clear()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.clear(e,t,r)}async clearColorAsync(){v('Renderer: "clearColorAsync()" has been deprecated. Use "clearColor()" and "await renderer.init();" when creating the renderer.'),this.clear(!0,!1,!1)}async clearDepthAsync(){v('Renderer: "clearDepthAsync()" has been deprecated. Use "clearDepth()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!0,!1)}async clearStencilAsync(){v('Renderer: "clearStencilAsync()" has been deprecated. Use "clearStencil()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!1,!0)}get needsFrameBufferTarget(){const e=this.currentToneMapping!==m,t=this.currentColorSpace!==p.workingColorSpace;return e||t}get samples(){return this._samples}get currentSamples(){let e=this._samples;return null!==this._renderTarget?e=this._renderTarget.samples:this.needsFrameBufferTarget&&(e=0),e}get currentToneMapping(){return this.isOutputTarget?this.toneMapping:m}get currentColorSpace(){return this.isOutputTarget?this.outputColorSpace:p.workingColorSpace}get isOutputTarget(){return this._renderTarget===this._outputRenderTarget||null===this._renderTarget}dispose(){!0===this._initialized&&(this.info.dispose(),this.backend.dispose(),this._animation.dispose(),this._objects.dispose(),this._geometries.dispose(),this._pipelines.dispose(),this._nodes.dispose(),this._bindings.dispose(),this._renderLists.dispose(),this._renderContexts.dispose(),this._textures.dispose(),null!==this._frameBufferTarget&&this._frameBufferTarget.dispose(),Object.values(this.backend.timestampQueryPool).forEach(e=>{null!==e&&e.dispose()})),this.setRenderTarget(null),this.setAnimationLoop(null)}setRenderTarget(e,t=0,r=0){this._renderTarget=e,this._activeCubeFace=t,this._activeMipmapLevel=r}getRenderTarget(){return this._renderTarget}setOutputRenderTarget(e){this._outputRenderTarget=e}getOutputRenderTarget(){return this._outputRenderTarget}setCanvasTarget(e){this._canvasTarget.removeEventListener("resize",this._onCanvasTargetResize),this._canvasTarget=e,this._canvasTarget.addEventListener("resize",this._onCanvasTargetResize)}getCanvasTarget(){return this._canvasTarget}_resetXRState(){this.backend.setXRTarget(null),this.setOutputRenderTarget(null),this.setRenderTarget(null),this._frameBufferTarget.dispose(),this._frameBufferTarget=null}setRenderObjectFunction(e){this._renderObjectFunction=e}getRenderObjectFunction(){return this._renderObjectFunction}compute(e,t=null){if(!0===this._isDeviceLost)return;if(!1===this._initialized)return d("Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead."),this.computeAsync(e,t);const r=this._nodes.nodeFrame,s=r.renderId;this.info.calls++,this.info.compute.calls++,this.info.compute.frameCalls++,r.renderId=this.info.calls,this.backend.updateTimeStampUID(e),this.inspector.beginCompute(this.backend.getTimestampUID(e),e);const i=this.backend,n=this._pipelines,a=this._bindings,o=this._nodes,u=Array.isArray(e)?e:[e];if(void 0===u[0]||!0!==u[0].isComputeNode)throw new Error("THREE.Renderer: .compute() expects a ComputeNode.");i.beginCompute(e);for(const r of u){if(!1===n.has(r)){const e=()=>{r.removeEventListener("dispose",e),n.delete(r),a.deleteForCompute(r),o.delete(r)};r.addEventListener("dispose",e);const t=r.onInitFunction;null!==t&&t.call(r,{renderer:this})}o.updateForCompute(r),a.updateForCompute(r);const s=a.getForCompute(r),u=n.getForCompute(r,s);i.compute(e,r,s,u,t)}i.finishCompute(e),r.renderId=s,this.inspector.finishCompute(this.backend.getTimestampUID(e))}async computeAsync(e,t=null){!1===this._initialized&&await this.init(),this.compute(e,t)}async hasFeatureAsync(e){return v('Renderer: "hasFeatureAsync()" has been deprecated. Use "hasFeature()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.hasFeature(e)}async resolveTimestampsAsync(e="render"){return!1===this._initialized&&await this.init(),this.backend.resolveTimestampsAsync(e)}hasFeature(e){if(!1===this._initialized)throw new Error('Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.');return this.backend.hasFeature(e)}hasInitialized(){return this._initialized}async initTextureAsync(e){v('Renderer: "initTextureAsync()" has been deprecated. Use "initTexture()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.initTexture(e)}initTexture(e){if(!1===this._initialized)throw new Error('Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateTexture(e)}initRenderTarget(e){if(!1===this._initialized)throw new Error('Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateRenderTarget(e);const t=this._textures.get(e),r=this._renderContexts.get(e);r.textures=t.textures,r.depthTexture=t.depthTexture,r.width=t.width,r.height=t.height,r.renderTarget=e,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,this.backend.initRenderTarget(r)}copyFramebufferToTexture(e,t=null){if(null!==t)if(t.isVector2)t=HS.set(t.x,t.y,e.image.width,e.image.height).floor();else{if(!t.isVector4)return void o("Renderer.copyFramebufferToTexture: Invalid rectangle.");t=HS.copy(t).floor()}else t=HS.set(0,0,e.image.width,e.image.height);let r,s=this._currentRenderContext;null!==s?r=s.renderTarget:(r=this._renderTarget||this._getFrameBufferTarget(),null!==r&&(this._textures.updateRenderTarget(r),s=this._textures.get(r))),this._textures.updateTexture(e,{renderTarget:r}),this.backend.copyFramebufferToTexture(e,s,t),this._inspector.copyFramebufferToTexture(e)}copyTextureToTexture(e,t,r=null,s=null,i=0,n=0){this._textures.updateTexture(e),this._textures.updateTexture(t),this.backend.copyTextureToTexture(e,t,r,s,i,n),this._inspector.copyTextureToTexture(e,t)}async readRenderTargetPixelsAsync(e,t,r,s,i,n=0,a=0){return this.backend.copyTextureToBuffer(e.textures[n],t,r,s,i,a)}_projectObject(e,t,r,s,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)r=e.renderOrder,e.isClippingGroup&&e.enabled&&(i=i.getGroupContext(e));else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)s.pushLight(e);else if(e.isSprite){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsSprite(e,t)){!0===this.sortObjects&&HS.setFromMatrixPosition(e.matrixWorld).applyMatrix4(WS);const{geometry:t,material:n}=e;n.visible&&s.push(e,t,n,r,HS.z,null,i)}}else if(e.isLineLoop)o("Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.");else if(e.isMesh||e.isLine||e.isPoints){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsObject(e,t)){const{geometry:t,material:n}=e;if(!0===this.sortObjects&&(null===t.boundingSphere&&t.computeBoundingSphere(),HS.copy(t.boundingSphere.center).applyMatrix4(e.matrixWorld).applyMatrix4(WS)),Array.isArray(n)){const a=t.groups;for(let o=0,u=a.length;o0){for(const{material:e}of t)e.side=L;this._renderObjects(t,r,s,i,"backSide");for(const{material:e}of t)e.side=ht;this._renderObjects(e,r,s,i);for(const{material:e}of t)e.side=P}else this._renderObjects(e,r,s,i)}_renderObjects(e,t,r,s,i=null){for(let n=0,a=e.length;n(t.not().discard(),e))(u)}}e.depthNode&&e.depthNode.isNode&&(l=e.depthNode),e.castShadowPositionNode&&e.castShadowPositionNode.isNode?o=e.castShadowPositionNode:e.positionNode&&e.positionNode.isNode&&(o=e.positionNode),r={version:t,colorNode:u,depthNode:l,positionNode:o},this._cacheShadowNodes.set(e,r)}return r}renderObject(e,t,r,s,i,n,a,o=null,u=null){let l,d,c,h,p=!1;if(e.onBeforeRender(this,t,r,s,i,n),!0===i.allowOverride&&null!==t.overrideMaterial){const e=t.overrideMaterial;if(p=!0,l=e.isNodeMaterial?e.colorNode:null,d=e.isNodeMaterial?e.depthNode:null,c=e.isNodeMaterial?e.positionNode:null,h=t.overrideMaterial.side,i.positionNode&&i.positionNode.isNode&&(e.positionNode=i.positionNode),e.alphaTest=i.alphaTest,e.alphaMap=i.alphaMap,e.transparent=i.transparent||i.transmission>0||i.transmissionNode&&i.transmissionNode.isNode||i.backdropNode&&i.backdropNode.isNode,e.isShadowPassMaterial){const{colorNode:t,depthNode:r,positionNode:s}=this._getShadowNodes(i);this.shadowMap.type===tt?e.side=null!==i.shadowSide?i.shadowSide:i.side:e.side=null!==i.shadowSide?i.shadowSide:qS[i.side],null!==t&&(e.colorNode=t),null!==r&&(e.depthNode=r),null!==s&&(e.positionNode=s)}i=e}!0===i.transparent&&i.side===P&&!1===i.forceSinglePass?(i.side=L,this._handleObjectFunction(e,i,t,r,a,n,o,"backSide"),i.side=ht,this._handleObjectFunction(e,i,t,r,a,n,o,u),i.side=P):this._handleObjectFunction(e,i,t,r,a,n,o,u),p&&(t.overrideMaterial.colorNode=l,t.overrideMaterial.depthNode=d,t.overrideMaterial.positionNode=c,t.overrideMaterial.side=h),e.onAfterRender(this,t,r,s,i,n)}hasCompatibility(e){return this.backend.hasCompatibility(e)}_renderObjectDirect(e,t,r,s,i,n,a,o){const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);if(u.drawRange=e.geometry.drawRange,u.group=n,null!==this._currentRenderBundle){this.backend.get(this._currentRenderBundle).renderObjects.push(u),u.bundle=this._currentRenderBundle.bundleGroup}const l=this._nodes.needsRefresh(u);l&&(this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u)),this._pipelines.updateForRender(u),this._pipelines.isReady(u)&&(this.backend.draw(u,this.info),l&&this._nodes.updateAfter(u))}_createObjectPipeline(e,t,r,s,i,n,a,o){if(null!==this._compilationPromises)return void this._compilationPromises.push({object:e,material:t,scene:r,camera:s,lightsNode:i,group:n,clippingContext:a,passId:o,renderContext:this._currentRenderContext});const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);u.drawRange=e.geometry.drawRange,u.group=n,this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u),this._pipelines.getForRender(u,this._compilationPromises),this._nodes.updateAfter(u)}_onCanvasTargetResize(){this._initialized&&this.backend.updateSize()}get compile(){return this.compileAsync}}class XS{constructor(e=""){this.name=e,this.visibility=0}setVisibility(e){this.visibility|=e}getVisibility(){return this.visibility}clone(){return Object.assign(new this.constructor,this)}}class KS extends XS{constructor(e,t=null){super(e),this.isBuffer=!0,this.bytesPerElement=Float32Array.BYTES_PER_ELEMENT,this._buffer=t,this._updateRanges=[]}get updateRanges(){return this._updateRanges}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}get byteLength(){return(e=this._buffer.byteLength)+(Ey-e%Ey)%Ey;var e}get buffer(){return this._buffer}update(){return!0}}class QS extends KS{constructor(e,t=null){super(e,t),this.isUniformBuffer=!0}}let YS=0;class ZS extends QS{constructor(e,t){super("UniformBuffer_"+YS++,e?e.value:null),this.nodeUniform=e,this.groupNode=t,this.isNodeUniformBuffer=!0}set updateRanges(e){this.nodeUniform.updateRanges=e}get updateRanges(){return this.nodeUniform.updateRanges}addUpdateRange(e,t){this.nodeUniform.addUpdateRange(e,t)}clearUpdateRanges(){this.nodeUniform.clearUpdateRanges()}get buffer(){return this.nodeUniform.value}}class JS extends QS{constructor(e){super(e),this.isUniformsGroup=!0,this._values=null,this.uniforms=[],this._updateRangeCache=new Map}addUniformUpdateRange(e){const t=e.index;if(!0!==this._updateRangeCache.has(t)){const r=this.updateRanges,s={start:e.offset,count:e.itemSize};r.push(s),this._updateRangeCache.set(t,s)}}clearUpdateRanges(){this._updateRangeCache.clear(),super.clearUpdateRanges()}addUniform(e){return this.uniforms.push(e),this}removeUniform(e){const t=this.uniforms.indexOf(e);return-1!==t&&this.uniforms.splice(t,1),this}get values(){return null===this._values&&(this._values=Array.from(this.buffer)),this._values}get buffer(){let e=this._buffer;if(null===e){const t=this.byteLength;e=new Float32Array(new ArrayBuffer(t)),this._buffer=e}return e}get byteLength(){const e=this.bytesPerElement;let t=0;for(let r=0,s=this.uniforms.length;r{this.generation=null,this.version=-1},this.texture=t,this.version=t?t.version:-1,this.generation=null,this.samplerKey="",this.isSampler=!0}set texture(e){this._texture!==e&&(this._texture&&this._texture.removeEventListener("dispose",this._onTextureDispose),this._texture=e,this.generation=null,this.version=-1,this._texture&&this._texture.addEventListener("dispose",this._onTextureDispose))}get texture(){return this._texture}update(){const{texture:e,version:t}=this;return t!==e.version&&(this.version=e.version,!0)}clone(){const e=super.clone();return e._texture=null,e._onTextureDispose=()=>{e.generation=null,e.version=-1},e.texture=this.texture,e}}let sR=0;class iR extends rR{constructor(e,t){super(e,t),this.id=sR++,this.store=!1,this.mipLevel=0,this.isSampledTexture=!0}}class nR extends iR{constructor(e,t,r,s=null){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r,this.access=s}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class aR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledCubeTexture=!0}}class oR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledTexture3D=!0}}const uR={bitcast_int_uint:new pT("uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }"),bitcast_uint_int:new pT("uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }")},lR={textureDimensions:"textureSize",equals:"equal",bitcast_float_int:"floatBitsToInt",bitcast_int_float:"intBitsToFloat",bitcast_uint_float:"uintBitsToFloat",bitcast_float_uint:"floatBitsToUint",bitcast_uint_int:"tsl_bitcast_uint_to_int",bitcast_int_uint:"tsl_bitcast_int_to_uint",floatpack_snorm_2x16:"packSnorm2x16",floatpack_unorm_2x16:"packUnorm2x16",floatpack_float16_2x16:"packHalf2x16",floatunpack_snorm_2x16:"unpackSnorm2x16",floatunpack_unorm_2x16:"unpackUnorm2x16",floatunpack_float16_2x16:"unpackHalf2x16"},dR={low:"lowp",medium:"mediump",high:"highp"},cR={swizzleAssign:!0,storageBuffer:!1},hR={perspective:"smooth",linear:"noperspective"},pR={centroid:"centroid"},gR="\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision highp sampler2DShadow;\nprecision highp sampler2DArrayShadow;\nprecision highp samplerCubeShadow;\n";class mR extends jN{constructor(e,t){super(e,t,new gS),this.uniformGroups={},this.transforms=[],this.extensions={},this.builtins={vertex:[],fragment:[],compute:[]}}needsToWorkingColorSpace(e){return!0===e.isVideoTexture&&e.colorSpace!==T}_include(e){const t=uR[e];return t.build(this),this.addInclude(t),t}getMethod(e){return void 0!==uR[e]&&this._include(e),lR[e]||e}getBitcastMethod(e,t){return this.getMethod(`bitcast_${t}_${e}`)}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`${e} ? ${t} : ${r}`}getOutputStructName(){return""}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(this.getType(e.type)+" "+e.name);return`${this.getType(t.type)} ${t.name}( ${s.join(", ")} ) {\n\n\t${r.vars}\n\n${r.code}\n\treturn ${r.result};\n\n}`}setupPBO(e){const t=e.value;if(void 0===t.pbo){const e=t.array,r=t.count*t.itemSize,{itemSize:s}=t,i=t.array.constructor.name.toLowerCase().includes("int");let n=i?_t:vt;2===s?n=i?Et:W:3===s?n=i?At:wt:4===s&&(n=i?Ct:Ae);const a={Float32Array:Q,Uint8Array:$e,Uint16Array:Rt,Uint32Array:S,Int8Array:St,Int16Array:Nt,Int32Array:R,Uint8ClampedArray:$e},o=Math.pow(2,Math.ceil(Math.log2(Math.sqrt(r/s))));let u=Math.ceil(r/s/o);o*u*s0?i:"";t=`${r.name} {\n\t${s} ${e.name}[${n}];\n};\n`}else{const t=e.groupNode.name;if(void 0===s[t]){const e=this.uniformGroups[t];if(void 0!==e){const r=[];for(const t of e.uniforms){const e=t.getType(),s=this.getVectorType(e),i=t.nodeUniform.node.precision;let n=`${s} ${t.name};`;null!==i&&(n=dR[i]+" "+n),r.push("\t"+n)}s[t]=r}}i=!0}if(!i){const s=e.node.precision;null!==s&&(t=dR[s]+" "+t),t="uniform "+t,r.push(t)}}let i="";for(const e in s){const t=s[e];i+=this._getGLSLUniformStruct(e,t.join("\n"))+"\n"}return i+=r.join("\n"),i}getTypeFromAttribute(e){let t=super.getTypeFromAttribute(e);if(/^[iu]/.test(t)&&e.gpuType!==R){let r=e;e.isInterleavedBufferAttribute&&(r=e.data);const s=r.array;!1==(s instanceof Uint32Array||s instanceof Int32Array)&&(t=t.slice(1))}return t}getAttributes(e){let t="";if("vertex"===e||"compute"===e){const e=this.getAttributesArray();let r=0;for(const s of e)t+=`layout( location = ${r++} ) in ${s.type} ${s.name};\n`}return t}getStructMembers(e){const t=[];for(const r of e.members)t.push(`\t${r.type} ${r.name};`);return t.join("\n")}getStructs(e){const t=[],r=this.structs[e],s=[];for(const e of r)if(e.output)for(const t of e.members)s.push(`layout( location = ${t.index} ) out ${t.type} ${t.name};`);else{let r="struct "+e.name+" {\n";r+=this.getStructMembers(e),r+="\n};\n",t.push(r)}return 0===s.length&&s.push("layout( location = 0 ) out vec4 fragColor;"),"\n"+s.join("\n")+"\n\n"+t.join("\n")}getVaryings(e){let t="";const r=this.varyings;if("vertex"===e||"compute"===e)for(const s of r){"compute"===e&&(s.needsInterpolation=!0);const r=this.getType(s.type);if(s.needsInterpolation)if(s.interpolationType){t+=`${hR[s.interpolationType]||s.interpolationType} ${pR[s.interpolationSampling]||""} out ${r} ${s.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}out ${r} ${s.name};\n`}else t+=`${r} ${s.name};\n`}else if("fragment"===e)for(const e of r)if(e.needsInterpolation){const r=this.getType(e.type);if(e.interpolationType){t+=`${hR[e.interpolationType]||e.interpolationType} ${pR[e.interpolationSampling]||""} in ${r} ${e.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}in ${r} ${e.name};\n`}}for(const r of this.builtins[e])t+=`${r};\n`;return t}getVertexIndex(){return"uint( gl_VertexID )"}getInstanceIndex(){return"uint( gl_InstanceID )"}getInvocationLocalIndex(){return`uint( gl_InstanceID ) % ${this.object.workgroupSize.reduce((e,t)=>e*t,1)}u`}getSubgroupSize(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node")}getInvocationSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node")}getSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node")}getDrawIndex(){return this.renderer.backend.extensions.has("WEBGL_multi_draw")?"uint( gl_DrawID )":null}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord.xy"}getFragDepth(){return"gl_FragDepth"}enableExtension(e,t,r=this.shaderStage){const s=this.extensions[r]||(this.extensions[r]=new Map);!1===s.has(e)&&s.set(e,{name:e,behavior:t})}getExtensions(e){const t=[];if("vertex"===e){const t=this.renderer.backend.extensions;this.object.isBatchedMesh&&t.has("WEBGL_multi_draw")&&this.enableExtension("GL_ANGLE_multi_draw","require",e)}const r=this.extensions[e];if(void 0!==r)for(const{name:e,behavior:s}of r.values())t.push(`#extension ${e} : ${s}`);return t.join("\n")}getClipDistance(){return"gl_ClipDistance"}isAvailable(e){let t=cR[e];if(void 0===t){let r;switch(t=!1,e){case"float32Filterable":r="OES_texture_float_linear";break;case"clipDistance":r="WEBGL_clip_cull_distance"}if(void 0!==r){const e=this.renderer.backend.extensions;e.has(r)&&(e.get(r),t=!0)}cR[e]=t}return t}isFlipY(){return!0}getUniformBufferLimit(){const e=this.renderer.backend.gl;return e.getParameter(e.MAX_UNIFORM_BLOCK_SIZE)}enableHardwareClipping(e){this.enableExtension("GL_ANGLE_clip_cull_distance","require"),this.builtins.vertex.push(`out float gl_ClipDistance[ ${e} ]`)}enableMultiview(){this.enableExtension("GL_OVR_multiview2","require","fragment"),this.enableExtension("GL_OVR_multiview2","require","vertex"),this.builtins.vertex.push("layout(num_views = 2) in")}registerTransform(e,t){this.transforms.push({varyingName:e,attributeNode:t})}getTransforms(){const e=this.transforms;let t="";for(let r=0;r0&&(r+="\n"),r+=`\t// flow -> ${n}\n\t`),r+=`${s.code}\n\t`,e===i&&"compute"!==t&&(r+="// result\n\t","vertex"===t?(r+="gl_Position = ",r+=`${s.result};`):"fragment"===t&&(e.outputNode.isOutputStructNode||(r+="fragColor = ",r+=`${s.result};`)))}const n=e[t];n.extensions=this.getExtensions(t),n.uniforms=this.getUniforms(t),n.attributes=this.getAttributes(t),n.varyings=this.getVaryings(t),n.vars=this.getVars(t),n.structs=this.getStructs(t),n.codes=this.getCodes(t),n.transforms=this.getTransforms(t),n.flow=r}null!==this.material?(this.vertexShader=this._getGLSLVertexCode(e.vertex),this.fragmentShader=this._getGLSLFragmentCode(e.fragment)):this.computeShader=this._getGLSLVertexCode(e.compute)}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);let a=n.uniformGPU;if(void 0===a){const s=e.groupNode,o=s.name,u=this.getBindGroupArray(o,r);if("texture"===t)a=new nR(i.name,i.node,s),u.push(a);else if("cubeTexture"===t||"cubeDepthTexture"===t)a=new aR(i.name,i.node,s),u.push(a);else if("texture3D"===t)a=new oR(i.name,i.node,s),u.push(a);else if("buffer"===t){i.name=`buffer${e.id}`;const t=this.getSharedDataFromNode(e);let r=t.buffer;void 0===r&&(e.name=`NodeBuffer_${e.id}`,r=new ZS(e,s),r.name=e.name,t.buffer=r),u.push(r),a=r}else{let e=this.uniformGroups[o];void 0===e?(e=new tR(o,s),this.uniformGroups[o]=e,u.push(e)):-1===u.indexOf(e)&&u.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}}let fR=null,yR=null;class bR{constructor(e={}){this.parameters=Object.assign({},e),this.data=new WeakMap,this.renderer=null,this.domElement=null,this.timestampQueryPool={[Mt.RENDER]:null,[Mt.COMPUTE]:null},this.trackTimestamp=!0===e.trackTimestamp}async init(e){this.renderer=e}get coordinateSystem(){}beginRender(){}finishRender(){}beginCompute(){}finishCompute(){}draw(){}compute(){}createProgram(){}destroyProgram(){}createBindings(){}updateBindings(){}updateBinding(){}createRenderPipeline(){}createComputePipeline(){}needsRenderUpdate(){}getRenderCacheKey(){}createNodeBuilder(){}updateSampler(){}createDefaultTexture(){}createTexture(){}updateTexture(){}generateMipmaps(){}destroyTexture(){}async copyTextureToBuffer(){}copyTextureToTexture(){}copyFramebufferToTexture(){}createAttribute(){}createIndexAttribute(){}createStorageAttribute(){}updateAttribute(){}destroyAttribute(){}getContext(){}updateSize(){}updateViewport(){}updateTimeStampUID(e){const t=this.get(e),r=this.renderer.info.frame;let s;s=!0===e.isComputeNode?"c:"+this.renderer.info.compute.frameCalls:"r:"+this.renderer.info.render.frameCalls,t.timestampUID=s+":"+e.id+":f"+r}getTimestampUID(e){return this.get(e).timestampUID}getTimestampFrames(e){const t=this.timestampQueryPool[e];return t?t.getTimestampFrames():[]}_getQueryPool(e){const t=e.startsWith("c:")?Mt.COMPUTE:Mt.RENDER;return this.timestampQueryPool[t]}getTimestamp(e){return this._getQueryPool(e).getTimestamp(e)}hasTimestamp(e){return this._getQueryPool(e).hasTimestamp(e)}isOccluded(){}async resolveTimestampsAsync(e="render"){if(!this.trackTimestamp)return void v("WebGPURenderer: Timestamp tracking is disabled.");const t=this.timestampQueryPool[e];if(!t)return;const r=await t.resolveQueriesAsync();return this.renderer.info[e].timestamp=r,r}async getArrayBufferAsync(){}async hasFeatureAsync(){}hasFeature(){}getMaxAnisotropy(){}getDrawingBufferSize(){return fR=fR||new t,this.renderer.getDrawingBufferSize(fR)}setScissorTest(){}getClearColor(){const e=this.renderer;return yR=yR||new Zy,e.getClearColor(yR),yR.getRGB(yR),yR}getDomElement(){let e=this.domElement;return null===e&&(e=void 0!==this.parameters.canvas?this.parameters.canvas:Bt(),"setAttribute"in e&&e.setAttribute("data-engine",`three.js r${lt} webgpu`),this.domElement=e),e}hasCompatibility(){return!1}initRenderTarget(){}set(e,t){this.data.set(e,t)}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}has(e){return this.data.has(e)}delete(e){this.data.delete(e)}deleteBindGroupData(){}dispose(){}}let xR,TR,_R=0;class vR{constructor(e,t){this.buffers=[e.bufferGPU,t],this.type=e.type,this.bufferType=e.bufferType,this.pbo=e.pbo,this.byteLength=e.byteLength,this.bytesPerElement=e.BYTES_PER_ELEMENT,this.version=e.version,this.isInteger=e.isInteger,this.activeBufferIndex=0,this.baseId=e.id}get id(){return`${this.baseId}|${this.activeBufferIndex}`}get bufferGPU(){return this.buffers[this.activeBufferIndex]}get transformBuffer(){return this.buffers[1^this.activeBufferIndex]}switchBuffers(){this.activeBufferIndex^=1}}class NR{constructor(e){this.backend=e}createAttribute(e,t){const r=this.backend,{gl:s}=r,i=e.array,n=e.usage||s.STATIC_DRAW,a=e.isInterleavedBufferAttribute?e.data:e,o=r.get(a);let u,l=o.bufferGPU;if(void 0===l&&(l=this._createBuffer(s,t,i,n),o.bufferGPU=l,o.bufferType=t,o.version=a.version),i instanceof Float32Array)u=s.FLOAT;else if("undefined"!=typeof Float16Array&&i instanceof Float16Array)u=s.HALF_FLOAT;else if(i instanceof Uint16Array)u=e.isFloat16BufferAttribute?s.HALF_FLOAT:s.UNSIGNED_SHORT;else if(i instanceof Int16Array)u=s.SHORT;else if(i instanceof Uint32Array)u=s.UNSIGNED_INT;else if(i instanceof Int32Array)u=s.INT;else if(i instanceof Int8Array)u=s.BYTE;else if(i instanceof Uint8Array)u=s.UNSIGNED_BYTE;else{if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLBackend: Unsupported buffer data format: "+i);u=s.UNSIGNED_BYTE}let d={bufferGPU:l,bufferType:t,type:u,byteLength:i.byteLength,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,pbo:e.pbo,isInteger:u===s.INT||u===s.UNSIGNED_INT||e.gpuType===R,id:_R++};if(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute){const e=this._createBuffer(s,t,i,n);d=new vR(d,e)}r.set(e,d)}updateAttribute(e){const t=this.backend,{gl:r}=t,s=e.array,i=e.isInterleavedBufferAttribute?e.data:e,n=t.get(i),a=n.bufferType,o=e.isInterleavedBufferAttribute?e.data.updateRanges:e.updateRanges;if(r.bindBuffer(a,n.bufferGPU),0===o.length)r.bufferSubData(a,0,s);else{for(let e=0,t=o.length;e0?this.enable(s.SAMPLE_ALPHA_TO_COVERAGE):this.disable(s.SAMPLE_ALPHA_TO_COVERAGE),r>0&&this.currentClippingPlanes!==r){const e=12288;for(let t=0;t<8;t++)t{!function i(){const n=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(n===e.WAIT_FAILED)return e.deleteSync(t),void s();n!==e.TIMEOUT_EXPIRED?(e.deleteSync(t),r()):requestAnimationFrame(i)}()})}}let ER,AR,wR,CR=!1;class MR{constructor(e){this.backend=e,this.gl=e.gl,this.extensions=e.extensions,this.defaultTextures={},this._srcFramebuffer=null,this._dstFramebuffer=null,!1===CR&&(this._init(),CR=!0)}_init(){const e=this.gl;ER={[Gr]:e.REPEAT,[ve]:e.CLAMP_TO_EDGE,[kr]:e.MIRRORED_REPEAT},AR={[B]:e.NEAREST,[$r]:e.NEAREST_MIPMAP_NEAREST,[at]:e.NEAREST_MIPMAP_LINEAR,[de]:e.LINEAR,[nt]:e.LINEAR_MIPMAP_NEAREST,[Z]:e.LINEAR_MIPMAP_LINEAR},wR={[qr]:e.NEVER,[Hr]:e.ALWAYS,[A]:e.LESS,[w]:e.LEQUAL,[Wr]:e.EQUAL,[M]:e.GEQUAL,[C]:e.GREATER,[zr]:e.NOTEQUAL}}getGLTextureType(e){const{gl:t}=this;let r;return r=!0===e.isCubeTexture?t.TEXTURE_CUBE_MAP:!0===e.isArrayTexture||!0===e.isDataArrayTexture||!0===e.isCompressedArrayTexture?t.TEXTURE_2D_ARRAY:!0===e.isData3DTexture?t.TEXTURE_3D:t.TEXTURE_2D,r}getInternalFormat(e,t,r,s,i=!1){const{gl:n,extensions:a}=this;if(null!==e){if(void 0!==n[e])return n[e];d("WebGLBackend: Attempt to use non-existing WebGL internal format '"+e+"'")}let o=t;if(t===n.RED&&(r===n.FLOAT&&(o=n.R32F),r===n.HALF_FLOAT&&(o=n.R16F),r===n.UNSIGNED_BYTE&&(o=n.R8),r===n.UNSIGNED_SHORT&&(o=n.R16),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RED_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.R8UI),r===n.UNSIGNED_SHORT&&(o=n.R16UI),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RG&&(r===n.FLOAT&&(o=n.RG32F),r===n.HALF_FLOAT&&(o=n.RG16F),r===n.UNSIGNED_BYTE&&(o=n.RG8),r===n.UNSIGNED_SHORT&&(o=n.RG16),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RG_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RG8UI),r===n.UNSIGNED_SHORT&&(o=n.RG16UI),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RGB){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGB32F),r===n.HALF_FLOAT&&(o=n.RGB16F),r===n.UNSIGNED_BYTE&&(o=n.RGB8),r===n.UNSIGNED_SHORT&&(o=n.RGB16),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8:n.RGB8),r===n.UNSIGNED_SHORT_5_6_5&&(o=n.RGB565),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGB4),r===n.UNSIGNED_INT_5_9_9_9_REV&&(o=n.RGB9_E5),r===n.UNSIGNED_INT_10F_11F_11F_REV&&(o=n.R11F_G11F_B10F)}if(t===n.RGB_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGB8UI),r===n.UNSIGNED_SHORT&&(o=n.RGB16UI),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I)),t===n.RGBA){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGBA32F),r===n.HALF_FLOAT&&(o=n.RGBA16F),r===n.UNSIGNED_BYTE&&(o=n.RGBA8),r===n.UNSIGNED_SHORT&&(o=n.RGBA16),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8_ALPHA8:n.RGBA8),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGBA4),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1)}return t===n.RGBA_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGBA8UI),r===n.UNSIGNED_SHORT&&(o=n.RGBA16UI),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I)),t===n.DEPTH_COMPONENT&&(r===n.UNSIGNED_SHORT&&(o=n.DEPTH_COMPONENT16),r===n.UNSIGNED_INT&&(o=n.DEPTH_COMPONENT24),r===n.FLOAT&&(o=n.DEPTH_COMPONENT32F)),t===n.DEPTH_STENCIL&&r===n.UNSIGNED_INT_24_8&&(o=n.DEPTH24_STENCIL8),o!==n.R16F&&o!==n.R32F&&o!==n.RG16F&&o!==n.RG32F&&o!==n.RGBA16F&&o!==n.RGBA32F||a.get("EXT_color_buffer_float"),o}setTextureParameters(e,t){const{gl:r,extensions:s,backend:i}=this,n=p.getPrimaries(p.workingColorSpace),a=t.colorSpace===T?null:p.getPrimaries(t.colorSpace),o=t.colorSpace===T||n===a?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,t.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,t.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,o),r.texParameteri(e,r.TEXTURE_WRAP_S,ER[t.wrapS]),r.texParameteri(e,r.TEXTURE_WRAP_T,ER[t.wrapT]),e!==r.TEXTURE_3D&&e!==r.TEXTURE_2D_ARRAY||t.isArrayTexture||r.texParameteri(e,r.TEXTURE_WRAP_R,ER[t.wrapR]),r.texParameteri(e,r.TEXTURE_MAG_FILTER,AR[t.magFilter]);const u=void 0!==t.mipmaps&&t.mipmaps.length>0,l=t.minFilter===de&&u?Z:t.minFilter;if(r.texParameteri(e,r.TEXTURE_MIN_FILTER,AR[l]),t.compareFunction&&(r.texParameteri(e,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(e,r.TEXTURE_COMPARE_FUNC,wR[t.compareFunction])),!0===s.has("EXT_texture_filter_anisotropic")){if(t.magFilter===B)return;if(t.minFilter!==at&&t.minFilter!==Z)return;if(t.type===Q&&!1===s.has("OES_texture_float_linear"))return;if(t.anisotropy>1){const n=s.get("EXT_texture_filter_anisotropic");r.texParameterf(e,n.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,i.getMaxAnisotropy()))}}}createDefaultTexture(e){const{gl:t,backend:r,defaultTextures:s}=this,i=this.getGLTextureType(e);let n=s[i];void 0===n&&(n=t.createTexture(),r.state.bindTexture(i,n),t.texParameteri(i,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(i,t.TEXTURE_MAG_FILTER,t.NEAREST),s[i]=n),r.set(e,{textureGPU:n,glTextureType:i})}createTexture(e,t){const{gl:r,backend:s}=this,{levels:i,width:n,height:a,depth:o}=t,u=s.utils.convert(e.format,e.colorSpace),l=s.utils.convert(e.type),d=this.getInternalFormat(e.internalFormat,u,l,e.colorSpace,e.isVideoTexture),c=r.createTexture(),h=this.getGLTextureType(e);s.state.bindTexture(h,c),this.setTextureParameters(h,e),e.isArrayTexture||e.isDataArrayTexture||e.isCompressedArrayTexture?r.texStorage3D(r.TEXTURE_2D_ARRAY,i,d,n,a,o):e.isData3DTexture?r.texStorage3D(r.TEXTURE_3D,i,d,n,a,o):e.isVideoTexture||r.texStorage2D(h,i,d,n,a),s.set(e,{textureGPU:c,glTextureType:h,glFormat:u,glType:l,glInternalFormat:d})}copyBufferToTexture(e,t){const{gl:r,backend:s}=this,{textureGPU:i,glTextureType:n,glFormat:a,glType:o}=s.get(t),{width:u,height:l}=t.source.data;r.bindBuffer(r.PIXEL_UNPACK_BUFFER,e),s.state.bindTexture(n,i),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.texSubImage2D(n,0,0,0,u,l,a,o,0),r.bindBuffer(r.PIXEL_UNPACK_BUFFER,null),s.state.unbindTexture()}updateTexture(e,t){const{gl:r}=this,{width:s,height:i}=t,{textureGPU:n,glTextureType:a,glFormat:o,glType:u,glInternalFormat:l}=this.backend.get(e);if(!e.isRenderTargetTexture&&void 0!==n)if(this.backend.state.bindTexture(a,n),this.setTextureParameters(a,e),e.isCompressedTexture){const s=e.mipmaps,i=t.image;for(let t=0;t0){const t=Xr(s.width,s.height,e.format,e.type);for(const i of e.layerUpdates){const e=s.data.subarray(i*t/s.data.BYTES_PER_ELEMENT,(i+1)*t/s.data.BYTES_PER_ELEMENT);r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,i,s.width,s.height,1,o,u,e)}e.clearLayerUpdates()}else r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,s.width,s.height,s.depth,o,u,s.data)}else if(e.isData3DTexture){const e=t.image;r.texSubImage3D(r.TEXTURE_3D,0,0,0,0,e.width,e.height,e.depth,o,u,e.data)}else if(e.isVideoTexture)e.update(),r.texImage2D(a,0,l,o,u,t.image);else{const n=e.mipmaps;if(n.length>0)for(let e=0,t=n.length;e0,c=t.renderTarget?t.renderTarget.height:this.backend.getDrawingBufferSize().y;if(d){const r=0!==a||0!==o;let d,h;if(!0===e.isDepthTexture?(d=s.DEPTH_BUFFER_BIT,h=s.DEPTH_ATTACHMENT,t.stencil&&(d|=s.STENCIL_BUFFER_BIT)):(d=s.COLOR_BUFFER_BIT,h=s.COLOR_ATTACHMENT0),r){const e=this.backend.get(t.renderTarget),r=e.framebuffers[t.getCacheKey()],h=e.msaaFrameBuffer;i.bindFramebuffer(s.DRAW_FRAMEBUFFER,r),i.bindFramebuffer(s.READ_FRAMEBUFFER,h);const p=c-o-l;s.blitFramebuffer(a,p,a+u,p+l,a,p,a+u,p+l,d,s.NEAREST),i.bindFramebuffer(s.READ_FRAMEBUFFER,r),i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,p,u,l),i.unbindTexture()}else{const e=s.createFramebuffer();i.bindFramebuffer(s.DRAW_FRAMEBUFFER,e),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,h,s.TEXTURE_2D,n,0),s.blitFramebuffer(0,0,u,l,0,0,u,l,d,s.NEAREST),s.deleteFramebuffer(e)}}else i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,c-l-o,u,l),i.unbindTexture();e.generateMipmaps&&this.generateMipmaps(e),this.backend._setFramebuffer(t)}setupRenderBufferStorage(e,t,r,s=!1){const{gl:i}=this,n=t.renderTarget,{depthTexture:a,depthBuffer:o,stencilBuffer:u,width:l,height:d}=n;if(i.bindRenderbuffer(i.RENDERBUFFER,e),o&&!u){let t=i.DEPTH_COMPONENT24;if(!0===s){this.extensions.get("WEBGL_multisampled_render_to_texture").renderbufferStorageMultisampleEXT(i.RENDERBUFFER,n.samples,t,l,d)}else r>0?(a&&a.isDepthTexture&&a.type===i.FLOAT&&(t=i.DEPTH_COMPONENT32F),i.renderbufferStorageMultisample(i.RENDERBUFFER,r,t,l,d)):i.renderbufferStorage(i.RENDERBUFFER,t,l,d);i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.RENDERBUFFER,e)}else o&&u&&(r>0?i.renderbufferStorageMultisample(i.RENDERBUFFER,r,i.DEPTH24_STENCIL8,l,d):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,l,d),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,e));i.bindRenderbuffer(i.RENDERBUFFER,null)}async copyTextureToBuffer(e,t,r,s,i,n){const{backend:a,gl:o}=this,{textureGPU:u,glFormat:l,glType:d}=this.backend.get(e),c=o.createFramebuffer();a.state.bindFramebuffer(o.READ_FRAMEBUFFER,c);const h=e.isCubeTexture?o.TEXTURE_CUBE_MAP_POSITIVE_X+n:o.TEXTURE_2D;o.framebufferTexture2D(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,h,u,0);const p=this._getTypedArrayType(d),g=s*i*this._getBytesPerTexel(d,l),m=o.createBuffer();o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.bufferData(o.PIXEL_PACK_BUFFER,g,o.STREAM_READ),o.readPixels(t,r,s,i,l,d,0),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),await a.utils._clientWaitAsync();const f=new p(g/p.BYTES_PER_ELEMENT);return o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,f),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),a.state.bindFramebuffer(o.READ_FRAMEBUFFER,null),o.deleteFramebuffer(c),f}_getTypedArrayType(e){const{gl:t}=this;if(e===t.UNSIGNED_BYTE)return Uint8Array;if(e===t.UNSIGNED_SHORT_4_4_4_4)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_5_5_1)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_6_5)return Uint16Array;if(e===t.UNSIGNED_SHORT)return Uint16Array;if(e===t.UNSIGNED_INT)return Uint32Array;if(e===t.HALF_FLOAT)return Uint16Array;if(e===t.FLOAT)return Float32Array;throw new Error(`Unsupported WebGL type: ${e}`)}_getBytesPerTexel(e,t){const{gl:r}=this;let s=0;return e===r.UNSIGNED_BYTE&&(s=1),e!==r.UNSIGNED_SHORT_4_4_4_4&&e!==r.UNSIGNED_SHORT_5_5_5_1&&e!==r.UNSIGNED_SHORT_5_6_5&&e!==r.UNSIGNED_SHORT&&e!==r.HALF_FLOAT||(s=2),e!==r.UNSIGNED_INT&&e!==r.FLOAT||(s=4),t===r.RGBA?4*s:t===r.RGB?3*s:t===r.ALPHA?s:void 0}dispose(){const{gl:e}=this;null!==this._srcFramebuffer&&e.deleteFramebuffer(this._srcFramebuffer),null!==this._dstFramebuffer&&e.deleteFramebuffer(this._dstFramebuffer)}}function BR(e){return e.isDataTexture?e.image.data:"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e:e.data}class FR{constructor(e){this.backend=e,this.gl=this.backend.gl,this.availableExtensions=this.gl.getSupportedExtensions(),this.extensions={}}get(e){let t=this.extensions[e];return void 0===t&&(t=this.gl.getExtension(e),this.extensions[e]=t),t}has(e){return this.availableExtensions.includes(e)}}class LR{constructor(e){this.backend=e,this.maxAnisotropy=null}getMaxAnisotropy(){if(null!==this.maxAnisotropy)return this.maxAnisotropy;const e=this.backend.gl,t=this.backend.extensions;if(!0===t.has("EXT_texture_filter_anisotropic")){const r=t.get("EXT_texture_filter_anisotropic");this.maxAnisotropy=e.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else this.maxAnisotropy=0;return this.maxAnisotropy}}const PR={WEBGL_multi_draw:"WEBGL_multi_draw",WEBGL_compressed_texture_astc:"texture-compression-astc",WEBGL_compressed_texture_etc:"texture-compression-etc2",WEBGL_compressed_texture_etc1:"texture-compression-etc1",WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBGL_compressed_texture_s3tc:"texture-compression-s3tc",EXT_texture_compression_bptc:"texture-compression-bc",EXT_disjoint_timer_query_webgl2:"timestamp-query",OVR_multiview2:"OVR_multiview2"};class DR{constructor(e){this.gl=e.gl,this.extensions=e.extensions,this.info=e.renderer.info,this.mode=null,this.index=0,this.type=null,this.object=null}render(e,t){const{gl:r,mode:s,object:i,type:n,info:a,index:o}=this;0!==o?r.drawElements(s,t,n,e):r.drawArrays(s,e,t),a.update(i,t,1)}renderInstances(e,t,r){const{gl:s,mode:i,type:n,index:a,object:o,info:u}=this;0!==r&&(0!==a?s.drawElementsInstanced(i,t,n,e,r):s.drawArraysInstanced(i,e,t,r),u.update(o,t,r))}renderMultiDraw(e,t,r){const{extensions:s,mode:i,object:n,info:a}=this;if(0===r)return;const o=s.get("WEBGL_multi_draw");if(null===o)for(let s=0;sthis.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryStates.set(t,"inactive"),this.queryOffsets.set(e,t),t}beginQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null==t)return;if(null!==this.activeQuery)return;const r=this.queries[t];if(r)try{"inactive"===this.queryStates.get(t)&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,r),this.activeQuery=t,this.queryStates.set(t,"started"))}catch(e){o("Error in beginQuery:",e),this.activeQuery=null,this.queryStates.set(t,"inactive")}}endQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null!=t&&this.activeQuery===t)try{this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.queryStates.set(t,"ended"),this.activeQuery=null}catch(e){o("Error in endQuery:",e),this.queryStates.set(t,"inactive"),this.activeQuery=null}}async resolveQueriesAsync(){if(!this.trackTimestamp||this.pendingResolve)return this.lastValue;this.pendingResolve=!0;try{const e=new Map;for(const[t,r]of this.queryOffsets){if("ended"===this.queryStates.get(r)){const s=this.queries[r];e.set(t,this.resolveQuery(s))}}if(0===e.size)return this.lastValue;const t={},r=[];for(const[s,i]of e){const e=s.match(/^(.*):f(\d+)$/),n=parseInt(e[2]);!1===r.includes(n)&&r.push(n),void 0===t[n]&&(t[n]=0);const a=await i;this.timestamps.set(s,a),t[n]+=a}const s=t[r[r.length-1]];return this.lastValue=s,this.frames=r,this.currentQueryIndex=0,this.queryOffsets.clear(),this.queryStates.clear(),this.activeQuery=null,s}catch(e){return o("Error resolving queries:",e),this.lastValue}finally{this.pendingResolve=!1}}async resolveQuery(e){return new Promise(t=>{if(this.isDisposed)return void t(this.lastValue);let r,s=!1;const i=e=>{s||(s=!0,r&&(clearTimeout(r),r=null),t(e))},n=()=>{if(this.isDisposed)i(this.lastValue);else try{if(this.gl.getParameter(this.ext.GPU_DISJOINT_EXT))return void i(this.lastValue);if(!this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE))return void(r=setTimeout(n,1));const s=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);t(Number(s)/1e6)}catch(e){o("Error checking query:",e),t(this.lastValue)}};n()})}dispose(){if(!this.isDisposed&&(this.isDisposed=!0,this.trackTimestamp)){for(const e of this.queries)this.gl.deleteQuery(e);this.queries=[],this.queryStates.clear(),this.queryOffsets.clear(),this.lastValue=0,this.activeQuery=null}}}class OR extends bR{constructor(e={}){super(e),this.isWebGLBackend=!0,this.attributeUtils=null,this.extensions=null,this.capabilities=null,this.textureUtils=null,this.bufferRenderer=null,this.gl=null,this.state=null,this.utils=null,this.vaoCache={},this.transformFeedbackCache={},this.discard=!1,this.disjoint=null,this.parallel=null,this._currentContext=null,this._knownBindings=new WeakSet,this._supportsInvalidateFramebuffer="undefined"!=typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),this._xrFramebuffer=null}init(e){super.init(e);const t=this.parameters,r={antialias:e.currentSamples>0,alpha:!0,depth:e.depth,stencil:e.stencil},s=void 0!==t.context?t.context:e.domElement.getContext("webgl2",r);function i(t){t.preventDefault();const r={api:"WebGL",message:t.statusMessage||"Unknown reason",reason:null,originalEvent:t};e.onDeviceLost(r)}this._onContextLost=i,e.domElement.addEventListener("webglcontextlost",i,!1),this.gl=s,this.extensions=new FR(this),this.capabilities=new LR(this),this.attributeUtils=new NR(this),this.textureUtils=new MR(this),this.bufferRenderer=new DR(this),this.state=new SR(this),this.utils=new RR(this),this.extensions.get("EXT_color_buffer_float"),this.extensions.get("WEBGL_clip_cull_distance"),this.extensions.get("OES_texture_float_linear"),this.extensions.get("EXT_color_buffer_half_float"),this.extensions.get("WEBGL_multisampled_render_to_texture"),this.extensions.get("WEBGL_render_shared_exponent"),this.extensions.get("WEBGL_multi_draw"),this.extensions.get("OVR_multiview2"),this.extensions.get("EXT_clip_control"),this.disjoint=this.extensions.get("EXT_disjoint_timer_query_webgl2"),this.parallel=this.extensions.get("KHR_parallel_shader_compile"),this.drawBuffersIndexedExt=this.extensions.get("OES_draw_buffers_indexed"),!0===t.reversedDepthBuffer&&this.extensions.has("EXT_clip_control")&&this.state.setReversedDepth(!0)}get coordinateSystem(){return c}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}async makeXRCompatible(){!0!==this.gl.getContextAttributes().xrCompatible&&await this.gl.makeXRCompatible()}setXRTarget(e){this._xrFramebuffer=e}setXRRenderTargetTextures(e,t,r=null){const s=this.gl;if(this.set(e.texture,{textureGPU:t,glInternalFormat:s.RGBA8}),null!==r){const t=e.stencilBuffer?s.DEPTH24_STENCIL8:s.DEPTH_COMPONENT24;this.set(e.depthTexture,{textureGPU:r,glInternalFormat:t}),!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!0===e._autoAllocateDepthBuffer&&!1===e.multiview&&d("WebGLBackend: Render-to-texture extension was disabled because an external texture was provided"),e._autoAllocateDepthBuffer=!1}}initTimestampQuery(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e]||(this.timestampQueryPool[e]=new IR(this.gl,e,2048));const r=this.timestampQueryPool[e];null!==r.allocateQueriesForContext(t)&&r.beginQuery(t)}prepareTimestampBuffer(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e].endQuery(t)}getContext(){return this.gl}beginRender(e){const{state:t}=this,r=this.get(e);if(e.viewport)this.updateViewport(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.viewport(0,0,e,r)}if(e.scissor)this.updateScissor(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.scissor(0,0,e,r)}this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e)),r.previousContext=this._currentContext,this._currentContext=e,this._setFramebuffer(e),this.clear(e.clearColor,e.clearDepth,e.clearStencil,e,!1);const s=e.occlusionQueryCount;s>0&&(r.currentOcclusionQueries=r.occlusionQueries,r.currentOcclusionQueryObjects=r.occlusionQueryObjects,r.lastOcclusionObject=null,r.occlusionQueries=new Array(s),r.occlusionQueryObjects=new Array(s),r.occlusionQueryIndex=0)}finishRender(e){const{gl:t,state:r}=this,s=this.get(e),i=s.previousContext;r.resetVertexState();const n=e.occlusionQueryCount;n>0&&(n>s.occlusionQueryIndex&&t.endQuery(t.ANY_SAMPLES_PASSED),this.resolveOccludedAsync(e));const a=e.textures;if(null!==a)for(let e=0;e{let a=0;for(let t=0;t{t.isBatchedMesh?null!==t._multiDrawInstances?(v("WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),b.renderMultiDrawInstances(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount,t._multiDrawInstances)):this.hasFeature("WEBGL_multi_draw")?b.renderMultiDraw(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount):v("WebGLBackend: WEBGL_multi_draw not supported."):T>1?b.renderInstances(_,x,T):b.render(_,x)};if(!0===e.camera.isArrayCamera&&e.camera.cameras.length>0&&!1===e.camera.isMultiViewCamera){const r=this.get(e.camera),s=e.camera.cameras,i=e.getBindingGroup("cameraIndex").bindings[0];if(void 0===r.indexesGPU||r.indexesGPU.length!==s.length){const e=new Uint32Array([0,0,0,0]),t=[];for(let r=0,i=s.length;r{const i=this.parallel,n=()=>{r.getProgramParameter(a,i.COMPLETION_STATUS_KHR)?(this._completeCompile(e,s),t()):requestAnimationFrame(n)};n()});return void t.push(i)}this._completeCompile(e,s)}_handleSource(e,t){const r=e.split("\n"),s=[],i=Math.max(t-6,0),n=Math.min(t+6,r.length);for(let e=i;e":" "} ${i}: ${r[e]}`)}return s.join("\n")}_getShaderErrors(e,t,r){const s=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||"").trim();if(s&&""===i)return"";const n=/ERROR: 0:(\d+)/.exec(i);if(n){const s=parseInt(n[1]);return r.toUpperCase()+"\n\n"+i+"\n\n"+this._handleSource(e.getShaderSource(t),s)}return i}_logProgramError(e,t,r){if(this.renderer.debug.checkShaderErrors){const s=this.gl,i=(s.getProgramInfoLog(e)||"").trim();if(!1===s.getProgramParameter(e,s.LINK_STATUS))if("function"==typeof this.renderer.debug.onShaderError)this.renderer.debug.onShaderError(s,e,r,t);else{const n=this._getShaderErrors(s,r,"vertex"),a=this._getShaderErrors(s,t,"fragment");o("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(e,s.VALIDATE_STATUS)+"\n\nProgram Info Log: "+i+"\n"+n+"\n"+a)}else""!==i&&d("WebGLProgram: Program Info Log:",i)}}_completeCompile(e,t){const{state:r,gl:s}=this,i=this.get(t),{programGPU:n,fragmentShader:a,vertexShader:o}=i;!1===s.getProgramParameter(n,s.LINK_STATUS)&&this._logProgramError(n,a,o),r.useProgram(n);const u=e.getBindings();this._setupBindings(u,n),this.set(t,{programGPU:n,pipeline:n})}createComputePipeline(e,t){const{state:r,gl:s}=this,i={stage:"fragment",code:"#version 300 es\nprecision highp float;\nvoid main() {}"};this.createProgram(i);const{computeProgram:n}=e,a=s.createProgram(),o=this.get(i).shaderGPU,u=this.get(n).shaderGPU,l=n.transforms,d=[],c=[];for(let e=0;ePR[t]===e),r=this.extensions;for(let e=0;e1,h=!0===i.isXRRenderTarget,p=!0===h&&!0===i._hasExternalTextures;let g=n.msaaFrameBuffer,m=n.depthRenderbuffer;const f=this.extensions.get("WEBGL_multisampled_render_to_texture"),y=this.extensions.get("OVR_multiview2"),b=this._useMultisampledExtension(i),x=Xy(e);let T;if(l?(n.cubeFramebuffers||(n.cubeFramebuffers={}),T=n.cubeFramebuffers[x]):h&&!1===p?T=this._xrFramebuffer:(n.framebuffers||(n.framebuffers={}),T=n.framebuffers[x]),void 0===T){T=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,T);const s=e.textures,o=[];if(l){n.cubeFramebuffers[x]=T;const{textureGPU:e}=this.get(s[0]),r=this.renderer._activeCubeFace,i=this.renderer._activeMipmapLevel;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,e,i)}else{n.framebuffers[x]=T;for(let r=0;r0&&!1===b&&!i.multiview){if(void 0===g){const s=[];g=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,g);const i=[],l=e.textures;for(let r=0;r0&&!1===this._useMultisampledExtension(s)){const n=i.framebuffers[e.getCacheKey()];let a=t.COLOR_BUFFER_BIT;s.resolveDepthBuffer&&(s.depthBuffer&&(a|=t.DEPTH_BUFFER_BIT),s.stencilBuffer&&s.resolveStencilBuffer&&(a|=t.STENCIL_BUFFER_BIT));const o=i.msaaFrameBuffer,u=i.msaaRenderbuffers,l=e.textures,d=l.length>1;if(r.bindFramebuffer(t.READ_FRAMEBUFFER,o),r.bindFramebuffer(t.DRAW_FRAMEBUFFER,n),d)for(let e=0;e0&&!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!1!==e._autoAllocateDepthBuffer}dispose(){null!==this.textureUtils&&this.textureUtils.dispose();const e=this.extensions.get("WEBGL_lose_context");e&&e.loseContext(),this.renderer.domElement.removeEventListener("webglcontextlost",this._onContextLost)}}const VR="point-list",kR="line-list",GR="line-strip",$R="triangle-list",zR="undefined"!=typeof self&&self.GPUShaderStage?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4},WR="never",HR="less",qR="equal",jR="less-equal",XR="greater",KR="not-equal",QR="greater-equal",YR="always",ZR="store",JR="load",eE="clear",tE="ccw",rE="cw",sE="none",iE="back",nE="uint16",aE="uint32",oE="r8unorm",uE="r8snorm",lE="r8uint",dE="r8sint",cE="r16uint",hE="r16sint",pE="r16float",gE="rg8unorm",mE="rg8snorm",fE="rg8uint",yE="rg8sint",bE="r32uint",xE="r32sint",TE="r32float",_E="rg16uint",vE="rg16sint",NE="rg16float",SE="rgba8unorm",RE="rgba8unorm-srgb",EE="rgba8snorm",AE="rgba8uint",wE="rgba8sint",CE="bgra8unorm",ME="bgra8unorm-srgb",BE="rgb9e5ufloat",FE="rgb10a2unorm",LE="rg11b10ufloat",PE="rg32uint",DE="rg32sint",UE="rg32float",IE="rgba16uint",OE="rgba16sint",VE="rgba16float",kE="rgba32uint",GE="rgba32sint",$E="rgba32float",zE="depth16unorm",WE="depth24plus",HE="depth24plus-stencil8",qE="depth32float",jE="depth32float-stencil8",XE="bc1-rgba-unorm",KE="bc1-rgba-unorm-srgb",QE="bc2-rgba-unorm",YE="bc2-rgba-unorm-srgb",ZE="bc3-rgba-unorm",JE="bc3-rgba-unorm-srgb",eA="bc4-r-unorm",tA="bc4-r-snorm",rA="bc5-rg-unorm",sA="bc5-rg-snorm",iA="bc6h-rgb-ufloat",nA="bc6h-rgb-float",aA="bc7-rgba-unorm",oA="bc7-rgba-unorm-srgb",uA="etc2-rgb8unorm",lA="etc2-rgb8unorm-srgb",dA="etc2-rgb8a1unorm",cA="etc2-rgb8a1unorm-srgb",hA="etc2-rgba8unorm",pA="etc2-rgba8unorm-srgb",gA="eac-r11unorm",mA="eac-r11snorm",fA="eac-rg11unorm",yA="eac-rg11snorm",bA="astc-4x4-unorm",xA="astc-4x4-unorm-srgb",TA="astc-5x4-unorm",_A="astc-5x4-unorm-srgb",vA="astc-5x5-unorm",NA="astc-5x5-unorm-srgb",SA="astc-6x5-unorm",RA="astc-6x5-unorm-srgb",EA="astc-6x6-unorm",AA="astc-6x6-unorm-srgb",wA="astc-8x5-unorm",CA="astc-8x5-unorm-srgb",MA="astc-8x6-unorm",BA="astc-8x6-unorm-srgb",FA="astc-8x8-unorm",LA="astc-8x8-unorm-srgb",PA="astc-10x5-unorm",DA="astc-10x5-unorm-srgb",UA="astc-10x6-unorm",IA="astc-10x6-unorm-srgb",OA="astc-10x8-unorm",VA="astc-10x8-unorm-srgb",kA="astc-10x10-unorm",GA="astc-10x10-unorm-srgb",$A="astc-12x10-unorm",zA="astc-12x10-unorm-srgb",WA="astc-12x12-unorm",HA="astc-12x12-unorm-srgb",qA="clamp-to-edge",jA="repeat",XA="mirror-repeat",KA="linear",QA="nearest",YA="zero",ZA="one",JA="src",ew="one-minus-src",tw="src-alpha",rw="one-minus-src-alpha",sw="dst",iw="one-minus-dst",nw="dst-alpha",aw="one-minus-dst-alpha",ow="src-alpha-saturated",uw="constant",lw="one-minus-constant",dw="add",cw="subtract",hw="reverse-subtract",pw="min",gw="max",mw=0,fw=15,yw="keep",bw="zero",xw="replace",Tw="invert",_w="increment-clamp",vw="decrement-clamp",Nw="increment-wrap",Sw="decrement-wrap",Rw="storage",Ew="read-only-storage",Aw="write-only",ww="read-only",Cw="read-write",Mw="non-filtering",Bw="comparison",Fw="float",Lw="unfilterable-float",Pw="depth",Dw="sint",Uw="uint",Iw="2d",Ow="3d",Vw="2d",kw="2d-array",Gw="cube",$w="3d",zw="all",Ww="vertex",Hw="instance",qw={CoreFeaturesAndLimits:"core-features-and-limits",DepthClipControl:"depth-clip-control",Depth32FloatStencil8:"depth32float-stencil8",TextureCompressionBC:"texture-compression-bc",TextureCompressionBCSliced3D:"texture-compression-bc-sliced-3d",TextureCompressionETC2:"texture-compression-etc2",TextureCompressionASTC:"texture-compression-astc",TextureCompressionASTCSliced3D:"texture-compression-astc-sliced-3d",TimestampQuery:"timestamp-query",IndirectFirstInstance:"indirect-first-instance",ShaderF16:"shader-f16",RG11B10UFloat:"rg11b10ufloat-renderable",BGRA8UNormStorage:"bgra8unorm-storage",Float32Filterable:"float32-filterable",Float32Blendable:"float32-blendable",ClipDistances:"clip-distances",DualSourceBlending:"dual-source-blending",Subgroups:"subgroups",TextureFormatsTier1:"texture-formats-tier1",TextureFormatsTier2:"texture-formats-tier2"},jw={"texture-compression-s3tc":"texture-compression-bc","texture-compression-etc1":"texture-compression-etc2"};class Xw extends rR{constructor(e,t,r){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class Kw extends KS{constructor(e,t){super(e,t?t.array:null),this._attribute=t,this.isStorageBuffer=!0}get attribute(){return this._attribute}}let Qw=0;class Yw extends Kw{constructor(e,t){super("StorageBuffer_"+Qw++,e?e.value:null),this.nodeUniform=e,this.access=e?e.access:si.READ_WRITE,this.groupNode=t}get attribute(){return this.nodeUniform.value}get buffer(){return this.nodeUniform.value.array}}class Zw extends _y{constructor(e){super(),this.device=e;this.mipmapSampler=e.createSampler({minFilter:KA}),this.flipYSampler=e.createSampler({minFilter:QA}),this.flipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(this.flipUniformBuffer,0,new Uint32Array([1])),this.noFlipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM}),this.transferPipelines={},this.mipmapShaderModule=e.createShaderModule({label:"mipmap",code:"\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4f,\n\t@location( 0 ) vTex : vec2f,\n\t@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,\n};\n\n@group( 0 ) @binding ( 2 )\nvar flipY: u32;\n\n@vertex\nfn mainVS(\n\t\t@builtin( vertex_index ) vertexIndex : u32,\n\t\t@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array(\n\t\tvec2f( -1, -1 ),\n\t\tvec2f( -1, 3 ),\n\t\tvec2f( 3, -1 ),\n\t);\n\n\tlet p = pos[ vertexIndex ];\n\tlet mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );\n\tVarys.vTex = p * mult + vec2f( 0.5 );\n\tVarys.Position = vec4f( p, 0, 1 );\n\tVarys.vBaseArrayLayer = instanceIndex;\n\n\treturn Varys;\n\n}\n\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img2d : texture_2d;\n\n@fragment\nfn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2d, imgSampler, Varys.vTex );\n\n}\n\n@group( 0 ) @binding( 1 )\nvar img2dArray : texture_2d_array;\n\n@fragment\nfn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );\n\n}\n\nconst faceMat = array(\n mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1 ), // pos-x\n mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1 ), // neg-x\n mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1 ), // pos-y\n mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1 ), // neg-y\n mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1 ), // pos-z\n mat3x3f( -2, 0, 0, 0, -2, 0, 1, 1, -1 ), // neg-z\n);\n\n@group( 0 ) @binding( 1 )\nvar imgCube : texture_cube;\n\n@fragment\nfn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );\n\n}\n"})}getTransferPipeline(e,t){const r=`${e}-${t=t||"2d-array"}`;let s=this.transferPipelines[r];return void 0===s&&(s=this.device.createRenderPipeline({label:`mipmap-${e}-${t}`,vertex:{module:this.mipmapShaderModule},fragment:{module:this.mipmapShaderModule,entryPoint:`main_${t.replace("-","_")}`,targets:[{format:e}]},layout:"auto"}),this.transferPipelines[r]=s),s}flipY(e,t,r=0){const s=t.format,{width:i,height:n}=t.size,a=this.device.createTexture({size:{width:i,height:n},format:s,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}),o=this.getTransferPipeline(s,e.textureBindingViewDimension),u=this.getTransferPipeline(s,a.textureBindingViewDimension),l=this.device.createCommandEncoder({}),d=(e,t,r,s,i,n)=>{const a=e.getBindGroupLayout(0),o=this.device.createBindGroup({layout:a,entries:[{binding:0,resource:this.flipYSampler},{binding:1,resource:t.createView({dimension:t.textureBindingViewDimension||"2d-array",baseMipLevel:0,mipLevelCount:1})},{binding:2,resource:{buffer:n?this.flipUniformBuffer:this.noFlipUniformBuffer}}]}),u=l.beginRenderPass({colorAttachments:[{view:s.createView({dimension:"2d",baseMipLevel:0,mipLevelCount:1,baseArrayLayer:i,arrayLayerCount:1}),loadOp:eE,storeOp:ZR}]});u.setPipeline(e),u.setBindGroup(0,o),u.draw(3,1,0,r),u.end()};d(o,e,r,a,0,!1),d(u,a,0,e,r,!0),this.device.queue.submit([l.finish()]),a.destroy()}generateMipmaps(e,t=null){const r=this.get(e),s=r.layers||this._mipmapCreateBundles(e),i=t||this.device.createCommandEncoder({label:"mipmapEncoder"});this._mipmapRunBundles(i,s),null===t&&this.device.queue.submit([i.finish()]),r.layers=s}_mipmapCreateBundles(e){const t=e.textureBindingViewDimension||"2d-array",r=this.getTransferPipeline(e.format,t),s=r.getBindGroupLayout(0),i=[];for(let n=1;n0)for(let t=0,n=s.length;t0)for(let t=0,n=s.length;t0?e.width:r.size.width,l=a>0?e.height:r.size.height;try{o.queue.copyExternalImageToTexture({source:e,flipY:i},{texture:t,mipLevel:a,origin:{x:0,y:0,z:s},premultipliedAlpha:n},{width:u,height:l,depthOrArrayLayers:1})}catch(e){}}_getPassUtils(){let e=this._passUtils;return null===e&&(this._passUtils=e=new Zw(this.backend.device)),e}_generateMipmaps(e,t=null){this._getPassUtils().generateMipmaps(e,t)}_flipY(e,t,r=0){this._getPassUtils().flipY(e,t,r)}_copyBufferToTexture(e,t,r,s,i,n=0,a=0){const o=this.backend.device,u=e.data,l=this._getBytesPerTexel(r.format),d=e.width*l;o.queue.writeTexture({texture:t,mipLevel:a,origin:{x:0,y:0,z:s}},u,{offset:e.width*e.height*l*n,bytesPerRow:d},{width:e.width,height:e.height,depthOrArrayLayers:1}),!0===i&&this._flipY(t,r,s)}_copyCompressedBufferToTexture(e,t,r){const s=this.backend.device,i=this._getBlockData(r.format),n=r.size.depthOrArrayLayers>1;for(let a=0;a]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i,iC=/([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi,nC={f32:"float",i32:"int",u32:"uint",bool:"bool","vec2":"vec2","vec2":"ivec2","vec2":"uvec2","vec2":"bvec2",vec2f:"vec2",vec2i:"ivec2",vec2u:"uvec2",vec2b:"bvec2","vec3":"vec3","vec3":"ivec3","vec3":"uvec3","vec3":"bvec3",vec3f:"vec3",vec3i:"ivec3",vec3u:"uvec3",vec3b:"bvec3","vec4":"vec4","vec4":"ivec4","vec4":"uvec4","vec4":"bvec4",vec4f:"vec4",vec4i:"ivec4",vec4u:"uvec4",vec4b:"bvec4","mat2x2":"mat2",mat2x2f:"mat2","mat3x3":"mat3",mat3x3f:"mat3","mat4x4":"mat4",mat4x4f:"mat4",sampler:"sampler",texture_1d:"texture",texture_2d:"texture",texture_2d_array:"texture",texture_multisampled_2d:"cubeTexture",texture_depth_2d:"depthTexture",texture_depth_2d_array:"depthTexture",texture_depth_multisampled_2d:"depthTexture",texture_depth_cube:"depthTexture",texture_depth_cube_array:"depthTexture",texture_3d:"texture3D",texture_cube:"cubeTexture",texture_cube_array:"cubeTexture",texture_storage_1d:"storageTexture",texture_storage_2d:"storageTexture",texture_storage_2d_array:"storageTexture",texture_storage_3d:"storageTexture"};class aC extends lS{constructor(e){const{type:t,inputs:r,name:s,inputsCode:i,blockCode:n,outputType:a}=(e=>{const t=(e=e.trim()).match(sC);if(null!==t&&4===t.length){const r=t[2],s=[];let i=null;for(;null!==(i=iC.exec(r));)s.push({name:i[1],type:i[2]});const n=[];for(let e=0;e "+this.outputType:"";return`fn ${e} ( ${this.inputsCode.trim()} ) ${t}`+this.blockCode}}class oC extends uS{parseFunction(e){return new aC(e)}}const uC={[si.READ_ONLY]:"read",[si.WRITE_ONLY]:"write",[si.READ_WRITE]:"read_write"},lC={[Gr]:"repeat",[ve]:"clamp",[kr]:"mirror"},dC={vertex:zR.VERTEX,fragment:zR.FRAGMENT,compute:zR.COMPUTE},cC={instance:!0,swizzleAssign:!1,storageBuffer:!0},hC={"^^":"tsl_xor"},pC={float:"f32",int:"i32",uint:"u32",bool:"bool",color:"vec3",vec2:"vec2",ivec2:"vec2",uvec2:"vec2",bvec2:"vec2",vec3:"vec3",ivec3:"vec3",uvec3:"vec3",bvec3:"vec3",vec4:"vec4",ivec4:"vec4",uvec4:"vec4",bvec4:"vec4",mat2:"mat2x2",mat3:"mat3x3",mat4:"mat4x4"},gC={},mC={tsl_xor:new pT("fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }"),mod_float:new pT("fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }"),mod_vec2:new pT("fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }"),mod_vec3:new pT("fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }"),mod_vec4:new pT("fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }"),equals_bool:new pT("fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }"),equals_bvec2:new pT("fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }"),equals_bvec3:new pT("fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }"),equals_bvec4:new pT("fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }"),repeatWrapping_float:new pT("fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }"),mirrorWrapping_float:new pT("fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }"),clampWrapping_float:new pT("fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }"),biquadraticTexture:new pT("\nfn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n"),biquadraticTextureArray:new pT("\nfn tsl_biquadraticTexture_array( map : texture_2d_array, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n")},fC={dFdx:"dpdx",dFdy:"- dpdy",mod_float:"tsl_mod_float",mod_vec2:"tsl_mod_vec2",mod_vec3:"tsl_mod_vec3",mod_vec4:"tsl_mod_vec4",equals_bool:"tsl_equals_bool",equals_bvec2:"tsl_equals_bvec2",equals_bvec3:"tsl_equals_bvec3",equals_bvec4:"tsl_equals_bvec4",inversesqrt:"inverseSqrt",bitcast:"bitcast",floatpack_snorm_2x16:"pack2x16snorm",floatpack_unorm_2x16:"pack2x16unorm",floatpack_float16_2x16:"pack2x16float",floatunpack_snorm_2x16:"unpack2x16snorm",floatunpack_unorm_2x16:"unpack2x16unorm",floatunpack_float16_2x16:"unpack2x16float"};let yC="";!0!==("undefined"!=typeof navigator&&/Firefox|Deno/g.test(navigator.userAgent))&&(yC+="diagnostic( off, derivative_uniformity );\n");class bC extends jN{constructor(e,t){super(e,t,new oC),this.uniformGroups={},this.uniformGroupsBindings={},this.builtins={},this.directives={},this.scopedArrays=new Map}_generateTextureSample(e,t,r,s,i,n=this.shaderStage){return"fragment"===n?s?i?`textureSample( ${t}, ${t}_sampler, ${r}, ${s}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r}, ${s} )`:i?`textureSample( ${t}, ${t}_sampler, ${r}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r} )`:this.generateTextureSampleLevel(e,t,r,"0",s)}generateTextureSampleLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateWrapFunction(e){const t=`tsl_coord_${lC[e.wrapS]}S_${lC[e.wrapT]}_${e.is3DTexture||e.isData3DTexture?"3d":"2d"}T`;let r=gC[t];if(void 0===r){const s=[],i=e.is3DTexture||e.isData3DTexture?"vec3f":"vec2f";let n=`fn ${t}( coord : ${i} ) -> ${i} {\n\n\treturn ${i}(\n`;const a=(e,t)=>{e===Gr?(s.push(mC.repeatWrapping_float),n+=`\t\ttsl_repeatWrapping_float( coord.${t} )`):e===ve?(s.push(mC.clampWrapping_float),n+=`\t\ttsl_clampWrapping_float( coord.${t} )`):e===kr?(s.push(mC.mirrorWrapping_float),n+=`\t\ttsl_mirrorWrapping_float( coord.${t} )`):(n+=`\t\tcoord.${t}`,d(`WebGPURenderer: Unsupported texture wrap type "${e}" for vertex shader.`))};a(e.wrapS,"x"),n+=",\n",a(e.wrapT,"y"),(e.is3DTexture||e.isData3DTexture)&&(n+=",\n",a(e.wrapR,"z")),n+="\n\t);\n\n}\n",gC[t]=r=new pT(n,s)}return r.build(this),t}generateArrayDeclaration(e,t){return`array< ${this.getType(e)}, ${t} >`}generateTextureDimension(e,t,r){const s=this.getDataFromNode(e,this.shaderStage,this.globalCache);void 0===s.dimensionsSnippet&&(s.dimensionsSnippet={});let i=s.dimensionsSnippet[r];if(void 0===s.dimensionsSnippet[r]){let n,a;const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(e),u=o>1;a=e.is3DTexture||e.isData3DTexture?"vec3":"vec2",n=u||e.isStorageTexture?t:`${t}${r?`, u32( ${r} )`:""}`,i=new wu(new ml(`textureDimensions( ${n} )`,a)),s.dimensionsSnippet[r]=i,(e.isArrayTexture||e.isDataArrayTexture||e.is3DTexture||e.isData3DTexture)&&(s.arrayLayerCount=new wu(new ml(`textureNumLayers(${t})`,"u32"))),e.isTextureCube&&(s.cubeFaceCount=new wu(new ml("6u","u32")))}return i.build(this)}generateFilteredTexture(e,t,r,s,i="0u",n){const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,i);return s&&(r=`${r} + vec2(${s}) / ${o}`),n?(this._include("biquadraticTextureArray"),`tsl_biquadraticTexture_array( ${t}, ${a}( ${r} ), ${o}, u32( ${n} ), u32( ${i} ) )`):(this._include("biquadraticTexture"),`tsl_biquadraticTexture( ${t}, ${a}( ${r} ), ${o}, u32( ${i} ) )`)}generateTextureLod(e,t,r,s,i,n="0u"){if(!0===e.isCubeTexture){i&&(r=`${r} + vec3(${i})`);return`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${e.isDepthTexture?"u32":"f32"}( ${n} ) )`}const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,n),u=e.is3DTexture||e.isData3DTexture?"vec3":"vec2";i&&(r=`${r} + ${u}(${i}) / ${u}( ${o} )`);return r=`${u}( clamp( floor( ${a}( ${r} ) * ${u}( ${o} ) ), ${`${u}( 0 )`}, ${`${u}( ${o} - ${"vec3"===u?"vec3( 1, 1, 1 )":"vec2( 1, 1 )"} )`} ) )`,this.generateTextureLoad(e,t,r,n,s,null)}generateStorageTextureLoad(e,t,r,s,i,n){let a;return n&&(r=`${r} + ${n}`),a=i?`textureLoad( ${t}, ${r}, ${i} )`:`textureLoad( ${t}, ${r} )`,a}generateTextureLoad(e,t,r,s,i,n){let a;return null===s&&(s="0u"),n&&(r=`${r} + ${n}`),i?a=`textureLoad( ${t}, ${r}, ${i}, u32( ${s} ) )`:(a=`textureLoad( ${t}, ${r}, u32( ${s} ) )`,this.renderer.backend.compatibilityMode&&e.isDepthTexture&&(a+=".x")),a}generateTextureStore(e,t,r,s,i){let n;return n=s?`textureStore( ${t}, ${r}, ${s}, ${i} )`:`textureStore( ${t}, ${r}, ${i} )`,n}isSampleCompare(e){return!0===e.isDepthTexture&&null!==e.compareFunction&&this.renderer.hasCompatibility(E.TEXTURE_COMPARE)}isUnfilterable(e){return"float"!==this.getComponentTypeFromTexture(e)||!this.isAvailable("float32Filterable")&&!0===e.isDataTexture&&e.type===Q||!1===this.isSampleCompare(e)&&e.minFilter===B&&e.magFilter===B||this.renderer.backend.utils.getTextureSampleData(e).primarySamples>1}generateTexture(e,t,r,s,i,n=this.shaderStage){let a=null;return a=this.isUnfilterable(e)?this.generateTextureLod(e,t,r,s,i,"0",n):this._generateTextureSample(e,t,r,s,i,n),a}generateTextureGrad(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]} )`:n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]} )`;o(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${a} shader.`)}generateTextureCompare(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return!0===e.isDepthTexture&&!0===e.isArrayTexture?n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${a} shader.`)}generateTextureLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateTextureBias(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${a} shader.`)}getPropertyName(e,t=this.shaderStage){if(!0===e.isNodeVarying&&!0===e.needsInterpolation){if("vertex"===t)return`varyings.${e.name}`}else if(!0===e.isNodeUniform){const t=e.name,r=e.type;return"texture"===r||"cubeTexture"===r||"cubeDepthTexture"===r||"storageTexture"===r||"texture3D"===r?t:"buffer"===r||"storageBuffer"===r||"indirectStorageBuffer"===r?this.isCustomStruct(e)?t:t+".value":e.groupNode.name+"."+t}return super.getPropertyName(e)}getOutputStructName(){return"output"}getFunctionOperator(e){const t=hC[e];return void 0!==t?(this._include(t),t):null}getNodeAccess(e,t){return"compute"!==t?!0===e.isAtomic?(d("WebGPURenderer: Atomic operations are only supported in compute shaders."),si.READ_WRITE):si.READ_ONLY:e.access}getStorageAccess(e,t){return uC[this.getNodeAccess(e,t)]}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);if(void 0===n.uniformGPU){let a;const o=e.groupNode,u=o.name,l=this.getBindGroupArray(u,r);if("texture"===t||"cubeTexture"===t||"cubeDepthTexture"===t||"storageTexture"===t||"texture3D"===t){let s=null;const n=this.getNodeAccess(e,r);"texture"===t||"storageTexture"===t?s=!0===e.value.is3DTexture?new oR(i.name,i.node,o,n):new nR(i.name,i.node,o,n):"cubeTexture"===t||"cubeDepthTexture"===t?s=new aR(i.name,i.node,o,n):"texture3D"===t&&(s=new oR(i.name,i.node,o,n)),s.store=!0===e.isStorageTextureNode,s.mipLevel=s.store?e.mipLevel:0,s.setVisibility(dC[r]);if(!0===e.value.isCubeTexture||!1===this.isUnfilterable(e.value)&&!1===s.store){const e=new Xw(`${i.name}_sampler`,i.node,o);e.setVisibility(dC[r]),l.push(e,s),a=[e,s]}else l.push(s),a=[s]}else if("buffer"===t||"storageBuffer"===t||"indirectStorageBuffer"===t){const n=this.getSharedDataFromNode(e);let u=n.buffer;if(void 0===u){u=new("buffer"===t?ZS:Yw)(e,o),n.buffer=u}u.setVisibility(u.getVisibility()|dC[r]),l.push(u),a=u,i.name=s||"NodeBuffer_"+i.id}else{let e=this.uniformGroups[u];void 0===e&&(e=new tR(u,o),e.setVisibility(zR.VERTEX|zR.FRAGMENT|zR.COMPUTE),this.uniformGroups[u]=e),-1===l.indexOf(e)&&l.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}getBuiltin(e,t,r,s=this.shaderStage){const i=this.builtins[s]||(this.builtins[s]=new Map);return!1===i.has(e)&&i.set(e,{name:e,property:t,type:r}),t}hasBuiltin(e,t=this.shaderStage){return void 0!==this.builtins[t]&&this.builtins[t].has(e)}getVertexIndex(){return"vertex"===this.shaderStage?this.getBuiltin("vertex_index","vertexIndex","u32","attribute"):"vertexIndex"}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(e.name+" : "+this.getType(e.type));let i=`fn ${t.name}( ${s.join(", ")} ) -> ${this.getType(t.type)} {\n${r.vars}\n${r.code}\n`;return r.result&&(i+=`\treturn ${r.result};\n`),i+="\n}\n",i}getInstanceIndex(){return"vertex"===this.shaderStage?this.getBuiltin("instance_index","instanceIndex","u32","attribute"):"instanceIndex"}getInvocationLocalIndex(){return this.getBuiltin("local_invocation_index","invocationLocalIndex","u32","attribute")}getSubgroupSize(){return this.enableSubGroups(),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute")}getInvocationSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_invocation_id","invocationSubgroupIndex","u32","attribute")}getSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_id","subgroupIndex","u32","attribute")}getDrawIndex(){return null}getFrontFacing(){return this.getBuiltin("front_facing","isFront","bool")}getFragCoord(){return this.getBuiltin("position","fragCoord","vec4")+".xy"}getFragDepth(){return"output."+this.getBuiltin("frag_depth","depth","f32","output")}getClipDistance(){return"varyings.hw_clip_distances"}isFlipY(){return!1}enableDirective(e,t=this.shaderStage){(this.directives[t]||(this.directives[t]=new Set)).add(e)}getDirectives(e){const t=[],r=this.directives[e];if(void 0!==r)for(const e of r)t.push(`enable ${e};`);return t.join("\n")}enableSubGroups(){this.enableDirective("subgroups")}enableSubgroupsF16(){this.enableDirective("subgroups-f16")}enableClipDistances(){this.enableDirective("clip_distances")}enableShaderF16(){this.enableDirective("f16")}enableDualSourceBlending(){this.enableDirective("dual_source_blending")}enableHardwareClipping(e){this.enableClipDistances(),this.getBuiltin("clip_distances","hw_clip_distances",`array`,"vertex")}getBuiltins(e){const t=[],r=this.builtins[e];if(void 0!==r)for(const{name:e,property:s,type:i}of r.values())t.push(`@builtin( ${e} ) ${s} : ${i}`);return t.join(",\n\t")}getScopedArray(e,t,r,s){return!1===this.scopedArrays.has(e)&&this.scopedArrays.set(e,{name:e,scope:t,bufferType:r,bufferCount:s}),e}getScopedArrays(e){if("compute"!==e)return;const t=[];for(const{name:e,scope:r,bufferType:s,bufferCount:i}of this.scopedArrays.values()){const n=this.getType(s);t.push(`var<${r}> ${e}: array< ${n}, ${i} >;`)}return t.join("\n")}getAttributes(e){const t=[];if("compute"===e&&(this.getBuiltin("global_invocation_id","globalId","vec3","attribute"),this.getBuiltin("workgroup_id","workgroupId","vec3","attribute"),this.getBuiltin("local_invocation_id","localId","vec3","attribute"),this.getBuiltin("num_workgroups","numWorkgroups","vec3","attribute"),this.renderer.hasFeature("subgroups")&&(this.enableDirective("subgroups",e),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute"))),"vertex"===e||"compute"===e){const e=this.getBuiltins("attribute");e&&t.push(e);const r=this.getAttributesArray();for(let e=0,s=r.length;e"),t.push(`\t${s+r.name} : ${i}`)}return e.output&&t.push(`\t${this.getBuiltins("output")}`),t.join(",\n")}getStructs(e){let t="";const r=this.structs[e];if(r.length>0){const e=[];for(const t of r){let r=`struct ${t.name} {\n`;r+=this.getStructMembers(t),r+="\n};",e.push(r)}t="\n"+e.join("\n\n")+"\n"}return t}getVar(e,t,r=null){let s=`var ${t} : `;return s+=null!==r?this.generateArrayDeclaration(e,r):this.getType(e),s}getVars(e){const t=[],r=this.vars[e];if(void 0!==r)for(const e of r)t.push(`\t${this.getVar(e.type,e.name,e.count)};`);return`\n${t.join("\n")}\n`}getVaryings(e){const t=[];if("vertex"===e&&this.getBuiltin("position","builtinClipSpace","vec4","vertex"),"vertex"===e||"fragment"===e){const r=this.varyings,s=this.vars[e];for(let i=0;ir.value.itemSize;return s&&!i}getUniforms(e){const t=this.uniforms[e],r=[],s=[],i=[],n={};for(const i of t){const t=i.groupNode.name,a=this.bindingsIndexes[t];if("texture"===i.type||"cubeTexture"===i.type||"cubeDepthTexture"===i.type||"storageTexture"===i.type||"texture3D"===i.type){const t=i.node.value;let s;(!0===t.isCubeTexture||!1===this.isUnfilterable(t)&&!0!==i.node.isStorageTextureNode)&&(this.isSampleCompare(t)?r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler_comparison;`):r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler;`));let n="";const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(t);if(o>1&&(n="_multisampled"),!0===t.isCubeTexture&&!0===t.isDepthTexture)s="texture_depth_cube";else if(!0===t.isCubeTexture)s="texture_cube";else if(!0===t.isDepthTexture)s=this.renderer.backend.compatibilityMode&&null===t.compareFunction?`texture${n}_2d`:`texture_depth${n}_2d${!0===t.isArrayTexture?"_array":""}`;else if(!0===i.node.isStorageTextureNode){const r=rC(t),n=this.getStorageAccess(i.node,e),a=i.node.value.is3DTexture,o=i.node.value.isArrayTexture;s=`texture_storage_${a?"3d":"2d"+(o?"_array":"")}<${r}, ${n}>`}else if(!0===t.isArrayTexture||!0===t.isDataArrayTexture||!0===t.isCompressedArrayTexture)s="texture_2d_array";else if(!0===t.is3DTexture||!0===t.isData3DTexture)s="texture_3d";else{s=`texture${n}_2d<${this.getComponentTypeFromTexture(t).charAt(0)}32>`}r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name} : ${s};`)}else if("buffer"===i.type||"storageBuffer"===i.type||"indirectStorageBuffer"===i.type){const t=i.node,r=this.getType(t.getNodeType(this)),n=t.bufferCount,o=n>0&&"buffer"===i.type?", "+n:"",u=t.isStorageBufferNode?`storage, ${this.getStorageAccess(t,e)}`:"uniform";if(this.isCustomStruct(i))s.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var<${u}> ${i.name} : ${r};`);else{const e=`\tvalue : array< ${t.isAtomic?`atomic<${r}>`:`${r}`}${o} >`;s.push(this._getWGSLStructBinding(i.name,e,u,a.binding++,a.group))}}else{const e=i.groupNode.name;if(void 0===n[e]){const t=this.uniformGroups[e];if(void 0!==t){const r=[];for(const e of t.uniforms){const t=e.getType(),s=this.getType(this.getVectorType(t));r.push(`\t${e.name} : ${s}`)}let s=this.uniformGroupsBindings[e];void 0===s&&(s={index:a.binding++,id:a.group},this.uniformGroupsBindings[e]=s),n[e]={index:s.index,id:s.id,snippets:r}}}}}for(const e in n){const t=n[e];i.push(this._getWGSLStructBinding(e,t.snippets.join(",\n"),"uniform",t.index,t.id))}return[...r,...s,...i].join("\n")}buildCode(){const e=null!==this.material?{fragment:{},vertex:{}}:{compute:{}};this.sortBindingGroups();for(const t in e){this.shaderStage=t;const r=e[t];r.uniforms=this.getUniforms(t),r.attributes=this.getAttributes(t),r.varyings=this.getVaryings(t),r.structs=this.getStructs(t),r.vars=this.getVars(t),r.codes=this.getCodes(t),r.directives=this.getDirectives(t),r.scopedArrays=this.getScopedArrays(t);let s="// code\n\n";s+=this.flowCode[t];const i=this.flowNodes[t],n=i[i.length-1],a=n.outputNode,o=void 0!==a&&!0===a.isOutputStructNode;for(const e of i){const i=this.getFlowData(e),u=e.name;if(u&&(s.length>0&&(s+="\n"),s+=`\t// flow -> ${u}\n`),s+=`${i.code}\n\t`,e===n&&"compute"!==t)if(s+="// result\n\n\t","vertex"===t)s+=`varyings.builtinClipSpace = ${i.result};`;else if("fragment"===t)if(o)r.returnType=a.getNodeType(this),r.structs+="var output : "+r.returnType+";",s+=`return ${i.result};`;else{let e="\t@location(0) color: vec4";const t=this.getBuiltins("output");t&&(e+=",\n\t"+t),r.returnType="OutputStruct",r.structs+=this._getWGSLStruct("OutputStruct",e),r.structs+="\nvar output : OutputStruct;",s+=`output.color = ${i.result};\n\n\treturn output;`}}r.flow=s}if(this.shaderStage=null,null!==this.material)this.vertexShader=this._getWGSLVertexCode(e.vertex),this.fragmentShader=this._getWGSLFragmentCode(e.fragment);else{const t=this.object.workgroupSize;this.computeShader=this._getWGSLComputeCode(e.compute,t)}}getMethod(e,t=null){let r;return null!==t&&(r=this._getWGSLMethod(e+"_"+t)),void 0===r&&(r=this._getWGSLMethod(e)),r||e}getBitcastMethod(e){return`bitcast<${this.getType(e)}>`}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`select( ${r}, ${t}, ${e} )`}getType(e){return pC[e]||e}isAvailable(e){let t=cC[e];return void 0===t&&("float32Filterable"===e?t=this.renderer.hasFeature("float32-filterable"):"clipDistance"===e&&(t=this.renderer.hasFeature("clip-distances")),cC[e]=t),t}getUniformBufferLimit(){return this.renderer.backend.device.limits.maxUniformBufferBindingSize}_getWGSLMethod(e){return void 0!==mC[e]&&this._include(e),fC[e]}_include(e){const t=mC[e];return t.build(this),this.addInclude(t),t}_getWGSLVertexCode(e){return`${this.getSignature()}\n// directives\n${e.directives}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// varyings\n${e.varyings}\nvar varyings : VaryingsStruct;\n\n// codes\n${e.codes}\n\n@vertex\nfn main( ${e.attributes} ) -> VaryingsStruct {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n\treturn varyings;\n\n}\n`}_getWGSLFragmentCode(e){return`${this.getSignature()}\n// global\n${yC}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@fragment\nfn main( ${e.varyings} ) -> ${e.returnType} {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLComputeCode(e,t){const[r,s,i]=t;return`${this.getSignature()}\n// directives\n${e.directives}\n\n// system\nvar instanceIndex : u32;\n\n// locals\n${e.scopedArrays}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@compute @workgroup_size( ${r}, ${s}, ${i} )\nfn main( ${e.attributes} ) {\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${r} * numWorkgroups.x )\n\t\t+ globalId.z * ( ${r} * numWorkgroups.x ) * ( ${s} * numWorkgroups.y );\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLStruct(e,t){return`\nstruct ${e} {\n${t}\n};`}_getWGSLStructBinding(e,t,r,s=0,i=0){const n=e+"Struct";return`${this._getWGSLStruct(n,t)}\n@binding( ${s} ) @group( ${i} )\nvar<${r}> ${e} : ${n};`}}class xC{constructor(e){this.backend=e}getCurrentDepthStencilFormat(e){let t;return e.depth&&(t=null!==e.depthTexture?this.getTextureFormatGPU(e.depthTexture):e.stencil?HE:WE),t}getTextureFormatGPU(e){return this.backend.get(e).format}getTextureSampleData(e){let t;if(e.isFramebufferTexture)t=1;else if(e.isDepthTexture&&!e.renderTarget){const e=this.backend.renderer,r=e.getRenderTarget();t=r?r.samples:e.currentSamples}else e.renderTarget&&(t=e.renderTarget.samples);t=t||1;const r=t>1&&null!==e.renderTarget&&!0!==e.isDepthTexture&&!0!==e.isFramebufferTexture;return{samples:t,primarySamples:r?1:t,isMSAA:r}}getCurrentColorFormat(e){let t;return t=null!==e.textures?this.getTextureFormatGPU(e.textures[0]):this.getPreferredCanvasFormat(),t}getCurrentColorFormats(e){return null!==e.textures?e.textures.map(e=>this.getTextureFormatGPU(e)):[this.getPreferredCanvasFormat()]}getCurrentColorSpace(e){return null!==e.textures?e.textures[0].colorSpace:this.backend.renderer.outputColorSpace}getPrimitiveTopology(e,t){return e.isPoints?VR:e.isLineSegments||e.isMesh&&!0===t.wireframe?kR:e.isLine?GR:e.isMesh?$R:void 0}getSampleCount(e){return e>=4?4:1}getSampleCountRenderContext(e){return null!==e.textures?this.getSampleCount(e.sampleCount):this.getSampleCount(this.backend.renderer.currentSamples)}getPreferredCanvasFormat(){const e=this.backend.parameters.outputType;if(void 0===e)return navigator.gpu.getPreferredCanvasFormat();if(e===$e)return CE;if(e===_e)return VE;throw new Error("Unsupported output buffer type.")}}const TC=new Map([[Int8Array,["sint8","snorm8"]],[Uint8Array,["uint8","unorm8"]],[Int16Array,["sint16","snorm16"]],[Uint16Array,["uint16","unorm16"]],[Int32Array,["sint32","snorm32"]],[Uint32Array,["uint32","unorm32"]],[Float32Array,["float32"]]]);"undefined"!=typeof Float16Array&&TC.set(Float16Array,["float16"]);const _C=new Map([[ot,["float16"]]]),vC=new Map([[Int32Array,"sint32"],[Int16Array,"sint32"],[Uint32Array,"uint32"],[Uint16Array,"uint32"],[Float32Array,"float32"]]);class NC{constructor(e){this.backend=e}createAttribute(e,t){const r=this._getBufferAttribute(e),s=this.backend,i=s.get(r);let n=i.buffer;if(void 0===n){const a=s.device;let o=r.array;if(!1===e.normalized)if(o.constructor===Int16Array||o.constructor===Int8Array)o=new Int32Array(o);else if((o.constructor===Uint16Array||o.constructor===Uint8Array)&&(o=new Uint32Array(o),t&GPUBufferUsage.INDEX))for(let e=0;e0&&(void 0===n.groups&&(n.groups=[],n.versions=[]),n.versions[r]===s&&(o=n.groups[r])),void 0===o&&(o=this.createBindGroup(e,a),r>0&&(n.groups[r]=o,n.versions[r]=s)),n.group=o}updateBinding(e){const t=this.backend,r=t.device,s=e.buffer,i=t.get(e).buffer,n=e.updateRanges;if(0===n.length)r.queue.writeBuffer(i,0,s,0);else{const e=Kr(s),t=e?1:s.BYTES_PER_ELEMENT;for(let a=0,o=n.length;a1&&(i+=`-${e.texture.depthOrArrayLayers}`),i+=`-${r}-${s}`,a=e[i],void 0===a){const n=zw;let o;o=t.isSampledCubeTexture?Gw:t.isSampledTexture3D?$w:t.texture.isArrayTexture||t.texture.isDataArrayTexture||t.texture.isCompressedArrayTexture?kw:Vw,a=e[i]=e.texture.createView({aspect:n,dimension:o,mipLevelCount:r,baseMipLevel:s})}}n.push({binding:i,resource:a})}else if(t.isSampler){const e=r.get(t.texture);n.push({binding:i,resource:e.sampler})}i++}return s.createBindGroup({label:"bindGroup_"+e.name,layout:t,entries:n})}_createLayoutEntries(e){const t=[];let r=0;for(const s of e.bindings){const e=this.backend,i={binding:r,visibility:s.visibility};if(s.isUniformBuffer||s.isStorageBuffer){const e={};s.isStorageBuffer&&(s.visibility&zR.COMPUTE&&(s.access===si.READ_WRITE||s.access===si.WRITE_ONLY)?e.type=Rw:e.type=Ew),i.buffer=e}else if(s.isSampledTexture&&s.store){const e={};e.format=this.backend.get(s.texture).texture.format;const t=s.access;e.access=t===si.READ_WRITE?Cw:t===si.WRITE_ONLY?Aw:ww,s.texture.isArrayTexture?e.viewDimension=kw:s.texture.is3DTexture&&(e.viewDimension=$w),i.storageTexture=e}else if(s.isSampledTexture){const t={},{primarySamples:r}=e.utils.getTextureSampleData(s.texture);if(r>1&&(t.multisampled=!0,s.texture.isDepthTexture||(t.sampleType=Lw)),s.texture.isDepthTexture)e.compatibilityMode&&null===s.texture.compareFunction?t.sampleType=Lw:t.sampleType=Pw;else if(s.texture.isDataTexture||s.texture.isDataArrayTexture||s.texture.isData3DTexture){const e=s.texture.type;e===R?t.sampleType=Dw:e===S?t.sampleType=Uw:e===Q&&(this.backend.hasFeature("float32-filterable")?t.sampleType=Fw:t.sampleType=Lw)}s.isSampledCubeTexture?t.viewDimension=Gw:s.texture.isArrayTexture||s.texture.isDataArrayTexture||s.texture.isCompressedArrayTexture?t.viewDimension=kw:s.isSampledTexture3D&&(t.viewDimension=$w),i.texture=t}else if(s.isSampler){const t={};s.texture.isDepthTexture&&(null!==s.texture.compareFunction&&e.hasCompatibility(E.TEXTURE_COMPARE)?t.type=Bw:t.type=Mw),i.sampler=t}else o(`WebGPUBindingUtils: Unsupported binding "${s}".`);t.push(i),r++}return t}deleteBindGroupData(e){const{backend:t}=this,r=t.get(e);r.layout&&(r.layout.usedTimes--,0===r.layout.usedTimes&&this._bindGroupLayoutCache.delete(r.layoutKey),r.layout=void 0,r.layoutKey=void 0)}dispose(){this._bindGroupLayoutCache.clear()}}class EC{constructor(e){this.backend=e,this._activePipelines=new WeakMap}setPipeline(e,t){this._activePipelines.get(e)!==t&&(e.setPipeline(t),this._activePipelines.set(e,t))}_getSampleCount(e){return this.backend.utils.getSampleCountRenderContext(e)}createRenderPipeline(e,t){const{object:r,material:s,geometry:i,pipeline:n}=e,{vertexProgram:a,fragmentProgram:u}=n,l=this.backend,d=l.device,c=l.utils,h=l.get(n),p=[];for(const t of e.getBindings()){const e=l.get(t),{layoutGPU:r}=e.layout;p.push(r)}const g=l.attributeUtils.createShaderVertexBuffers(e);let m;s.blending===se||s.blending===ze&&!1===s.transparent||(m=this._getBlending(s));let f={};!0===s.stencilWrite&&(f={compare:this._getStencilCompare(s),failOp:this._getStencilOperation(s.stencilFail),depthFailOp:this._getStencilOperation(s.stencilZFail),passOp:this._getStencilOperation(s.stencilZPass)});const y=this._getColorWriteMask(s),b=[];if(null!==e.context.textures){const t=e.context.textures,r=e.context.mrt;for(let e=0;e1},layout:d.createPipelineLayout({bindGroupLayouts:p})},A={},w=e.context.depth,C=e.context.stencil;if(!0!==w&&!0!==C||(!0===w&&(A.format=S,A.depthWriteEnabled=s.depthWrite,A.depthCompare=N),!0===C&&(A.stencilFront=f,A.stencilBack=f,A.stencilReadMask=s.stencilFuncMask,A.stencilWriteMask=s.stencilWriteMask),!0===s.polygonOffset&&(A.depthBias=s.polygonOffsetUnits,A.depthBiasSlopeScale=s.polygonOffsetFactor,A.depthBiasClamp=0),E.depthStencil=A),d.pushErrorScope("validation"),null===t)h.pipeline=d.createRenderPipeline(E),d.popErrorScope().then(e=>{null!==e&&(h.error=!0,o(e.message))});else{const e=new Promise(async e=>{try{h.pipeline=await d.createRenderPipelineAsync(E)}catch(e){}const t=await d.popErrorScope();null!==t&&(h.error=!0,o(t.message)),e()});t.push(e)}}createBundleEncoder(e,t="renderBundleEncoder"){const r=this.backend,{utils:s,device:i}=r,n=s.getCurrentDepthStencilFormat(e),a={label:t,colorFormats:s.getCurrentColorFormats(e),depthStencilFormat:n,sampleCount:this._getSampleCount(e)};return i.createRenderBundleEncoder(a)}createComputePipeline(e,t){const r=this.backend,s=r.device,i=r.get(e.computeProgram).module,n=r.get(e),a=[];for(const e of t){const t=r.get(e),{layoutGPU:s}=t.layout;a.push(s)}n.pipeline=s.createComputePipeline({compute:i,layout:s.createPipelineLayout({bindGroupLayouts:a})})}_getBlending(e){let t,r;const s=e.blending,i=e.blendSrc,n=e.blendDst,a=e.blendEquation;if(s===pt){const s=null!==e.blendSrcAlpha?e.blendSrcAlpha:i,o=null!==e.blendDstAlpha?e.blendDstAlpha:n,u=null!==e.blendEquationAlpha?e.blendEquationAlpha:a;t={srcFactor:this._getBlendFactor(i),dstFactor:this._getBlendFactor(n),operation:this._getBlendOperation(a)},r={srcFactor:this._getBlendFactor(s),dstFactor:this._getBlendFactor(o),operation:this._getBlendOperation(u)}}else{const i=(e,s,i,n)=>{t={srcFactor:e,dstFactor:s,operation:dw},r={srcFactor:i,dstFactor:n,operation:dw}};if(e.premultipliedAlpha)switch(s){case ze:i(ZA,rw,ZA,rw);break;case jt:i(ZA,ZA,ZA,ZA);break;case qt:i(YA,ew,YA,ZA);break;case Ht:i(sw,rw,YA,ZA)}else switch(s){case ze:i(tw,rw,ZA,rw);break;case jt:i(tw,ZA,ZA,ZA);break;case qt:o(`WebGPURenderer: "SubtractiveBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`);break;case Ht:o(`WebGPURenderer: "MultiplyBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`)}}if(void 0!==t&&void 0!==r)return{color:t,alpha:r};o("WebGPURenderer: Invalid blending: ",s)}_getBlendFactor(e){let t;switch(e){case gt:t=YA;break;case Gt:t=ZA;break;case kt:t=JA;break;case Ut:t=ew;break;case We:t=tw;break;case He:t=rw;break;case Ot:t=sw;break;case Dt:t=iw;break;case It:t=nw;break;case Pt:t=aw;break;case Vt:t=ow;break;case 211:t=uw;break;case 212:t=lw;break;default:o("WebGPURenderer: Blend factor not supported.",e)}return t}_getStencilCompare(e){let t;const r=e.stencilFunc;switch(r){case ss:t=WR;break;case rs:t=YR;break;case ts:t=HR;break;case es:t=jR;break;case Jr:t=qR;break;case Zr:t=QR;break;case Yr:t=XR;break;case Qr:t=KR;break;default:o("WebGPURenderer: Invalid stencil function.",r)}return t}_getStencilOperation(e){let t;switch(e){case cs:t=yw;break;case ds:t=bw;break;case ls:t=xw;break;case us:t=Tw;break;case os:t=_w;break;case as:t=vw;break;case ns:t=Nw;break;case is:t=Sw;break;default:o("WebGPURenderer: Invalid stencil operation.",t)}return t}_getBlendOperation(e){let t;switch(e){case qe:t=dw;break;case Lt:t=cw;break;case Ft:t=hw;break;case ps:t=pw;break;case hs:t=gw;break;default:o("WebGPUPipelineUtils: Blend equation not supported.",e)}return t}_getPrimitiveState(e,t,r){const s={},i=this.backend.utils;s.topology=i.getPrimitiveTopology(e,r),null!==t.index&&!0===e.isLine&&!0!==e.isLineSegments&&(s.stripIndexFormat=t.index.array instanceof Uint16Array?nE:aE);let n=r.side===L;return e.isMesh&&e.matrixWorld.determinant()<0&&(n=!n),s.frontFace=!0===n?rE:tE,s.cullMode=r.side===P?sE:iE,s}_getColorWriteMask(e){return!0===e.colorWrite?fw:mw}_getDepthCompare(e){let t;if(!1===e.depthTest)t=YR;else{const r=this.backend.parameters.reversedDepthBuffer?rr[e.depthFunc]:e.depthFunc;switch(r){case tr:t=WR;break;case er:t=YR;break;case Jt:t=HR;break;case Zt:t=jR;break;case Yt:t=qR;break;case Qt:t=QR;break;case Kt:t=XR;break;case Xt:t=KR;break;default:o("WebGPUPipelineUtils: Invalid depth function.",r)}}return t}}class AC extends UR{constructor(e,t,r=2048){super(r),this.device=e,this.type=t,this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxQueries,label:`queryset_global_timestamp_${t}`});const s=8*this.maxQueries;this.resolveBuffer=this.device.createBuffer({label:`buffer_timestamp_resolve_${t}`,size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.resultBuffer=this.device.createBuffer({label:`buffer_timestamp_result_${t}`,size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})}allocateQueriesForContext(e){if(!this.trackTimestamp||this.isDisposed)return null;if(this.currentQueryIndex+2>this.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryOffsets.set(e,t),t}async resolveQueriesAsync(){if(!this.trackTimestamp||0===this.currentQueryIndex||this.isDisposed)return this.lastValue;if(this.pendingResolve)return this.pendingResolve;this.pendingResolve=this._resolveQueries();try{return await this.pendingResolve}finally{this.pendingResolve=null}}async _resolveQueries(){if(this.isDisposed)return this.lastValue;try{if("unmapped"!==this.resultBuffer.mapState)return this.lastValue;const e=new Map(this.queryOffsets),t=this.currentQueryIndex,r=8*t;this.currentQueryIndex=0,this.queryOffsets.clear();const s=this.device.createCommandEncoder();s.resolveQuerySet(this.querySet,0,t,this.resolveBuffer,0),s.copyBufferToBuffer(this.resolveBuffer,0,this.resultBuffer,0,r);const i=s.finish();if(this.device.queue.submit([i]),"unmapped"!==this.resultBuffer.mapState)return this.lastValue;if(await this.resultBuffer.mapAsync(GPUMapMode.READ,0,r),this.isDisposed)return"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue;const n=new BigUint64Array(this.resultBuffer.getMappedRange(0,r)),a={},o=[];for(const[t,r]of e){const e=t.match(/^(.*):f(\d+)$/),s=parseInt(e[2]);!1===o.includes(s)&&o.push(s),void 0===a[s]&&(a[s]=0);const i=n[r],u=n[r+1],l=Number(u-i)/1e6;this.timestamps.set(t,l),a[s]+=l}const u=a[o[o.length-1]];return this.resultBuffer.unmap(),this.lastValue=u,this.frames=o,u}catch(e){return o("Error resolving queries:",e),"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue}}async dispose(){if(!this.isDisposed){if(this.isDisposed=!0,this.pendingResolve)try{await this.pendingResolve}catch(e){o("Error waiting for pending resolve:",e)}if(this.resultBuffer&&"mapped"===this.resultBuffer.mapState)try{this.resultBuffer.unmap()}catch(e){o("Error unmapping buffer:",e)}this.querySet&&(this.querySet.destroy(),this.querySet=null),this.resolveBuffer&&(this.resolveBuffer.destroy(),this.resolveBuffer=null),this.resultBuffer&&(this.resultBuffer.destroy(),this.resultBuffer=null),this.queryOffsets.clear(),this.pendingResolve=null}}}class wC extends bR{constructor(e={}){super(e),this.isWebGPUBackend=!0,this.parameters.alpha=void 0===e.alpha||e.alpha,this.parameters.requiredLimits=void 0===e.requiredLimits?{}:e.requiredLimits,this.compatibilityMode=null,this.device=null,this.defaultRenderPassdescriptor=null,this.utils=new xC(this),this.attributeUtils=new NC(this),this.bindingUtils=new RC(this),this.pipelineUtils=new EC(this),this.textureUtils=new tC(this),this.occludedResolveCache=new Map;const t="undefined"==typeof navigator||!1===/Android/.test(navigator.userAgent);this._compatibility={[E.TEXTURE_COMPARE]:t}}async init(e){await super.init(e);const t=this.parameters;let r;if(void 0===t.device){const e={powerPreference:t.powerPreference,featureLevel:"compatibility"},s="undefined"!=typeof navigator?await navigator.gpu.requestAdapter(e):null;if(null===s)throw new Error("WebGPUBackend: Unable to create WebGPU adapter.");const i=Object.values(qw),n=[];for(const e of i)s.features.has(e)&&n.push(e);const a={requiredFeatures:n,requiredLimits:t.requiredLimits};r=await s.requestDevice(a)}else r=t.device;this.compatibilityMode=!r.features.has("core-features-and-limits"),this.compatibilityMode&&(e._samples=0),r.lost.then(t=>{if("destroyed"===t.reason)return;const r={api:"WebGPU",message:t.message||"Unknown reason",reason:t.reason||null,originalEvent:t};e.onDeviceLost(r)}),this.device=r,this.trackTimestamp=this.trackTimestamp&&this.hasFeature(qw.TimestampQuery),this.updateSize()}get context(){const e=this.renderer.getCanvasTarget(),t=this.get(e);let r=t.context;if(void 0===r){const s=this.parameters;r=!0===e.isDefaultCanvasTarget&&void 0!==s.context?s.context:e.domElement.getContext("webgpu"),"setAttribute"in e.domElement&&e.domElement.setAttribute("data-engine",`three.js r${lt} webgpu`);const i=s.alpha?"premultiplied":"opaque",n=s.outputType===_e?"extended":"standard";r.configure({device:this.device,format:this.utils.getPreferredCanvasFormat(),usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,alphaMode:i,toneMapping:{mode:n}}),t.context=r}return r}get coordinateSystem(){return h}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}getContext(){return this.context}_getDefaultRenderPassDescriptor(){const e=this.renderer,t=e.getCanvasTarget(),r=this.get(t),s=e.currentSamples;let i=r.descriptor;if(void 0===i||r.samples!==s){i={colorAttachments:[{view:null}]},!0!==e.depth&&!0!==e.stencil||(i.depthStencilAttachment={view:this.textureUtils.getDepthBuffer(e.depth,e.stencil).createView()});const t=i.colorAttachments[0];s>0?t.view=this.textureUtils.getColorBuffer().createView():t.resolveTarget=void 0,r.descriptor=i,r.samples=s}const n=i.colorAttachments[0];return s>0?n.resolveTarget=this.context.getCurrentTexture().createView():n.view=this.context.getCurrentTexture().createView(),i}_isRenderCameraDepthArray(e){return e.depthTexture&&e.depthTexture.image.depth>1&&e.camera.isArrayCamera}_getRenderPassDescriptor(e,t={}){const r=e.renderTarget,s=this.get(r);let i=s.descriptors;void 0!==i&&s.width===r.width&&s.height===r.height&&s.samples===r.samples||(i={},s.descriptors=i);const n=e.getCacheKey();let a=i[n];if(void 0===a){const t=e.textures,o=[];let u;const l=this._isRenderCameraDepthArray(e);for(let s=0;s1)if(!0===l){const t=e.camera.cameras;for(let e=0;e0&&(t.currentOcclusionQuerySet&&t.currentOcclusionQuerySet.destroy(),t.currentOcclusionQueryBuffer&&t.currentOcclusionQueryBuffer.destroy(),t.currentOcclusionQuerySet=t.occlusionQuerySet,t.currentOcclusionQueryBuffer=t.occlusionQueryBuffer,t.currentOcclusionQueryObjects=t.occlusionQueryObjects,i=r.createQuerySet({type:"occlusion",count:s,label:`occlusionQuerySet_${e.id}`}),t.occlusionQuerySet=i,t.occlusionQueryIndex=0,t.occlusionQueryObjects=new Array(s),t.lastOcclusionObject=null),n=null===e.textures?this._getDefaultRenderPassDescriptor():this._getRenderPassDescriptor(e,{loadOp:JR}),this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e),n),n.occlusionQuerySet=i;const a=n.depthStencilAttachment;if(null!==e.textures){const t=n.colorAttachments;for(let r=0;r0&&t.currentPass.executeBundles(t.renderBundles),r>t.occlusionQueryIndex&&t.currentPass.endOcclusionQuery();const s=t.encoder;if(!0===this._isRenderCameraDepthArray(e)){const r=[];for(let e=0;e0){const s=8*r;let i=this.occludedResolveCache.get(s);void 0===i&&(i=this.device.createBuffer({size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.occludedResolveCache.set(s,i));const n=this.device.createBuffer({size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});t.encoder.resolveQuerySet(t.occlusionQuerySet,0,r,i,0),t.encoder.copyBufferToBuffer(i,0,n,0,s),t.occlusionQueryBuffer=n,this.resolveOccludedAsync(e)}if(this.device.queue.submit([t.encoder.finish()]),null!==e.textures){const t=e.textures;for(let e=0;eo&&(i[0]=Math.min(a,o),i[1]=Math.ceil(a/o)),n.dispatchSize=i}i=n.dispatchSize}a.dispatchWorkgroups(i[0],i[1]||1,i[2]||1)}finishCompute(e){const t=this.get(e);t.passEncoderGPU.end(),this.device.queue.submit([t.cmdEncoderGPU.finish()])}draw(e,t){const{object:r,material:s,context:i,pipeline:n}=e,a=e.getBindings(),o=this.get(i),u=this.get(n),l=u.pipeline;if(!0===u.error)return;const d=e.getIndex(),c=null!==d,h=e.getDrawParameters();if(null===h)return;const p=(t,r)=>{this.pipelineUtils.setPipeline(t,l),r.pipeline=l;const n=r.bindingGroups;for(let e=0,r=a.length;e{if(p(i,n),!0===r.isBatchedMesh){const e=r._multiDrawStarts,n=r._multiDrawCounts,a=r._multiDrawCount,o=r._multiDrawInstances;null!==o&&v("WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.");let u=!0===c?d.array.BYTES_PER_ELEMENT:1;s.wireframe&&(u=r.geometry.attributes.position.count>65535?4:2);for(let s=0;s1?0:s;!0===c?i.drawIndexed(n[s],a,e[s]/u,0,l):i.draw(n[s],a,e[s],l),t.update(r,n[s],a)}}else if(!0===c){const{vertexCount:s,instanceCount:n,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const t=this.get(o).buffer,r=e.getIndirectOffset(),s=Array.isArray(r)?r:[r];for(let e=0;e0){const t=this.get(e.camera),s=e.camera.cameras,n=e.getBindingGroup("cameraIndex");if(void 0===t.indexesGPU||t.indexesGPU.length!==s.length){const e=this.get(n),r=[],i=new Uint32Array([0,0,0,0]);for(let t=0,n=s.length;t(d("WebGPURenderer: WebGPU is not available, running under WebGL2 backend."),new OR(e)));super(new t(e),e),this.library=new BC,this.isWebGPURenderer=!0}}class LC extends As{constructor(){super(),this.isBundleGroup=!0,this.type="BundleGroup",this.static=!0,this.version=0}set needsUpdate(e){!0===e&&this.version++}}class PC{constructor(e,t=wn(0,0,1,1)){this.renderer=e,this.outputNode=t,this.outputColorTransform=!0,this.needsUpdate=!0;const r=new yg;r.name="RenderPipeline",this._quadMesh=new dx(r),this._quadMesh.name="Render Pipeline",this._context=null}render(){const e=this.renderer;this._update(),null!==this._context.onBeforeRenderPipeline&&this._context.onBeforeRenderPipeline();const t=e.toneMapping,r=e.outputColorSpace;e.toneMapping=m,e.outputColorSpace=p.workingColorSpace;const s=e.xr.enabled;e.xr.enabled=!1,this._quadMesh.render(e),e.xr.enabled=s,e.toneMapping=t,e.outputColorSpace=r,null!==this._context.onAfterRenderPipeline&&this._context.onAfterRenderPipeline()}get context(){return this._context}dispose(){this._quadMesh.material.dispose()}_update(){if(!0===this.needsUpdate){const e=this.renderer,t=e.toneMapping,r=e.outputColorSpace,s={renderPipeline:this,onBeforeRenderPipeline:null,onAfterRenderPipeline:null};let i=this.outputNode;!0===this.outputColorTransform?(i=i.context(s),i=xl(i,t,r)):(s.toneMapping=t,s.outputColorSpace=r,i=i.context(s)),this._context=s,this._quadMesh.material.fragmentNode=i,this._quadMesh.material.needsUpdate=!0,this.needsUpdate=!1}}async renderAsync(){v('RenderPipeline: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.renderer.init(),this.render()}}class DC extends PC{constructor(e,t){v('PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.'),super(e,t)}}class UC extends N{constructor(e=1,t=1){super(),this.image={width:e,height:t},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0,this.mipmapsAutoUpdate=!0}setSize(e,t){this.image.width===e&&this.image.height===t||(this.image.width=e,this.image.height=t,this.dispose())}}class IC extends Nx{constructor(e,t){super(e,t,Uint32Array),this.isIndirectStorageBufferAttribute=!0}}class OC extends ws{constructor(e){super(e),this.textures={},this.nodes={}}load(e,t,r,s){const i=new Cs(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,r=>{try{t(this.parse(JSON.parse(r)))}catch(t){s?s(t):o(t),this.manager.itemError(e)}},r,s)}parseNodes(e){const t={};if(void 0!==e){for(const r of e){const{uuid:e,type:s}=r;t[e]=this.createNodeFromType(s),t[e].uuid=e}const r={nodes:t,textures:this.textures};for(const s of e){s.meta=r;t[s.uuid].deserialize(s),delete s.meta}}return t}parse(e){const t=this.createNodeFromType(e.type);t.uuid=e.uuid;const r={nodes:this.parseNodes(e.nodes),textures:this.textures};return e.meta=r,t.deserialize(e),delete e.meta,t}setTextures(e){return this.textures=e,this}setNodes(e){return this.nodes=e,this}createNodeFromType(e){return void 0===this.nodes[e]?(o("NodeLoader: Node type not found:",e),fn()):new this.nodes[e]}}class VC extends Ms{constructor(e){super(e),this.nodes={},this.nodeMaterials={}}parse(e){const t=super.parse(e),r=this.nodes,s=e.inputNodes;for(const e in s){const i=s[e];t[e]=r[i]}return t}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}createMaterialFromType(e){const t=this.nodeMaterials[e];return void 0!==t?new t:super.createMaterialFromType(e)}}class kC extends Bs{constructor(e){super(e),this.nodes={},this.nodeMaterials={},this._nodesJSON=null}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}parse(e,t){this._nodesJSON=e.nodes;const r=super.parse(e,t);return this._nodesJSON=null,r}parseNodes(e,t){if(void 0!==e){const r=new OC;return r.setNodes(this.nodes),r.setTextures(t),r.parseNodes(e)}return{}}parseMaterials(e,t){const r={};if(void 0!==e){const s=this.parseNodes(this._nodesJSON,t),i=new VC;i.setTextures(t),i.setNodes(s),i.setNodeMaterials(this.nodeMaterials);for(let t=0,s=e.length;t0){const{width:r,height:s}=e.context;t.bufferWidth=r,t.bufferHeight=s}t.lights=this.getLightsData(e.lightsNode.getLights()),this.renderObjects.set(e,t)}return t}getAttributesData(e){const t={};for(const r in e){const s=e[r];t[r]={id:s.id,version:s.version}}return t}containsNode(e){const t=e.material;for(const e in t)if(t[e]&&t[e].isNode)return!0;return!!(e.context.modelViewMatrix||e.context.modelNormalViewMatrix||e.context.getAO||e.context.getShadow)}getMaterialData(e){const t={};for(const r of this.refreshUniforms){const s=e[r];null!=s&&("object"==typeof s&&void 0!==s.clone?!0===s.isTexture?t[r]={id:s.id,version:s.version}:t[r]=s.clone():t[r]=s)}return t}equals(e,t){const{object:r,material:s,geometry:i}=e,n=this.getRenderObjectData(e);if(!0!==n.worldMatrix.equals(r.matrixWorld))return n.worldMatrix.copy(r.matrixWorld),!1;const a=n.material;for(const e in a){const t=a[e],r=s[e];if(void 0!==t.equals){if(!1===t.equals(r))return t.copy(r),!1}else if(!0===r.isTexture){if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}else if(t!==r)return a[e]=r,!1}if(a.transmission>0){const{width:t,height:r}=e.context;if(n.bufferWidth!==t||n.bufferHeight!==r)return n.bufferWidth=t,n.bufferHeight=r,!1}const o=n.geometry,u=i.attributes,l=o.attributes,d=Object.keys(l),c=Object.keys(u);if(o.id!==i.id)return o.id=i.id,!1;if(d.length!==c.length)return n.geometry.attributes=this.getAttributesData(u),!1;for(const e of d){const t=l[e],r=u[e];if(void 0===r)return delete l[e],!1;if(t.id!==r.id||t.version!==r.version)return t.id=r.id,t.version=r.version,!1}const h=i.index,p=o.indexId,g=o.indexVersion,m=h?h.id:null,f=h?h.version:null;if(p!==m||g!==f)return o.indexId=m,o.indexVersion=f,!1;if(o.drawRange.start!==i.drawRange.start||o.drawRange.count!==i.drawRange.count)return o.drawRange.start=i.drawRange.start,o.drawRange.count=i.drawRange.count,!1;if(n.morphTargetInfluences){let e=!1;for(let t=0;t{const r=e.match(t);if(!r)return null;const s=r[1]||r[2]||"",i=r[3].split("?")[0],n=parseInt(r[4],10),a=parseInt(r[5],10);return{fn:s,file:i.split("/").pop(),line:n,column:a}}).filter(e=>e&&!Ds.some(t=>t.test(e.file)))}(e||(new Error).stack)}getLocation(){if(0===this.stack.length)return"[Unknown location]";const e=this.stack[0],t=e.fn;return`${t?`"${t}()" at `:""}"${e.file}:${e.line}"`}getError(e){if(0===this.stack.length)return e;return`${e}\n${this.stack.map(e=>{const t=`${e.file}:${e.line}:${e.column}`;return e.fn?` at ${e.fn} (${t})`:` at ${t}`}).join("\n")}`}}function Is(e,t=0){let r=3735928559^t,s=1103547991^t;if(e instanceof Array)for(let t,i=0;i>>16,2246822507),r^=Math.imul(s^s>>>13,3266489909),s=Math.imul(s^s>>>16,2246822507),s^=Math.imul(r^r>>>13,3266489909),4294967296*(2097151&s)+(r>>>0)}const Os=e=>Is(e),Vs=e=>Is(e),ks=(...e)=>Is(e),Gs=new Map([[1,"float"],[2,"vec2"],[3,"vec3"],[4,"vec4"],[9,"mat3"],[16,"mat4"]]),$s=new WeakMap;function zs(e){return Gs.get(e)}function Ws(e){if(/[iu]?vec\d/.test(e))return e.startsWith("ivec")?Int32Array:e.startsWith("uvec")?Uint32Array:Float32Array;if(/mat\d/.test(e))return Float32Array;if(/float/.test(e))return Float32Array;if(/uint/.test(e))return Uint32Array;if(/int/.test(e))return Int32Array;throw new Error(`THREE.NodeUtils: Unsupported type: ${e}`)}function Hs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?9:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function qs(e){return/float|int|uint/.test(e)?1:/vec2/.test(e)?2:/vec3/.test(e)?3:/vec4/.test(e)||/mat2/.test(e)?4:/mat3/.test(e)?12:/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function js(e){return/float|int|uint/.test(e)?4:/vec2/.test(e)?8:/vec3/.test(e)||/vec4/.test(e)?16:/mat2/.test(e)?8:/mat3/.test(e)||/mat4/.test(e)?16:void o(`TSL: Unsupported type: ${e}`,new Us)}function Xs(e){if(null==e)return null;const t=typeof e;return!0===e.isNode?"node":"number"===t?"float":"boolean"===t?"bool":"string"===t?"string":"function"===t?"shader":!0===e.isVector2?"vec2":!0===e.isVector3?"vec3":!0===e.isVector4?"vec4":!0===e.isMatrix2?"mat2":!0===e.isMatrix3?"mat3":!0===e.isMatrix4?"mat4":!0===e.isColor?"color":e instanceof ArrayBuffer?"ArrayBuffer":null}function Ks(o,...u){const l=o?o.slice(-4):void 0;return 1===u.length&&("vec2"===l?u=[u[0],u[0]]:"vec3"===l?u=[u[0],u[0],u[0]]:"vec4"===l&&(u=[u[0],u[0],u[0],u[0]])),"color"===o?new e(...u):"vec2"===l?new t(...u):"vec3"===l?new r(...u):"vec4"===l?new s(...u):"mat2"===l?new i(...u):"mat3"===l?new n(...u):"mat4"===l?new a(...u):"bool"===o?u[0]||!1:"float"===o||"int"===o||"uint"===o?u[0]||0:"string"===o?u[0]||"":"ArrayBuffer"===o?Zs(u[0]):null}function Qs(e){let t=$s.get(e);return void 0===t&&(t={},$s.set(e,t)),t}function Ys(e){let t="";const r=new Uint8Array(e);for(let e=0;ee.charCodeAt(0)).buffer}var Js=Object.freeze({__proto__:null,arrayBufferToBase64:Ys,base64ToArrayBuffer:Zs,getAlignmentFromType:js,getDataFromObject:Qs,getLengthFromType:Hs,getMemoryLengthFromType:qs,getTypeFromLength:zs,getTypedArrayFromType:Ws,getValueFromType:Ks,getValueType:Xs,hash:ks,hashArray:Vs,hashString:Os});const ei={VERTEX:"vertex",FRAGMENT:"fragment"},ti={NONE:"none",FRAME:"frame",RENDER:"render",OBJECT:"object"},ri={BOOLEAN:"bool",INTEGER:"int",FLOAT:"float",VECTOR2:"vec2",VECTOR3:"vec3",VECTOR4:"vec4",MATRIX2:"mat2",MATRIX3:"mat3",MATRIX4:"mat4"},si={READ_ONLY:"readOnly",WRITE_ONLY:"writeOnly",READ_WRITE:"readWrite"},ii=["fragment","vertex"],ni=["setup","analyze","generate"],ai=[...ii,"compute"],oi=["x","y","z","w"],ui={analyze:"setup",generate:"analyze"};let li=0;class di extends u{static get type(){return"Node"}constructor(e=null){super(),this.nodeType=e,this.updateType=ti.NONE,this.updateBeforeType=ti.NONE,this.updateAfterType=ti.NONE,this.uuid=l.generateUUID(),this.version=0,this.name="",this.global=!1,this.parents=!1,this.isNode=!0,this._beforeNodes=null,this._cacheKey=null,this._cacheKeyVersion=0,Object.defineProperty(this,"id",{value:li++}),this.stackTrace=null,!0===di.captureStackTrace&&(this.stackTrace=new Us)}set needsUpdate(e){!0===e&&this.version++}get type(){return this.constructor.type}onUpdate(e,t){return this.updateType=t,this.update=e.bind(this),this}onFrameUpdate(e){return this.onUpdate(e,ti.FRAME)}onRenderUpdate(e){return this.onUpdate(e,ti.RENDER)}onObjectUpdate(e){return this.onUpdate(e,ti.OBJECT)}onReference(e){return this.updateReference=e.bind(this),this}updateReference(){return this}isGlobal(){return this.global}*getChildren(){for(const{childNode:e}of this._getChildren())yield e}dispose(){this.dispatchEvent({type:"dispose"})}traverse(e){e(this);for(const t of this.getChildren())t.traverse(e)}_getChildren(e=new Set){const t=[];e.add(this);for(const r of Object.getOwnPropertyNames(this)){const s=this[r];if(!0!==r.startsWith("_")&&!e.has(s))if(!0===Array.isArray(s))for(let e=0;e0&&(e.inputNodes=r)}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const r in e.inputNodes)if(Array.isArray(e.inputNodes[r])){const s=[];for(const i of e.inputNodes[r])s.push(t[i]);this[r]=s}else if("object"==typeof e.inputNodes[r]){const s={};for(const i in e.inputNodes[r]){const n=e.inputNodes[r][i];s[i]=t[n]}this[r]=s}else{const s=e.inputNodes[r];this[r]=t[s]}}}toJSON(e){const{uuid:t,type:r}=this,s=void 0===e||"string"==typeof e;s&&(e={textures:{},images:{},nodes:{}});let i=e.nodes[t];function n(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(void 0===i&&(i={uuid:t,type:r,meta:e,metadata:{version:4.7,type:"Node",generator:"Node.toJSON"}},!0!==s&&(e.nodes[i.uuid]=i),this.serialize(i),delete i.meta),s){const t=n(e.textures),r=n(e.images),s=n(e.nodes);t.length>0&&(i.textures=t),r.length>0&&(i.images=r),s.length>0&&(i.nodes=s)}return i}}di.captureStackTrace=!1;class ci extends di{static get type(){return"ArrayElementNode"}constructor(e,t){super(),this.node=e,this.indexNode=t,this.isArrayElementNode=!0}getNodeType(e){return this.node.getElementType(e)}getMemberType(e,t){return this.node.getMemberType(e,t)}generate(e){const t=this.indexNode.getNodeType(e);return`${this.node.build(e)}[ ${this.indexNode.build(e,!e.isVector(t)&&e.isInteger(t)?t:"uint")} ]`}}class hi extends di{static get type(){return"ConvertNode"}constructor(e,t){super(),this.node=e,this.convertTo=t}getNodeType(e){const t=this.node.getNodeType(e);let r=null;for(const s of this.convertTo.split("|"))null!==r&&e.getTypeLength(t)!==e.getTypeLength(s)||(r=s);return r}serialize(e){super.serialize(e),e.convertTo=this.convertTo}deserialize(e){super.deserialize(e),this.convertTo=e.convertTo}generate(e,t){const r=this.node,s=this.getNodeType(e),i=r.build(e,s);return e.format(i,s,t)}}class pi extends di{static get type(){return"TempNode"}constructor(e=null){super(e),this.isTempNode=!0}hasDependencies(e){return e.getDataFromNode(this).usageCount>1}build(e,t){if("generate"===e.getBuildStage()){const r=e.getVectorType(this.getNodeType(e,t)),s=e.getDataFromNode(this);if(void 0!==s.propertyName)return e.format(s.propertyName,r,t);if("void"!==r&&"void"!==t&&this.hasDependencies(e)){const i=super.build(e,r),n=e.getVarFromNode(this,null,r),a=e.getPropertyName(n);return e.addLineFlowCode(`${a} = ${i}`,this),s.snippet=i,s.propertyName=a,e.format(s.propertyName,r,t)}}return super.build(e,t)}}class gi extends pi{static get type(){return"JoinNode"}constructor(e=[],t=null){super(t),this.nodes=e}getNodeType(e){return null!==this.nodeType?e.getVectorType(this.nodeType):e.getTypeFromLength(this.nodes.reduce((t,r)=>t+e.getTypeLength(r.getNodeType(e)),0))}generate(e,t){const r=this.getNodeType(e),s=e.getTypeLength(r),i=this.nodes,n=e.getComponentType(r),a=[];let u=0;for(const t of i){if(u>=s){o(`TSL: Length of parameters exceeds maximum length of function '${r}()' type.`,this.stackTrace);break}let i,l=t.getNodeType(e),d=e.getTypeLength(l);u+d>s&&(o(`TSL: Length of '${r}()' data exceeds maximum length of output type.`,this.stackTrace),d=s-u,l=e.getTypeFromLength(d)),u+=d,i=t.build(e,l);if(e.getComponentType(l)!==n){const t=e.getTypeFromLength(d,n);i=e.format(i,l,t)}a.push(i)}const l=`${e.getType(r)}( ${a.join(", ")} )`;return e.format(l,r,t)}}const mi=oi.join("");class fi extends di{static get type(){return"SplitNode"}constructor(e,t="x"){super(),this.node=e,this.components=t,this.isSplitNode=!0}getVectorLength(){let e=this.components.length;for(const t of this.components)e=Math.max(oi.indexOf(t)+1,e);return e}getComponentType(e){return e.getComponentType(this.node.getNodeType(e))}getNodeType(e){return e.getTypeFromLength(this.components.length,this.getComponentType(e))}getScope(){return this.node.getScope()}generate(e,t){const r=this.node,s=e.getTypeLength(r.getNodeType(e));let i=null;if(s>1){let n=null;this.getVectorLength()>=s&&(n=e.getTypeFromLength(this.getVectorLength(),this.getComponentType(e)));const a=r.build(e,n);i=this.components.length===s&&this.components===mi.slice(0,this.components.length)?e.format(a,n,t):e.format(`${a}.${this.components}`,this.getNodeType(e),t)}else i=r.build(e,t);return i}serialize(e){super.serialize(e),e.components=this.components}deserialize(e){super.deserialize(e),this.components=e.components}}class yi extends pi{static get type(){return"SetNode"}constructor(e,t,r){super(),this.sourceNode=e,this.components=t,this.targetNode=r}getNodeType(e){return this.sourceNode.getNodeType(e)}generate(e){const{sourceNode:t,components:r,targetNode:s}=this,i=this.getNodeType(e),n=e.getComponentType(s.getNodeType(e)),a=e.getTypeFromLength(r.length,n),o=s.build(e,a),u=t.build(e,i),l=e.getTypeLength(i),d=[];for(let e=0;e(e=>e.replace(/r|s/g,"x").replace(/g|t/g,"y").replace(/b|p/g,"z").replace(/a|q/g,"w"))(e).split("").sort().join("");di.prototype.assign=function(...e){if(!0!==this.isStackNode)return null!==Ni?Ni.assign(this,...e):o("TSL: No stack defined for assign operation. Make sure the assign is inside a Fn().",new Us),this;{const t=Si.get("assign");return this.addToStack(t(...e))}},di.prototype.toVarIntent=function(){return this},di.prototype.get=function(e){return new vi(this,e)};const Ai={};function wi(e,t,r){Ai[e]=Ai[t]=Ai[r]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new fi(this,e),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};const s=e.toUpperCase(),i=t.toUpperCase(),n=r.toUpperCase();di.prototype["set"+s]=di.prototype["set"+i]=di.prototype["set"+n]=function(t){const r=Ei(e);return new yi(this,r,en(t))},di.prototype["flip"+s]=di.prototype["flip"+i]=di.prototype["flip"+n]=function(){const t=Ei(e);return new bi(this,t)}}const Ci=["x","y","z","w"],Mi=["r","g","b","a"],Bi=["s","t","p","q"];for(let e=0;e<4;e++){let t=Ci[e],r=Mi[e],s=Bi[e];wi(t,r,s);for(let i=0;i<4;i++){t=Ci[e]+Ci[i],r=Mi[e]+Mi[i],s=Bi[e]+Bi[i],wi(t,r,s);for(let n=0;n<4;n++){t=Ci[e]+Ci[i]+Ci[n],r=Mi[e]+Mi[i]+Mi[n],s=Bi[e]+Bi[i]+Bi[n],wi(t,r,s);for(let a=0;a<4;a++)t=Ci[e]+Ci[i]+Ci[n]+Ci[a],r=Mi[e]+Mi[i]+Mi[n]+Mi[a],s=Bi[e]+Bi[i]+Bi[n]+Bi[a],wi(t,r,s)}}}for(let e=0;e<32;e++)Ai[e]={get(){this._cache=this._cache||{};let t=this._cache[e];return void 0===t&&(t=new ci(this,new _i(e,"uint")),this._cache[e]=t),t},set(t){this[e].assign(en(t))}};Object.defineProperties(di.prototype,Ai);const Fi=new WeakMap,Li=function(e,t=null){for(const r in e)e[r]=en(e[r],t);return e},Pi=function(e,t=null){const r=e.length;for(let s=0;su?(o(`TSL: "${r}" parameter length exceeds limit.`,new Us),t.slice(0,u)):t}return null===t?n=(...t)=>i(new e(...sn(d(t)))):null!==r?(r=en(r),n=(...s)=>i(new e(t,...sn(d(s)),r))):n=(...r)=>i(new e(t,...sn(d(r)))),n.setParameterLength=(...e)=>(1===e.length?a=u=e[0]:2===e.length&&([a,u]=e),n),n.setName=e=>(l=e,n),n},Ui=function(e,...t){return new e(...sn(t))};class Ii extends di{constructor(e,t){super(),this.shaderNode=e,this.rawInputs=t,this.isShaderCallNodeInternal=!0}getNodeType(e){return this.shaderNode.nodeType||this.getOutputNode(e).getNodeType(e)}getElementType(e){return this.getOutputNode(e).getElementType(e)}getMemberType(e,t){return this.getOutputNode(e).getMemberType(e,t)}call(e){const{shaderNode:t,rawInputs:r}=this,s=e.getNodeProperties(t),i=e.getClosestSubBuild(t.subBuilds)||"",n=i||"default";if(s[n])return s[n];const a=e.subBuildFn,o=e.fnCall;e.subBuildFn=i,e.fnCall=this;let u=null;if(t.layout){let s=Fi.get(e.constructor);void 0===s&&(s=new WeakMap,Fi.set(e.constructor,s));let i=s.get(t);void 0===i&&(i=en(e.buildFunctionNode(t)),s.set(t,i)),e.addInclude(i);const n=r?function(e){let t;rn(e);t=e[0]&&(e[0].isNode||Object.getPrototypeOf(e[0])!==Object.prototype)?[...e]:e[0];return t}(r):null;u=en(i.call(n))}else{const s=new Proxy(e,{get:(e,t,r)=>{let s;return s=Symbol.iterator===t?function*(){yield}:Reflect.get(e,t,r),s}}),i=r?function(e){let t=0;return rn(e),new Proxy(e,{get:(r,s,i)=>{let n;if("length"===s)return n=e.length,n;if(Symbol.iterator===s)n=function*(){for(const t of e)yield en(t)};else{if(e.length>0)if(Object.getPrototypeOf(e[0])===Object.prototype){const r=e[0];n=void 0===r[s]?r[t++]:Reflect.get(r,s,i)}else e[0]instanceof di&&(n=void 0===e[s]?e[t++]:Reflect.get(e,s,i));else n=Reflect.get(r,s,i);n=en(n)}return n}})}(r):null,n=Array.isArray(r)?r.length>0:null!==r,a=t.jsFunc,o=n||a.length>1?a(i,s):a(s);u=en(o)}return e.subBuildFn=a,e.fnCall=o,t.once&&(s[n]=u),u}setupOutput(e){return e.addStack(),e.stack.outputNode=this.call(e),e.removeStack()}getOutputNode(e){const t=e.getNodeProperties(this),r=e.getSubBuildOutput(this);return t[r]=t[r]||this.setupOutput(e),t[r].subBuild=e.getClosestSubBuild(this),t[r]}build(e,t=null){let r=null;const s=e.getBuildStage(),i=e.getNodeProperties(this),n=e.getSubBuildOutput(this),a=this.getOutputNode(e),o=e.fnCall;if(e.fnCall=this,"setup"===s){const t=e.getSubBuildProperty("initialized",this);if(!0!==i[t]&&(i[t]=!0,i[n]=this.getOutputNode(e),i[n].build(e),this.shaderNode.subBuilds))for(const t of e.chaining){const r=e.getDataFromNode(t,"any");r.subBuilds=r.subBuilds||new Set;for(const e of this.shaderNode.subBuilds)r.subBuilds.add(e)}r=i[n]}else"analyze"===s?a.build(e,t):"generate"===s&&(r=a.build(e,t)||"");return e.fnCall=o,r}}class Oi extends di{constructor(e,t){super(t),this.jsFunc=e,this.layout=null,this.global=!0,this.once=!1}setLayout(e){return this.layout=e,this}getLayout(){return this.layout}call(e=null){return new Ii(this,e)}setup(){return this.call()}}const Vi=[!1,!0],ki=[0,1,2,3],Gi=[-1,-2],$i=[.5,1.5,1/3,1e-6,1e6,Math.PI,2*Math.PI,1/Math.PI,2/Math.PI,1/(2*Math.PI),Math.PI/2],zi=new Map;for(const e of Vi)zi.set(e,new _i(e));const Wi=new Map;for(const e of ki)Wi.set(e,new _i(e,"uint"));const Hi=new Map([...Wi].map(e=>new _i(e.value,"int")));for(const e of Gi)Hi.set(e,new _i(e,"int"));const qi=new Map([...Hi].map(e=>new _i(e.value)));for(const e of $i)qi.set(e,new _i(e));for(const e of $i)qi.set(-e,new _i(-e));const ji={bool:zi,uint:Wi,ints:Hi,float:qi},Xi=new Map([...zi,...qi]),Ki=(e,t)=>Xi.has(e)?Xi.get(e):!0===e.isNode?e:new _i(e,t),Qi=function(e,t=null){return(...r)=>{for(const t of r)if(void 0===t)return o(`TSL: Invalid parameter for the type "${e}".`,new Us),new _i(0,e);if((0===r.length||!["bool","float","int","uint"].includes(e)&&r.every(e=>{const t=typeof e;return"object"!==t&&"function"!==t}))&&(r=[Ks(e,...r)]),1===r.length&&null!==t&&t.has(r[0]))return tn(t.get(r[0]));if(1===r.length){const t=Ki(r[0],e);return t.nodeType===e?tn(t):tn(new hi(t,e))}const s=r.map(e=>Ki(e));return tn(new gi(s,e))}},Yi=e=>"object"==typeof e&&null!==e?e.value:e,Zi=e=>null!=e?e.nodeType||e.convertTo||("string"==typeof e?e:null):null;function Ji(e,t){return new Oi(e,t)}const en=(e,t=null)=>function(e,t=null){const r=Xs(e);return"node"===r?e:null===t&&("float"===r||"boolean"===r)||r&&"shader"!==r&&"string"!==r?en(Ki(e,t)):"shader"===r?e.isFn?e:dn(e):e}(e,t),tn=(e,t=null)=>en(e,t).toVarIntent(),rn=(e,t=null)=>new Li(e,t),sn=(e,t=null)=>new Pi(e,t),nn=(e,t=null,r=null,s=null)=>new Di(e,t,r,s),an=(e,...t)=>new Ui(e,...t),on=(e,t=null,r=null,s={})=>new Di(e,t,r,{...s,intent:!0});let un=0;class ln extends di{constructor(e,t=null){super();let r=null;null!==t&&("object"==typeof t?r=t.return:("string"==typeof t?r=t:o("TSL: Invalid layout type.",new Us),t=null)),this.shaderNode=new Ji(e,r),null!==t&&this.setLayout(t),this.isFn=!0}setLayout(e){const t=this.shaderNode.nodeType;if("object"!=typeof e.inputs){const r={name:"fn"+un++,type:t,inputs:[]};for(const t in e)"return"!==t&&r.inputs.push({name:t,type:e[t]});e=r}return this.shaderNode.setLayout(e),this}getNodeType(e){return this.shaderNode.getNodeType(e)||"float"}call(...e){const t=this.shaderNode.call(e);return"void"===this.shaderNode.nodeType&&t.toStack(),t.toVarIntent()}once(e=null){return this.shaderNode.once=!0,this.shaderNode.subBuilds=e,this}generate(e){const t=this.getNodeType(e);return o('TSL: "Fn()" was declared but not invoked. Try calling it like "Fn()( ...params )".',this.stackTrace),e.generateConst(t)}}function dn(e,t=null){const r=new ln(e,t);return new Proxy(()=>{},{apply:(e,t,s)=>r.call(...s),get:(e,t,s)=>Reflect.get(r,t,s),set:(e,t,s,i)=>Reflect.set(r,t,s,i)})}const cn=e=>{Ni=e},hn=()=>Ni,pn=(...e)=>Ni.If(...e);function gn(e){return Ni&&Ni.addToStack(e),e}Ri("toStack",gn);const mn=new Qi("color"),fn=new Qi("float",ji.float),yn=new Qi("int",ji.ints),bn=new Qi("uint",ji.uint),xn=new Qi("bool",ji.bool),Tn=new Qi("vec2"),_n=new Qi("ivec2"),vn=new Qi("uvec2"),Nn=new Qi("bvec2"),Sn=new Qi("vec3"),Rn=new Qi("ivec3"),En=new Qi("uvec3"),An=new Qi("bvec3"),wn=new Qi("vec4"),Cn=new Qi("ivec4"),Mn=new Qi("uvec4"),Bn=new Qi("bvec4"),Fn=new Qi("mat2"),Ln=new Qi("mat3"),Pn=new Qi("mat4");Ri("toColor",mn),Ri("toFloat",fn),Ri("toInt",yn),Ri("toUint",bn),Ri("toBool",xn),Ri("toVec2",Tn),Ri("toIVec2",_n),Ri("toUVec2",vn),Ri("toBVec2",Nn),Ri("toVec3",Sn),Ri("toIVec3",Rn),Ri("toUVec3",En),Ri("toBVec3",An),Ri("toVec4",wn),Ri("toIVec4",Cn),Ri("toUVec4",Mn),Ri("toBVec4",Bn),Ri("toMat2",Fn),Ri("toMat3",Ln),Ri("toMat4",Pn);const Dn=nn(ci).setParameterLength(2),Un=(e,t)=>new hi(en(e),t);Ri("element",Dn),Ri("convert",Un);Ri("append",e=>(d("TSL: .append() has been renamed to .toStack().",new Us),gn(e)));class In extends di{static get type(){return"PropertyNode"}constructor(e,t=null,r=!1){super(e),this.name=t,this.varying=r,this.isPropertyNode=!0,this.global=!0}customCacheKey(){return Os(this.type+":"+(this.name||"")+":"+(this.varying?"1":"0"))}getHash(e){return this.name||super.getHash(e)}generate(e){let t;return!0===this.varying?(t=e.getVaryingFromNode(this,this.name),t.needsInterpolation=!0):t=e.getVarFromNode(this,this.name),e.getPropertyName(t)}}const On=(e,t)=>new In(e,t),Vn=(e,t)=>new In(e,t,!0),kn=an(In,"vec4","DiffuseColor"),Gn=an(In,"vec3","DiffuseContribution"),$n=an(In,"vec3","EmissiveColor"),zn=an(In,"float","Roughness"),Wn=an(In,"float","Metalness"),Hn=an(In,"float","Clearcoat"),qn=an(In,"float","ClearcoatRoughness"),jn=an(In,"vec3","Sheen"),Xn=an(In,"float","SheenRoughness"),Kn=an(In,"float","Iridescence"),Qn=an(In,"float","IridescenceIOR"),Yn=an(In,"float","IridescenceThickness"),Zn=an(In,"float","AlphaT"),Jn=an(In,"float","Anisotropy"),ea=an(In,"vec3","AnisotropyT"),ta=an(In,"vec3","AnisotropyB"),ra=an(In,"color","SpecularColor"),sa=an(In,"color","SpecularColorBlended"),ia=an(In,"float","SpecularF90"),na=an(In,"float","Shininess"),aa=an(In,"vec4","Output"),oa=an(In,"float","dashSize"),ua=an(In,"float","gapSize"),la=an(In,"float","pointWidth"),da=an(In,"float","IOR"),ca=an(In,"float","Transmission"),ha=an(In,"float","Thickness"),pa=an(In,"float","AttenuationDistance"),ga=an(In,"color","AttenuationColor"),ma=an(In,"float","Dispersion");class fa extends di{static get type(){return"UniformGroupNode"}constructor(e,t=!1,r=1){super("string"),this.name=e,this.shared=t,this.order=r,this.isUniformGroup=!0}serialize(e){super.serialize(e),e.name=this.name,e.version=this.version,e.shared=this.shared}deserialize(e){super.deserialize(e),this.name=e.name,this.version=e.version,this.shared=e.shared}}const ya=e=>new fa(e),ba=(e,t=0)=>new fa(e,!0,t),xa=ba("frame"),Ta=ba("render"),_a=ya("object");class va extends xi{static get type(){return"UniformNode"}constructor(e,t=null){super(e,t),this.isUniformNode=!0,this.name="",this.groupNode=_a}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setGroup(e){return this.groupNode=e,this}getGroup(){return this.groupNode}getUniformHash(e){return this.getHash(e)}onUpdate(e,t){return e=e.bind(this),super.onUpdate(t=>{const r=e(t,this);void 0!==r&&(this.value=r)},t)}getInputType(e){let t=super.getInputType(e);return"bool"===t&&(t="uint"),t}generate(e,t){const r=this.getNodeType(e),s=this.getUniformHash(e);let i=e.getNodeFromHash(s);void 0===i&&(e.setHashNode(this,s),i=this);const n=i.getInputType(e),a=e.getUniformFromNode(i,n,e.shaderStage,this.name||e.context.nodeName),o=e.getPropertyName(a);void 0!==e.context.nodeName&&delete e.context.nodeName;let u=o;if("bool"===r){const t=e.getDataFromNode(this);let s=t.propertyName;if(void 0===s){const i=e.getVarFromNode(this,null,"bool");s=e.getPropertyName(i),t.propertyName=s,u=e.format(o,n,r),e.addLineFlowCode(`${s} = ${u}`,this)}u=s}return e.format(u,r,t)}}const Na=(e,t)=>{const r=Zi(t||e);if(r===e&&(e=Ks(r)),e&&!0===e.isNode){let t=e.value;e.traverse(e=>{!0===e.isConstNode&&(t=e.value)}),e=t}return new va(e,r)};class Sa extends pi{static get type(){return"ArrayNode"}constructor(e,t,r=null){super(e),this.count=t,this.values=r,this.isArrayNode=!0}getArrayCount(){return this.count}getNodeType(e){return null===this.nodeType?this.values[0].getNodeType(e):this.nodeType}getElementType(e){return this.getNodeType(e)}getMemberType(e,t){return null===this.nodeType?this.values[0].getMemberType(e,t):super.getMemberType(e,t)}generate(e){const t=this.getNodeType(e);return e.generateArray(t,this.count,this.values)}}const Ra=(...e)=>{let t;if(1===e.length){const r=e[0];t=new Sa(null,r.length,r)}else{const r=e[0],s=e[1];t=new Sa(r,s)}return en(t)};Ri("toArray",(e,t)=>Ra(Array(t).fill(e)));class Ea extends pi{static get type(){return"AssignNode"}constructor(e,t){super(),this.targetNode=e,this.sourceNode=t,this.isAssignNode=!0}hasDependencies(){return!1}getNodeType(e,t){return"void"!==t?this.targetNode.getNodeType(e):"void"}needsSplitAssign(e){const{targetNode:t}=this;if(!1===e.isAvailable("swizzleAssign")&&t.isSplitNode&&t.components.length>1){const r=e.getTypeLength(t.node.getNodeType(e));return oi.join("").slice(0,r)!==t.components}return!1}setup(e){const{targetNode:t,sourceNode:r}=this,s=t.getScope();e.getDataFromNode(s).assign=!0;const i=e.getNodeProperties(this);i.sourceNode=r,i.targetNode=t.context({assign:!0})}generate(e,t){const{targetNode:r,sourceNode:s}=e.getNodeProperties(this),i=this.needsSplitAssign(e),n=r.build(e),a=r.getNodeType(e),o=s.build(e,a),u=s.getNodeType(e),l=e.getDataFromNode(this);let d;if(!0===l.initialized)"void"!==t&&(d=n);else if(i){const s=e.getVarFromNode(this,null,a),i=e.getPropertyName(s);e.addLineFlowCode(`${i} = ${o}`,this);const u=r.node,l=u.node.context({assign:!0}).build(e);for(let t=0;t{const s=r.type;let i;return i="pointer"===s?"&"+t.build(e):t.build(e,s),i};if(Array.isArray(i)){if(i.length>s.length)o("TSL: The number of provided parameters exceeds the expected number of inputs in 'Fn()'."),i.length=s.length;else if(i.length(t=t.length>1||t[0]&&!0===t[0].isNode?sn(t):rn(t[0]),new wa(en(e),t));Ri("call",Ca);const Ma={"==":"equal","!=":"notEqual","<":"lessThan",">":"greaterThan","<=":"lessThanEqual",">=":"greaterThanEqual","%":"mod"};class Ba extends pi{static get type(){return"OperatorNode"}constructor(e,t,r,...s){if(super(),s.length>0){let i=new Ba(e,t,r);for(let t=0;t>"===r||"<<"===r)return e.getIntegerType(n);if("!"===r||"&&"===r||"||"===r||"^^"===r)return"bool";if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r){const t=Math.max(e.getTypeLength(n),e.getTypeLength(a));return t>1?`bvec${t}`:"bool"}if(e.isMatrix(n)){if("float"===a)return n;if(e.isVector(a))return e.getVectorFromMatrix(n);if(e.isMatrix(a))return n}else if(e.isMatrix(a)){if("float"===n)return a;if(e.isVector(n))return e.getVectorFromMatrix(a)}return e.getTypeLength(a)>e.getTypeLength(n)?a:n}generate(e,t){const r=this.op,{aNode:s,bNode:i}=this,n=this.getNodeType(e,t);let a=null,o=null;"void"!==n?(a=s.getNodeType(e),o=i?i.getNodeType(e):null,"<"===r||">"===r||"<="===r||">="===r||"=="===r||"!="===r?e.isVector(a)?o=a:e.isVector(o)?a=o:a!==o&&(a=o="float"):">>"===r||"<<"===r?(a=n,o=e.changeComponentType(o,"uint")):"%"===r?(a=n,o=e.isInteger(a)&&e.isInteger(o)?o:a):e.isMatrix(a)?"float"===o?o="float":e.isVector(o)?o=e.getVectorFromMatrix(a):e.isMatrix(o)||(a=o=n):a=e.isMatrix(o)?"float"===a?"float":e.isVector(a)?e.getVectorFromMatrix(o):o=n:o=n):a=o=n;const u=s.build(e,a),l=i?i.build(e,o):null,d=e.getFunctionOperator(r);if("void"!==t){const s=e.renderer.coordinateSystem===c;if("=="===r||"!="===r||"<"===r||">"===r||"<="===r||">="===r)return s&&e.isVector(a)?e.format(`${this.getOperatorMethod(e,t)}( ${u}, ${l} )`,n,t):e.format(`( ${u} ${r} ${l} )`,n,t);if("%"===r)return e.isInteger(o)?e.format(`( ${u} % ${l} )`,n,t):e.format(`${this.getOperatorMethod(e,n)}( ${u}, ${l} )`,n,t);if("!"===r||"~"===r)return e.format(`(${r}${u})`,a,t);if(d)return e.format(`${d}( ${u}, ${l} )`,n,t);if(e.isMatrix(a)&&"float"===o)return e.format(`( ${l} ${r} ${u} )`,n,t);if("float"===a&&e.isMatrix(o))return e.format(`${u} ${r} ${l}`,n,t);{let i=`( ${u} ${r} ${l} )`;return!s&&"bool"===n&&e.isVector(a)&&e.isVector(o)&&(i=`all${i}`),e.format(i,n,t)}}if("void"!==a)return d?e.format(`${d}( ${u}, ${l} )`,n,t):e.isMatrix(a)&&"float"===o?e.format(`${l} ${r} ${u}`,n,t):e.format(`${u} ${r} ${l}`,n,t)}serialize(e){super.serialize(e),e.op=this.op}deserialize(e){super.deserialize(e),this.op=e.op}}const Fa=on(Ba,"+").setParameterLength(2,1/0).setName("add"),La=on(Ba,"-").setParameterLength(2,1/0).setName("sub"),Pa=on(Ba,"*").setParameterLength(2,1/0).setName("mul"),Da=on(Ba,"/").setParameterLength(2,1/0).setName("div"),Ua=on(Ba,"%").setParameterLength(2).setName("mod"),Ia=on(Ba,"==").setParameterLength(2).setName("equal"),Oa=on(Ba,"!=").setParameterLength(2).setName("notEqual"),Va=on(Ba,"<").setParameterLength(2).setName("lessThan"),ka=on(Ba,">").setParameterLength(2).setName("greaterThan"),Ga=on(Ba,"<=").setParameterLength(2).setName("lessThanEqual"),$a=on(Ba,">=").setParameterLength(2).setName("greaterThanEqual"),za=on(Ba,"&&").setParameterLength(2,1/0).setName("and"),Wa=on(Ba,"||").setParameterLength(2,1/0).setName("or"),Ha=on(Ba,"!").setParameterLength(1).setName("not"),qa=on(Ba,"^^").setParameterLength(2).setName("xor"),ja=on(Ba,"&").setParameterLength(2).setName("bitAnd"),Xa=on(Ba,"~").setParameterLength(1).setName("bitNot"),Ka=on(Ba,"|").setParameterLength(2).setName("bitOr"),Qa=on(Ba,"^").setParameterLength(2).setName("bitXor"),Ya=on(Ba,"<<").setParameterLength(2).setName("shiftLeft"),Za=on(Ba,">>").setParameterLength(2).setName("shiftRight"),Ja=dn(([e])=>(e.addAssign(1),e)),eo=dn(([e])=>(e.subAssign(1),e)),to=dn(([e])=>{const t=yn(e).toConst();return e.addAssign(1),t}),ro=dn(([e])=>{const t=yn(e).toConst();return e.subAssign(1),t});Ri("add",Fa),Ri("sub",La),Ri("mul",Pa),Ri("div",Da),Ri("mod",Ua),Ri("equal",Ia),Ri("notEqual",Oa),Ri("lessThan",Va),Ri("greaterThan",ka),Ri("lessThanEqual",Ga),Ri("greaterThanEqual",$a),Ri("and",za),Ri("or",Wa),Ri("not",Ha),Ri("xor",qa),Ri("bitAnd",ja),Ri("bitNot",Xa),Ri("bitOr",Ka),Ri("bitXor",Qa),Ri("shiftLeft",Ya),Ri("shiftRight",Za),Ri("incrementBefore",Ja),Ri("decrementBefore",eo),Ri("increment",to),Ri("decrement",ro);const so=(e,t)=>(d('TSL: "modInt()" is deprecated. Use "mod( int( ... ) )" instead.',new Us),Ua(yn(e),yn(t)));Ri("modInt",so);class io extends pi{static get type(){return"MathNode"}constructor(e,t,r=null,s=null){if(super(),(e===io.MAX||e===io.MIN)&&arguments.length>3){let i=new io(e,t,r);for(let t=2;tn&&i>a?t:n>a?r:a>i?s:t}getNodeType(e){const t=this.method;return t===io.LENGTH||t===io.DISTANCE||t===io.DOT?"float":t===io.CROSS?"vec3":t===io.ALL||t===io.ANY?"bool":t===io.EQUALS?e.changeComponentType(this.aNode.getNodeType(e),"bool"):this.getInputType(e)}setup(e){const{aNode:t,bNode:r,method:s}=this;let i=null;if(s===io.ONE_MINUS)i=La(1,t);else if(s===io.RECIPROCAL)i=Da(1,t);else if(s===io.DIFFERENCE)i=Fo(La(t,r));else if(s===io.TRANSFORM_DIRECTION){let s=t,n=r;e.isMatrix(s.getNodeType(e))?n=wn(Sn(n),0):s=wn(Sn(s),0);const a=Pa(s,n).xyz;i=So(a)}return null!==i?i:super.setup(e)}generate(e,t){if(e.getNodeProperties(this).outputNode)return super.generate(e,t);let r=this.method;const s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=this.cNode,u=e.renderer.coordinateSystem;if(r===io.NEGATE)return e.format("( - "+n.build(e,i)+" )",s,t);{const l=[];return r===io.CROSS?l.push(n.build(e,s),a.build(e,s)):u===c&&r===io.STEP?l.push(n.build(e,1===e.getTypeLength(n.getNodeType(e))?"float":i),a.build(e,i)):u!==c||r!==io.MIN&&r!==io.MAX?r===io.REFRACT?l.push(n.build(e,i),a.build(e,i),o.build(e,"float")):r===io.MIX?l.push(n.build(e,i),a.build(e,i),o.build(e,1===e.getTypeLength(o.getNodeType(e))?"float":i)):(u===h&&r===io.ATAN&&null!==a&&(r="atan2"),"fragment"===e.shaderStage||r!==io.DFDX&&r!==io.DFDY||(d(`TSL: '${r}' is not supported in the ${e.shaderStage} stage.`,this.stackTrace),r="/*"+r+"*/"),l.push(n.build(e,i)),null!==a&&l.push(a.build(e,i)),null!==o&&l.push(o.build(e,i))):l.push(n.build(e,i),a.build(e,1===e.getTypeLength(a.getNodeType(e))?"float":i)),e.format(`${e.getMethod(r,s)}( ${l.join(", ")} )`,s,t)}}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}io.ALL="all",io.ANY="any",io.RADIANS="radians",io.DEGREES="degrees",io.EXP="exp",io.EXP2="exp2",io.LOG="log",io.LOG2="log2",io.SQRT="sqrt",io.INVERSE_SQRT="inversesqrt",io.FLOOR="floor",io.CEIL="ceil",io.NORMALIZE="normalize",io.FRACT="fract",io.SIN="sin",io.COS="cos",io.TAN="tan",io.ASIN="asin",io.ACOS="acos",io.ATAN="atan",io.ABS="abs",io.SIGN="sign",io.LENGTH="length",io.NEGATE="negate",io.ONE_MINUS="oneMinus",io.DFDX="dFdx",io.DFDY="dFdy",io.ROUND="round",io.RECIPROCAL="reciprocal",io.TRUNC="trunc",io.FWIDTH="fwidth",io.TRANSPOSE="transpose",io.DETERMINANT="determinant",io.INVERSE="inverse",io.EQUALS="equals",io.MIN="min",io.MAX="max",io.STEP="step",io.REFLECT="reflect",io.DISTANCE="distance",io.DIFFERENCE="difference",io.DOT="dot",io.CROSS="cross",io.POW="pow",io.TRANSFORM_DIRECTION="transformDirection",io.MIX="mix",io.CLAMP="clamp",io.REFRACT="refract",io.SMOOTHSTEP="smoothstep",io.FACEFORWARD="faceforward";const no=fn(1e-6),ao=fn(1e6),oo=fn(Math.PI),uo=fn(2*Math.PI),lo=fn(2*Math.PI),co=fn(.5*Math.PI),ho=on(io,io.ALL).setParameterLength(1),po=on(io,io.ANY).setParameterLength(1),go=on(io,io.RADIANS).setParameterLength(1),mo=on(io,io.DEGREES).setParameterLength(1),fo=on(io,io.EXP).setParameterLength(1),yo=on(io,io.EXP2).setParameterLength(1),bo=on(io,io.LOG).setParameterLength(1),xo=on(io,io.LOG2).setParameterLength(1),To=on(io,io.SQRT).setParameterLength(1),_o=on(io,io.INVERSE_SQRT).setParameterLength(1),vo=on(io,io.FLOOR).setParameterLength(1),No=on(io,io.CEIL).setParameterLength(1),So=on(io,io.NORMALIZE).setParameterLength(1),Ro=on(io,io.FRACT).setParameterLength(1),Eo=on(io,io.SIN).setParameterLength(1),Ao=on(io,io.COS).setParameterLength(1),wo=on(io,io.TAN).setParameterLength(1),Co=on(io,io.ASIN).setParameterLength(1),Mo=on(io,io.ACOS).setParameterLength(1),Bo=on(io,io.ATAN).setParameterLength(1,2),Fo=on(io,io.ABS).setParameterLength(1),Lo=on(io,io.SIGN).setParameterLength(1),Po=on(io,io.LENGTH).setParameterLength(1),Do=on(io,io.NEGATE).setParameterLength(1),Uo=on(io,io.ONE_MINUS).setParameterLength(1),Io=on(io,io.DFDX).setParameterLength(1),Oo=on(io,io.DFDY).setParameterLength(1),Vo=on(io,io.ROUND).setParameterLength(1),ko=on(io,io.RECIPROCAL).setParameterLength(1),Go=on(io,io.TRUNC).setParameterLength(1),$o=on(io,io.FWIDTH).setParameterLength(1),zo=on(io,io.TRANSPOSE).setParameterLength(1),Wo=on(io,io.DETERMINANT).setParameterLength(1),Ho=on(io,io.INVERSE).setParameterLength(1),qo=on(io,io.MIN).setParameterLength(2,1/0),jo=on(io,io.MAX).setParameterLength(2,1/0),Xo=on(io,io.STEP).setParameterLength(2),Ko=on(io,io.REFLECT).setParameterLength(2),Qo=on(io,io.DISTANCE).setParameterLength(2),Yo=on(io,io.DIFFERENCE).setParameterLength(2),Zo=on(io,io.DOT).setParameterLength(2),Jo=on(io,io.CROSS).setParameterLength(2),eu=on(io,io.POW).setParameterLength(2),tu=e=>Pa(e,e),ru=e=>Pa(e,e,e),su=e=>Pa(e,e,e,e),iu=on(io,io.TRANSFORM_DIRECTION).setParameterLength(2),nu=e=>Pa(Lo(e),eu(Fo(e),1/3)),au=e=>Zo(e,e),ou=on(io,io.MIX).setParameterLength(3),uu=(e,t=0,r=1)=>new io(io.CLAMP,en(e),en(t),en(r)),lu=e=>uu(e),du=on(io,io.REFRACT).setParameterLength(3),cu=on(io,io.SMOOTHSTEP).setParameterLength(3),hu=on(io,io.FACEFORWARD).setParameterLength(3),pu=dn(([e])=>{const t=Zo(e.xy,Tn(12.9898,78.233)),r=Ua(t,oo);return Ro(Eo(r).mul(43758.5453))}),gu=(e,t,r)=>ou(t,r,e),mu=(e,t,r)=>cu(t,r,e),fu=(e,t)=>Xo(t,e),yu=hu,bu=_o;Ri("all",ho),Ri("any",po),Ri("radians",go),Ri("degrees",mo),Ri("exp",fo),Ri("exp2",yo),Ri("log",bo),Ri("log2",xo),Ri("sqrt",To),Ri("inverseSqrt",_o),Ri("floor",vo),Ri("ceil",No),Ri("normalize",So),Ri("fract",Ro),Ri("sin",Eo),Ri("cos",Ao),Ri("tan",wo),Ri("asin",Co),Ri("acos",Mo),Ri("atan",Bo),Ri("abs",Fo),Ri("sign",Lo),Ri("length",Po),Ri("lengthSq",au),Ri("negate",Do),Ri("oneMinus",Uo),Ri("dFdx",Io),Ri("dFdy",Oo),Ri("round",Vo),Ri("reciprocal",ko),Ri("trunc",Go),Ri("fwidth",$o),Ri("min",qo),Ri("max",jo),Ri("step",fu),Ri("reflect",Ko),Ri("distance",Qo),Ri("dot",Zo),Ri("cross",Jo),Ri("pow",eu),Ri("pow2",tu),Ri("pow3",ru),Ri("pow4",su),Ri("transformDirection",iu),Ri("mix",gu),Ri("clamp",uu),Ri("refract",du),Ri("smoothstep",mu),Ri("faceForward",hu),Ri("difference",Yo),Ri("saturate",lu),Ri("cbrt",nu),Ri("transpose",zo),Ri("determinant",Wo),Ri("inverse",Ho),Ri("rand",pu);class xu extends di{static get type(){return"ConditionalNode"}constructor(e,t,r=null){super(),this.condNode=e,this.ifNode=t,this.elseNode=r}getNodeType(e){const{ifNode:t,elseNode:r}=e.getNodeProperties(this);if(void 0===t)return e.flowBuildStage(this,"setup"),this.getNodeType(e);const s=t.getNodeType(e);if(null!==r){const t=r.getNodeType(e);if(e.getTypeLength(t)>e.getTypeLength(s))return t}return s}setup(e){const t=this.condNode,r=this.ifNode.isolate(),s=this.elseNode?this.elseNode.isolate():null,i=e.context.nodeBlock;e.getDataFromNode(r).parentNodeBlock=i,null!==s&&(e.getDataFromNode(s).parentNodeBlock=i);const n=e.context.uniformFlow,a=e.getNodeProperties(this);a.condNode=t,a.ifNode=n?r:r.context({nodeBlock:r}),a.elseNode=s?n?s:s.context({nodeBlock:s}):null}generate(e,t){const r=this.getNodeType(e),s=e.getDataFromNode(this);if(void 0!==s.nodeProperty)return s.nodeProperty;const{condNode:i,ifNode:n,elseNode:a}=e.getNodeProperties(this),o=e.currentFunctionNode,u="void"!==t,l=u?On(r).build(e):"";s.nodeProperty=l;const c=i.build(e,"bool");if(e.context.uniformFlow&&null!==a){const s=n.build(e,r),i=a.build(e,r),o=e.getTernary(c,s,i);return e.format(o,r,t)}e.addFlowCode(`\n${e.tab}if ( ${c} ) {\n\n`).addFlowTab();let h=n.build(e,r);if(h&&(u?h=l+" = "+h+";":(h="return "+h+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),h="// "+h))),e.removeFlowTab().addFlowCode(e.tab+"\t"+h+"\n\n"+e.tab+"}"),null!==a){e.addFlowCode(" else {\n\n").addFlowTab();let t=a.build(e,r);t&&(u?t=l+" = "+t+";":(t="return "+t+";",null===o&&(d("TSL: Return statement used in an inline 'Fn()'. Define a layout struct to allow return values.",this.stackTrace),t="// "+t))),e.removeFlowTab().addFlowCode(e.tab+"\t"+t+"\n\n"+e.tab+"}\n\n")}else e.addFlowCode("\n\n");return e.format(l,r,t)}}const Tu=nn(xu).setParameterLength(2,3);Ri("select",Tu);class _u extends di{static get type(){return"ContextNode"}constructor(e=null,t={}){super(),this.isContextNode=!0,this.node=e,this.value=t}getScope(){return this.node.getScope()}getNodeType(e){return this.node.getNodeType(e)}getFlowContextData(){const e=[];return this.traverse(t=>{!0===t.isContextNode&&e.push(t.value)}),Object.assign({},...e)}getMemberType(e,t){return this.node.getMemberType(e,t)}analyze(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}setup(e){const t=e.addContext(this.value);this.node.build(e),e.setContext(t)}generate(e,t){const r=e.addContext(this.value),s=this.node.build(e,t);return e.setContext(r),s}}const vu=(e=null,t={})=>{let r=e;return null!==r&&!0===r.isNode||(t=r||t,r=null),new _u(r,t)},Nu=e=>vu(e,{uniformFlow:!0}),Su=(e,t)=>vu(e,{nodeName:t});function Ru(e,t,r=null){return vu(r,{getShadow:({light:r,shadowColorNode:s})=>t===r?s.mul(e):s})}function Eu(e,t=null){return vu(t,{getAO:(t,{material:r})=>!0===r.transparent?t:null!==t?t.mul(e):e})}function Au(e,t){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),Su(e,t)}Ri("context",vu),Ri("label",Au),Ri("uniformFlow",Nu),Ri("setName",Su),Ri("builtinShadowContext",(e,t,r)=>Ru(t,r,e)),Ri("builtinAOContext",(e,t)=>Eu(t,e));class wu extends di{static get type(){return"VarNode"}constructor(e,t=null,r=!1){super(),this.node=e,this.name=t,this.global=!0,this.isVarNode=!0,this.readOnly=r,this.parents=!0,this.intent=!1}setIntent(e){return this.intent=e,this}isIntent(e){return!0!==e.getDataFromNode(this).forceDeclaration&&this.intent}getIntent(){return this.intent}getMemberType(e,t){return this.node.getMemberType(e,t)}getElementType(e){return this.node.getElementType(e)}getNodeType(e){return this.node.getNodeType(e)}getArrayCount(e){return this.node.getArrayCount(e)}isAssign(e){return e.getDataFromNode(this).assign}build(...e){const t=e[0];if(!1===this._hasStack(t)&&"setup"===t.buildStage&&(t.context.nodeLoop||t.context.nodeBlock)){let e=!1;if(this.node.isShaderCallNodeInternal&&null===this.node.shaderNode.getLayout()&&t.fnCall&&t.fnCall.shaderNode){if(t.getDataFromNode(this.node.shaderNode).hasLoop){t.getDataFromNode(this).forceDeclaration=!0,e=!0}}const r=t.getBaseStack();e?r.addToStackBefore(this):r.addToStack(this)}return this.isIntent(t)&&!0!==this.isAssign(t)?this.node.build(...e):super.build(...e)}generate(e){const{node:t,name:r,readOnly:s}=this,{renderer:i}=e,n=!0===i.backend.isWebGPUBackend;let a=!1,u=!1;s&&(a=e.isDeterministic(t),u=n?s:a);const l=this.getNodeType(e);if("void"==l){!0!==this.isIntent(e)&&o('TSL: ".toVar()" can not be used with void type.',this.stackTrace);return t.build(e)}const d=e.getVectorType(l),c=t.build(e,d),h=e.getVarFromNode(this,r,d,void 0,u),p=e.getPropertyName(h);let g=p;if(u)if(n)g=a?`const ${p}`:`let ${p}`;else{const r=t.getArrayCount(e);g=`const ${e.getVar(h.type,p,r)}`}return e.addLineFlowCode(`${g} = ${c}`,this),p}_hasStack(e){return void 0!==e.getDataFromNode(this).stack}}const Cu=nn(wu),Mu=(e,t=null)=>Cu(e,t).toStack(),Bu=(e,t=null)=>Cu(e,t,!0).toStack(),Fu=e=>Cu(e).setIntent(!0).toStack();Ri("toVar",Mu),Ri("toConst",Bu),Ri("toVarIntent",Fu);class Lu extends di{static get type(){return"SubBuild"}constructor(e,t,r=null){super(r),this.node=e,this.name=t,this.isSubBuildNode=!0}getNodeType(e){if(null!==this.nodeType)return this.nodeType;e.addSubBuild(this.name);const t=this.node.getNodeType(e);return e.removeSubBuild(),t}build(e,...t){e.addSubBuild(this.name);const r=this.node.build(e,...t);return e.removeSubBuild(),r}}const Pu=(e,t,r=null)=>new Lu(en(e),t,r);class Du extends di{static get type(){return"VaryingNode"}constructor(e,t=null){super(),this.node=Pu(e,"VERTEX"),this.name=t,this.isVaryingNode=!0,this.interpolationType=null,this.interpolationSampling=null,this.global=!0}setInterpolation(e,t=null){return this.interpolationType=e,this.interpolationSampling=t,this}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}setupVarying(e){const t=e.getNodeProperties(this);let r=t.varying;if(void 0===r){const s=this.name,i=this.getNodeType(e),n=this.interpolationType,a=this.interpolationSampling;t.varying=r=e.getVaryingFromNode(this,s,i,n,a),t.node=Pu(this.node,"VERTEX")}return r.needsInterpolation||(r.needsInterpolation="fragment"===e.shaderStage),r}setup(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}analyze(e){this.setupVarying(e),e.flowNodeFromShaderStage(ei.VERTEX,this.node)}generate(e){const t=e.getSubBuildProperty("property",e.currentStack),r=e.getNodeProperties(this),s=this.setupVarying(e);if(void 0===r[t]){const i=this.getNodeType(e),n=e.getPropertyName(s,ei.VERTEX);e.flowNodeFromShaderStage(ei.VERTEX,r.node,i,n),r[t]=n}return e.getPropertyName(s)}}const Uu=nn(Du).setParameterLength(1,2),Iu=e=>Uu(e);Ri("toVarying",Uu),Ri("toVertexStage",Iu);const Ou=dn(([e])=>{const t=e.mul(.9478672986).add(.0521327014).pow(2.4),r=e.mul(.0773993808),s=e.lessThanEqual(.04045);return ou(t,r,s)}).setLayout({name:"sRGBTransferEOTF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),Vu=dn(([e])=>{const t=e.pow(.41666).mul(1.055).sub(.055),r=e.mul(12.92),s=e.lessThanEqual(.0031308);return ou(t,r,s)}).setLayout({name:"sRGBTransferOETF",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),ku="WorkingColorSpace";class Gu extends pi{static get type(){return"ColorSpaceNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this.source=t,this.target=r}resolveColorSpace(e,t){return t===ku?p.workingColorSpace:"OutputColorSpace"===t?e.context.outputColorSpace||e.renderer.outputColorSpace:t}setup(e){const{colorNode:t}=this,r=this.resolveColorSpace(e,this.source),s=this.resolveColorSpace(e,this.target);let i=t;return!1!==p.enabled&&r!==s&&r&&s?(p.getTransfer(r)===g&&(i=wn(Ou(i.rgb),i.a)),p.getPrimaries(r)!==p.getPrimaries(s)&&(i=wn(Ln(p._getMatrix(new n,r,s)).mul(i.rgb),i.a)),p.getTransfer(s)===g&&(i=wn(Vu(i.rgb),i.a)),i):i}}const $u=(e,t)=>new Gu(en(e),ku,t),zu=(e,t)=>new Gu(en(e),t,ku);Ri("workingToColorSpace",$u),Ri("colorSpaceToWorking",zu);let Wu=class extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}};class Hu extends di{static get type(){return"ReferenceBaseNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.updateType=ti.OBJECT}setGroup(e){return this.group=e,this}element(e){return new Wu(this,en(e))}setNodeType(e){const t=Na(null,e);null!==this.group&&t.setGroup(this.group),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew qu(e,t,r);class Xu extends pi{static get type(){return"ToneMappingNode"}constructor(e,t=Qu,r=null){super("vec3"),this._toneMapping=e,this.exposureNode=t,this.colorNode=r}customCacheKey(){return ks(this._toneMapping)}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup(e){const t=this.colorNode||e.context.color,r=this._toneMapping;if(r===m)return t;let s=null;const i=e.renderer.library.getToneMappingFunction(r);return null!==i?s=wn(i(t.rgb,this.exposureNode),t.a):(o("ToneMappingNode: Unsupported Tone Mapping configuration.",r),s=t),s}}const Ku=(e,t,r)=>new Xu(e,en(t),en(r)),Qu=ju("toneMappingExposure","float");Ri("toneMapping",(e,t,r)=>Ku(t,r,e));const Yu=new WeakMap;function Zu(e,t){let r=Yu.get(e);return void 0===r&&(r=new b(e,t),Yu.set(e,r)),r}class Ju extends xi{static get type(){return"BufferAttributeNode"}constructor(e,t=null,r=0,s=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferStride=r,this.bufferOffset=s,this.usage=f,this.instanced=!1,this.attribute=null,this.global=!0,e&&!0===e.isBufferAttribute&&e.itemSize<=4&&(this.attribute=e,this.usage=e.usage,this.instanced=e.isInstancedBufferAttribute)}getHash(e){if(0===this.bufferStride&&0===this.bufferOffset){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getNodeType(e){return null===this.bufferType&&(this.bufferType=e.getTypeFromAttribute(this.attribute)),this.bufferType}setup(e){if(null!==this.attribute)return;const t=this.getNodeType(e),r=e.getTypeLength(t),s=this.value,i=this.bufferStride||r,n=this.bufferOffset;let a;a=!0===s.isInterleavedBuffer?s:!0===s.isBufferAttribute?Zu(s.array,i):Zu(s,i);const o=new y(a,r,n);a.setUsage(this.usage),this.attribute=o,this.attribute.isInstancedBufferAttribute=this.instanced}generate(e){const t=this.getNodeType(e),r=e.getBufferAttributeFromNode(this,t),s=e.getPropertyName(r);let i=null;if("vertex"===e.shaderStage||"compute"===e.shaderStage)this.name=s,i=s;else{i=Uu(this).build(e,t)}return i}getInputType(){return"bufferAttribute"}setUsage(e){return this.usage=e,this.attribute&&!0===this.attribute.isBufferAttribute&&(this.attribute.usage=e),this}setInstanced(e){return this.instanced=e,this}}function el(e,t=null,r=0,s=0,i=f,n=!1){return"mat3"===t||null===t&&9===e.itemSize?Ln(new Ju(e,"vec3",9,0).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,3).setUsage(i).setInstanced(n),new Ju(e,"vec3",9,6).setUsage(i).setInstanced(n)):"mat4"===t||null===t&&16===e.itemSize?Pn(new Ju(e,"vec4",16,0).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,4).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,8).setUsage(i).setInstanced(n),new Ju(e,"vec4",16,12).setUsage(i).setInstanced(n)):new Ju(e,t,r,s).setUsage(i)}const tl=(e,t=null,r=0,s=0)=>el(e,t,r,s),rl=(e,t=null,r=0,s=0)=>el(e,t,r,s,f,!0),sl=(e,t=null,r=0,s=0)=>el(e,t,r,s,x,!0);Ri("toAttribute",e=>tl(e.value));class il extends di{static get type(){return"ComputeNode"}constructor(e,t){super("void"),this.isComputeNode=!0,this.computeNode=e,this.workgroupSize=t,this.count=null,this.version=1,this.name="",this.updateBeforeType=ti.OBJECT,this.onInitFunction=null}setCount(e){return this.count=e,this}getCount(){return this.count}dispose(){this.dispatchEvent({type:"dispose"})}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}onInit(e){return this.onInitFunction=e,this}updateBefore({renderer:e}){e.compute(this)}setup(e){const t=this.computeNode.build(e);if(t){e.getNodeProperties(this).outputComputeNode=t.outputNode,t.outputNode=null}return t}generate(e,t){const{shaderStage:r}=e;if("compute"===r){const t=this.computeNode.build(e,"void");""!==t&&e.addLineFlowCode(t,this)}else{const r=e.getNodeProperties(this).outputComputeNode;if(r)return r.build(e,t)}}}const nl=(e,t=[64])=>{(0===t.length||t.length>3)&&o("TSL: compute() workgroupSize must have 1, 2, or 3 elements",new Us);for(let e=0;enl(e,r).setCount(t);Ri("compute",al),Ri("computeKernel",nl);class ol extends di{static get type(){return"IsolateNode"}constructor(e,t=!0){super(),this.node=e,this.parent=t,this.isIsolateNode=!0}getNodeType(e){const t=e.getCache(),r=e.getCacheFromNode(this,this.parent);e.setCache(r);const s=this.node.getNodeType(e);return e.setCache(t),s}build(e,...t){const r=e.getCache(),s=e.getCacheFromNode(this,this.parent);e.setCache(s);const i=this.node.build(e,...t);return e.setCache(r),i}setParent(e){return this.parent=e,this}getParent(){return this.parent}}const ul=e=>new ol(en(e));function ll(e,t=!0){return d('TSL: "cache()" has been deprecated. Use "isolate()" instead.'),ul(e).setParent(t)}Ri("cache",ll),Ri("isolate",ul);class dl extends di{static get type(){return"BypassNode"}constructor(e,t){super(),this.isBypassNode=!0,this.outputNode=e,this.callNode=t}getNodeType(e){return this.outputNode.getNodeType(e)}generate(e){const t=this.callNode.build(e,"void");return""!==t&&e.addLineFlowCode(t,this),this.outputNode.build(e)}}const cl=nn(dl).setParameterLength(2);Ri("bypass",cl);class hl extends di{static get type(){return"RemapNode"}constructor(e,t,r,s=fn(0),i=fn(1)){super(),this.node=e,this.inLowNode=t,this.inHighNode=r,this.outLowNode=s,this.outHighNode=i,this.doClamp=!0}setup(){const{node:e,inLowNode:t,inHighNode:r,outLowNode:s,outHighNode:i,doClamp:n}=this;let a=e.sub(t).div(r.sub(t));return!0===n&&(a=a.clamp()),a.mul(i.sub(s)).add(s)}}const pl=nn(hl,null,null,{doClamp:!1}).setParameterLength(3,5),gl=nn(hl).setParameterLength(3,5);Ri("remap",pl),Ri("remapClamp",gl);class ml extends di{static get type(){return"ExpressionNode"}constructor(e="",t="void"){super(t),this.snippet=e}generate(e,t){const r=this.getNodeType(e),s=this.snippet;if("void"!==r)return e.format(s,r,t);e.addLineFlowCode(s,this)}}const fl=nn(ml).setParameterLength(1,2),yl=e=>(e?Tu(e,fl("discard")):fl("discard")).toStack();Ri("discard",yl);class bl extends pi{static get type(){return"RenderOutputNode"}constructor(e,t,r){super("vec4"),this.colorNode=e,this._toneMapping=t,this.outputColorSpace=r,this.isRenderOutputNode=!0}setToneMapping(e){return this._toneMapping=e,this}getToneMapping(){return this._toneMapping}setup({context:e}){let t=this.colorNode||e.color;const r=(null!==this._toneMapping?this._toneMapping:e.toneMapping)||m,s=(null!==this.outputColorSpace?this.outputColorSpace:e.outputColorSpace)||T;return r!==m&&(t=t.toneMapping(r)),s!==T&&s!==p.workingColorSpace&&(t=t.workingToColorSpace(s)),t}}const xl=(e,t=null,r=null)=>new bl(en(e),t,r);Ri("renderOutput",xl);class Tl extends pi{static get type(){return"DebugNode"}constructor(e,t=null){super(),this.node=e,this.callback=t}getNodeType(e){return this.node.getNodeType(e)}setup(e){return this.node.build(e)}analyze(e){return this.node.build(e)}generate(e){const t=this.callback,r=this.node.build(e);if(null!==t)t(e,r);else{const t="--- TSL debug - "+e.shaderStage+" shader ---",s="-".repeat(t.length);let i="";i+="// #"+t+"#\n",i+=e.flow.code.replace(/^\t/gm,"")+"\n",i+="/* ... */ "+r+" /* ... */\n",i+="// #"+s+"#\n",_(i)}return r}}const _l=(e,t=null)=>new Tl(en(e),t).toStack();Ri("debug",_l);class vl{constructor(){this._renderer=null,this.currentFrame=null}get nodeFrame(){return this._renderer._nodes.nodeFrame}setRenderer(e){return this._renderer=e,this}getRenderer(){return this._renderer}init(){}begin(){}finish(){}inspect(){}computeAsync(){}beginCompute(){}finishCompute(){}beginRender(){}finishRender(){}copyTextureToTexture(){}copyFramebufferToTexture(){}}class Nl extends di{static get type(){return"InspectorNode"}constructor(e,t="",r=null){super(),this.node=e,this.name=t,this.callback=r,this.updateType=ti.FRAME,this.isInspectorNode=!0}getName(){return this.name||this.node.name}update(e){e.renderer.inspector.inspect(this)}getNodeType(e){return this.node.getNodeType(e)}setup(e){let t=this.node;return!0===e.context.inspector&&null!==this.callback&&(t=this.callback(t)),!0!==e.renderer.backend.isWebGPUBackend&&e.renderer.inspector.constructor!==vl&&v('TSL: ".toInspector()" is only available with WebGPU.'),t}}function Sl(e,t="",r=null){return(e=en(e)).before(new Nl(e,t,r))}Ri("toInspector",Sl);class Rl extends di{static get type(){return"AttributeNode"}constructor(e,t=null){super(t),this.global=!0,this._attributeName=e}getHash(e){return this.getAttributeName(e)}getNodeType(e){let t=this.nodeType;if(null===t){const r=this.getAttributeName(e);if(e.hasGeometryAttribute(r)){const s=e.geometry.getAttribute(r);t=e.getTypeFromAttribute(s)}else t="float"}return t}setAttributeName(e){return this._attributeName=e,this}getAttributeName(){return this._attributeName}generate(e){const t=this.getAttributeName(e),r=this.getNodeType(e);if(!0===e.hasGeometryAttribute(t)){const s=e.geometry.getAttribute(t),i=e.getTypeFromAttribute(s),n=e.getAttribute(t,i);if("vertex"===e.shaderStage)return e.format(n.name,i,r);return Uu(this).build(e,r)}return d(`AttributeNode: Vertex attribute "${t}" not found on geometry.`),e.generateConst(r)}serialize(e){super.serialize(e),e.global=this.global,e._attributeName=this._attributeName}deserialize(e){super.deserialize(e),this.global=e.global,this._attributeName=e._attributeName}}const El=(e,t=null)=>new Rl(e,t),Al=(e=0)=>El("uv"+(e>0?e:""),"vec2");class wl extends di{static get type(){return"TextureSizeNode"}constructor(e,t=null){super("uvec2"),this.isTextureSizeNode=!0,this.textureNode=e,this.levelNode=t}generate(e,t){const r=this.textureNode.build(e,"property"),s=null===this.levelNode?"0":this.levelNode.build(e,"int");return e.format(`${e.getMethod("textureDimensions")}( ${r}, ${s} )`,this.getNodeType(e),t)}}const Cl=nn(wl).setParameterLength(1,2);class Ml extends va{static get type(){return"MaxMipLevelNode"}constructor(e){super(0),this._textureNode=e,this.updateType=ti.FRAME}get textureNode(){return this._textureNode}get texture(){return this._textureNode.value}update(){const e=this.texture,t=e.images,r=t&&t.length>0?t[0]&&t[0].image||t[0]:e.image;if(r&&void 0!==r.width){const{width:e,height:t}=r;this.value=Math.log2(Math.max(e,t))}}}const Bl=nn(Ml).setParameterLength(1);class Fl extends Error{constructor(e,t=null){super(e),this.name="NodeError",this.stackTrace=t}}const Ll=new N;class Pl extends va{static get type(){return"TextureNode"}constructor(e=Ll,t=null,r=null,s=null){super(e),this.isTextureNode=!0,this.uvNode=t,this.levelNode=r,this.biasNode=s,this.compareNode=null,this.depthNode=null,this.gradNode=null,this.offsetNode=null,this.sampler=!0,this.updateMatrix=!1,this.updateType=ti.NONE,this.referenceNode=null,this._value=e,this._matrixUniform=null,this._flipYUniform=null,this.setUpdateMatrix(null===t)}set value(e){this.referenceNode?this.referenceNode.value=e:this._value=e}get value(){return this.referenceNode?this.referenceNode.value:this._value}getUniformHash(){return this.value.uuid}getNodeType(){return!0===this.value.isDepthTexture?"float":this.value.type===S?"uvec4":this.value.type===R?"ivec4":"vec4"}getInputType(){return"texture"}getDefaultUV(){return Al(this.value.channel)}updateReference(){return this.value}getTransformedUV(e){return null===this._matrixUniform&&(this._matrixUniform=Na(this.value.matrix)),this._matrixUniform.mul(Sn(e,1)).xy}setUpdateMatrix(e){return this.updateMatrix=e,this}setupUV(e,t){return e.isFlipY()&&(null===this._flipYUniform&&(this._flipYUniform=Na(!1)),t=t.toVar(),t=this.sampler?this._flipYUniform.select(t.flipY(),t):this._flipYUniform.select(t.setY(yn(Cl(this,this.levelNode).y).sub(t.y).sub(1)),t)),t}setup(e){const t=e.getNodeProperties(this);t.referenceNode=this.referenceNode;const r=this.value;if(!r||!0!==r.isTexture)throw new Fl("THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().",this.stackTrace);const s=dn(()=>{let t=this.uvNode;return null!==t&&!0!==e.context.forceUVContext||!e.context.getUV||(t=e.context.getUV(this,e)),t||(t=this.getDefaultUV()),!0===this.updateMatrix&&(t=this.getTransformedUV(t)),t=this.setupUV(e,t),this.updateType=null!==this._matrixUniform||null!==this._flipYUniform?ti.OBJECT:ti.NONE,t})();let i=this.levelNode;null===i&&e.context.getTextureLevel&&(i=e.context.getTextureLevel(this));let n=null,a=null;if(null!==this.compareNode)if(e.renderer.hasCompatibility(E.TEXTURE_COMPARE))n=this.compareNode;else{const e=r.compareFunction;null===e||e===A||e===w||e===C||e===M?a=this.compareNode:(n=this.compareNode,v('TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.'))}t.uvNode=s,t.levelNode=i,t.biasNode=this.biasNode,t.compareNode=n,t.compareStepNode=a,t.gradNode=this.gradNode,t.depthNode=this.depthNode,t.offsetNode=this.offsetNode}generateUV(e,t){return t.build(e,!0===this.sampler?"vec2":"ivec2")}generateOffset(e,t){return t.build(e,"ivec2")}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;let d;return d=i?e.generateTextureBias(l,t,r,i,n,u):o?e.generateTextureGrad(l,t,r,o,n,u):a?e.generateTextureCompare(l,t,r,a,n,u):!1===this.sampler?e.generateTextureLoad(l,t,r,s,n,u):s?e.generateTextureLevel(l,t,r,s,n,u):e.generateTexture(l,t,r,n,u),d}generate(e,t){const r=this.value,s=e.getNodeProperties(this),i=super.generate(e,"property");if(/^sampler/.test(t))return i+"_sampler";if(e.isReference(t))return i;{const n=e.getDataFromNode(this),a=this.getNodeType(e);let o=n.propertyName;if(void 0===o){const{uvNode:t,levelNode:u,biasNode:l,compareNode:d,compareStepNode:c,depthNode:h,gradNode:p,offsetNode:g}=s,m=this.generateUV(e,t),f=u?u.build(e,"float"):null,y=l?l.build(e,"float"):null,b=h?h.build(e,"int"):null,x=d?d.build(e,"float"):null,T=c?c.build(e,"float"):null,_=p?[p[0].build(e,"vec2"),p[1].build(e,"vec2")]:null,v=g?this.generateOffset(e,g):null,N=e.getVarFromNode(this);o=e.getPropertyName(N);let S=this.generateSnippet(e,i,m,f,y,b,x,_,v);if(null!==T){const t=r.compareFunction;S=t===C||t===M?Xo(fl(S,a),fl(T,"float")).build(e,a):Xo(fl(T,"float"),fl(S,a)).build(e,a)}e.addLineFlowCode(`${o} = ${S}`,this),n.snippet=S,n.propertyName=o}let u=o;return e.needsToWorkingColorSpace(r)&&(u=zu(fl(u,a),r.colorSpace).setup(e).build(e,a)),e.format(u,a,t)}}setSampler(e){return this.sampler=e,this}getSampler(){return this.sampler}sample(e){const t=this.clone();return t.uvNode=en(e),t.referenceNode=this.getBase(),en(t)}load(e){return this.sample(e).setSampler(!1)}blur(e){const t=this.clone();t.biasNode=en(e).mul(Bl(t)),t.referenceNode=this.getBase();const r=t.value;return!1===t.generateMipmaps&&(r&&!1===r.generateMipmaps||r.minFilter===B||r.magFilter===B)&&(d("TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture."),t.biasNode=null),en(t)}level(e){const t=this.clone();return t.levelNode=en(e),t.referenceNode=this.getBase(),en(t)}size(e){return Cl(this,e)}bias(e){const t=this.clone();return t.biasNode=en(e),t.referenceNode=this.getBase(),en(t)}getBase(){return this.referenceNode?this.referenceNode.getBase():this}compare(e){const t=this.clone();return t.compareNode=en(e),t.referenceNode=this.getBase(),en(t)}grad(e,t){const r=this.clone();return r.gradNode=[en(e),en(t)],r.referenceNode=this.getBase(),en(r)}depth(e){const t=this.clone();return t.depthNode=en(e),t.referenceNode=this.getBase(),en(t)}offset(e){const t=this.clone();return t.offsetNode=en(e),t.referenceNode=this.getBase(),en(t)}serialize(e){super.serialize(e),e.value=this.value.toJSON(e.meta).uuid,e.sampler=this.sampler,e.updateMatrix=this.updateMatrix,e.updateType=this.updateType}deserialize(e){super.deserialize(e),this.value=e.meta.textures[e.value],this.sampler=e.sampler,this.updateMatrix=e.updateMatrix,this.updateType=e.updateType}update(){const e=this.value,t=this._matrixUniform;null!==t&&(t.value=e.matrix),!0===e.matrixAutoUpdate&&e.updateMatrix();const r=this._flipYUniform;null!==r&&(r.value=e.image instanceof ImageBitmap&&!0===e.flipY||!0===e.isRenderTargetTexture||!0===e.isFramebufferTexture||!0===e.isDepthTexture)}clone(){const e=new this.constructor(this.value,this.uvNode,this.levelNode,this.biasNode);return e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}const Dl=nn(Pl).setParameterLength(1,4).setName("texture"),Ul=(e=Ll,t=null,r=null,s=null)=>{let i;return e&&!0===e.isTextureNode?(i=en(e.clone()),i.referenceNode=e.getBase(),null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Dl(e,t,r,s),i},Il=(...e)=>Ul(...e).setSampler(!1);class Ol extends va{static get type(){return"BufferNode"}constructor(e,t,r=0){super(e,t),this.isBufferNode=!0,this.bufferType=t,this.bufferCount=r,this.updateRanges=[]}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}getElementType(e){return this.getNodeType(e)}getInputType(){return"buffer"}}const Vl=(e,t,r)=>new Ol(e,t,r);class kl extends ci{static get type(){return"UniformArrayElementNode"}constructor(e,t){super(e,t),this.isArrayBufferElementNode=!0}generate(e){const t=super.generate(e),r=this.getNodeType(),s=this.node.getPaddedType();return e.format(t,s,r)}}class Gl extends Ol{static get type(){return"UniformArrayNode"}constructor(e,t=null){super(null),this.array=e,this.elementType=null===t?Xs(e[0]):t,this.paddedType=this.getPaddedType(),this.updateType=ti.RENDER,this.isArrayBufferNode=!0}getNodeType(){return this.paddedType}getElementType(){return this.elementType}getPaddedType(){const e=this.elementType;let t="vec4";return"mat2"===e?t="mat2":!0===/mat/.test(e)?t="mat4":"i"===e.charAt(0)?t="ivec4":"u"===e.charAt(0)&&(t="uvec4"),t}update(){const{array:e,value:t}=this,r=this.elementType;if("float"===r||"int"===r||"uint"===r)for(let r=0;rnew Gl(e,t);class zl extends di{constructor(e){super("float"),this.name=e,this.isBuiltinNode=!0}generate(){return this.name}}const Wl=nn(zl).setParameterLength(1);let Hl,ql;class jl extends di{static get type(){return"ScreenNode"}constructor(e){super(),this.scope=e,this._output=null,this.isViewportNode=!0}getNodeType(){return this.scope===jl.DPR?"float":this.scope===jl.VIEWPORT?"vec4":"vec2"}getUpdateType(){let e=ti.NONE;return this.scope!==jl.SIZE&&this.scope!==jl.VIEWPORT&&this.scope!==jl.DPR||(e=ti.RENDER),this.updateType=e,e}update({renderer:e}){const t=e.getRenderTarget();this.scope===jl.VIEWPORT?null!==t?ql.copy(t.viewport):(e.getViewport(ql),ql.multiplyScalar(e.getPixelRatio())):this.scope===jl.DPR?this._output.value=e.getPixelRatio():null!==t?(Hl.width=t.width,Hl.height=t.height):e.getDrawingBufferSize(Hl)}setup(){const e=this.scope;let r=null;return r=e===jl.SIZE?Na(Hl||(Hl=new t)):e===jl.VIEWPORT?Na(ql||(ql=new s)):e===jl.DPR?Na(1):Tn(Yl.div(Ql)),this._output=r,r}generate(e){if(this.scope===jl.COORDINATE){let t=e.getFragCoord();if(e.isFlipY()){const r=e.getNodeProperties(Ql).outputNode.build(e);t=`${e.getType("vec2")}( ${t}.x, ${r}.y - ${t}.y )`}return t}return super.generate(e)}}jl.COORDINATE="coordinate",jl.VIEWPORT="viewport",jl.SIZE="size",jl.UV="uv",jl.DPR="dpr";const Xl=an(jl,jl.DPR),Kl=an(jl,jl.UV),Ql=an(jl,jl.SIZE),Yl=an(jl,jl.COORDINATE),Zl=an(jl,jl.VIEWPORT),Jl=Zl.zw,ed=Yl.sub(Zl.xy),td=ed.div(Jl),rd=dn(()=>(d('TSL: "viewportResolution" is deprecated. Use "screenSize" instead.',new Us),Ql),"vec2").once()();let sd=null,id=null,nd=null,ad=null,od=null,ud=null,ld=null,dd=null,cd=null,hd=null,pd=null,gd=null,md=null,fd=null;const yd=Na(0,"uint").setName("u_cameraIndex").setGroup(ba("cameraIndex")).toVarying("v_cameraIndex"),bd=Na("float").setName("cameraNear").setGroup(Ta).onRenderUpdate(({camera:e})=>e.near),xd=Na("float").setName("cameraFar").setGroup(Ta).onRenderUpdate(({camera:e})=>e.far),Td=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrix);null===id?id=$l(r).setGroup(Ta).setName("cameraProjectionMatrices"):id.array=r,t=id.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrix")}else null===sd&&(sd=Na(e.projectionMatrix).setName("cameraProjectionMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrix)),t=sd;return t}).once()(),_d=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.projectionMatrixInverse);null===ad?ad=$l(r).setGroup(Ta).setName("cameraProjectionMatricesInverse"):ad.array=r,t=ad.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraProjectionMatrixInverse")}else null===nd&&(nd=Na(e.projectionMatrixInverse).setName("cameraProjectionMatrixInverse").setGroup(Ta).onRenderUpdate(({camera:e})=>e.projectionMatrixInverse)),t=nd;return t}).once()(),vd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorldInverse);null===ud?ud=$l(r).setGroup(Ta).setName("cameraViewMatrices"):ud.array=r,t=ud.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraViewMatrix")}else null===od&&(od=Na(e.matrixWorldInverse).setName("cameraViewMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorldInverse)),t=od;return t}).once()(),Nd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.matrixWorld);null===dd?dd=$l(r).setGroup(Ta).setName("cameraWorldMatrices"):dd.array=r,t=dd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraWorldMatrix")}else null===ld&&(ld=Na(e.matrixWorld).setName("cameraWorldMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.matrixWorld)),t=ld;return t}).once()(),Sd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.normalMatrix);null===hd?hd=$l(r).setGroup(Ta).setName("cameraNormalMatrices"):hd.array=r,t=hd.element(e.isMultiViewCamera?Wl("gl_ViewID_OVR"):yd).toConst("cameraNormalMatrix")}else null===cd&&(cd=Na(e.normalMatrix).setName("cameraNormalMatrix").setGroup(Ta).onRenderUpdate(({camera:e})=>e.normalMatrix)),t=cd;return t}).once()(),Rd=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const s=[];for(let t=0,i=e.cameras.length;t{const r=e.cameras,s=t.array;for(let e=0,t=r.length;et.value.setFromMatrixPosition(e.matrixWorld))),t=pd;return t}).once()(),Ed=dn(({camera:e})=>{let t;if(e.isArrayCamera&&e.cameras.length>0){const r=[];for(const t of e.cameras)r.push(t.viewport);null===fd?fd=$l(r,"vec4").setGroup(Ta).setName("cameraViewports"):fd.array=r,t=fd.element(yd).toConst("cameraViewport")}else null===md&&(md=wn(0,0,Ql.x,Ql.y).toConst("cameraViewport")),t=md;return t}).once()(),Ad=new F;class wd extends di{static get type(){return"Object3DNode"}constructor(e,t=null){super(),this.scope=e,this.object3d=t,this.updateType=ti.OBJECT,this.uniformNode=new va(null)}getNodeType(){const e=this.scope;return e===wd.WORLD_MATRIX?"mat4":e===wd.POSITION||e===wd.VIEW_POSITION||e===wd.DIRECTION||e===wd.SCALE?"vec3":e===wd.RADIUS?"float":void 0}update(e){const t=this.object3d,s=this.uniformNode,i=this.scope;if(i===wd.WORLD_MATRIX)s.value=t.matrixWorld;else if(i===wd.POSITION)s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld);else if(i===wd.SCALE)s.value=s.value||new r,s.value.setFromMatrixScale(t.matrixWorld);else if(i===wd.DIRECTION)s.value=s.value||new r,t.getWorldDirection(s.value);else if(i===wd.VIEW_POSITION){const i=e.camera;s.value=s.value||new r,s.value.setFromMatrixPosition(t.matrixWorld),s.value.applyMatrix4(i.matrixWorldInverse)}else if(i===wd.RADIUS){const r=e.object.geometry;null===r.boundingSphere&&r.computeBoundingSphere(),Ad.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),s.value=Ad.radius}}generate(e){const t=this.scope;return t===wd.WORLD_MATRIX?this.uniformNode.nodeType="mat4":t===wd.POSITION||t===wd.VIEW_POSITION||t===wd.DIRECTION||t===wd.SCALE?this.uniformNode.nodeType="vec3":t===wd.RADIUS&&(this.uniformNode.nodeType="float"),this.uniformNode.build(e)}serialize(e){super.serialize(e),e.scope=this.scope}deserialize(e){super.deserialize(e),this.scope=e.scope}}wd.WORLD_MATRIX="worldMatrix",wd.POSITION="position",wd.SCALE="scale",wd.VIEW_POSITION="viewPosition",wd.DIRECTION="direction",wd.RADIUS="radius";const Cd=nn(wd,wd.DIRECTION).setParameterLength(1),Md=nn(wd,wd.WORLD_MATRIX).setParameterLength(1),Bd=nn(wd,wd.POSITION).setParameterLength(1),Fd=nn(wd,wd.SCALE).setParameterLength(1),Ld=nn(wd,wd.VIEW_POSITION).setParameterLength(1),Pd=nn(wd,wd.RADIUS).setParameterLength(1);class Dd extends wd{static get type(){return"ModelNode"}constructor(e){super(e)}update(e){this.object3d=e.object,super.update(e)}}const Ud=an(Dd,Dd.DIRECTION),Id=an(Dd,Dd.WORLD_MATRIX),Od=an(Dd,Dd.POSITION),Vd=an(Dd,Dd.SCALE),kd=an(Dd,Dd.VIEW_POSITION),Gd=an(Dd,Dd.RADIUS),$d=Na(new n).onObjectUpdate(({object:e},t)=>t.value.getNormalMatrix(e.matrixWorld)),zd=Na(new a).onObjectUpdate(({object:e},t)=>t.value.copy(e.matrixWorld).invert()),Wd=dn(e=>e.context.modelViewMatrix||Hd).once()().toVar("modelViewMatrix"),Hd=vd.mul(Id),qd=dn(e=>(e.context.isHighPrecisionModelViewMatrix=!0,Na("mat4").onObjectUpdate(({object:e,camera:t})=>e.modelViewMatrix.multiplyMatrices(t.matrixWorldInverse,e.matrixWorld)))).once()().toVar("highpModelViewMatrix"),jd=dn(e=>{const t=e.context.isHighPrecisionModelViewMatrix;return Na("mat3").onObjectUpdate(({object:e,camera:r})=>(!0!==t&&e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix)))}).once()().toVar("highpModelNormalViewMatrix"),Xd=dn(e=>"fragment"!==e.shaderStage?(v("TSL: `clipSpace` is only available in fragment stage."),wn()):e.context.clipSpace.toVarying("v_clipSpace")).once()(),Kd=El("position","vec3"),Qd=Kd.toVarying("positionLocal"),Yd=Kd.toVarying("positionPrevious"),Zd=dn(e=>Id.mul(Qd).xyz.toVarying(e.getSubBuildProperty("v_positionWorld")),"vec3").once(["POSITION"])(),Jd=dn(()=>Qd.transformDirection(Id).toVarying("v_positionWorldDirection").normalize().toVar("positionWorldDirection"),"vec3").once(["POSITION"])(),ec=dn(e=>{if("fragment"===e.shaderStage&&e.material.vertexNode){const e=_d.mul(Xd);return e.xyz.div(e.w).toVar("positionView")}return e.context.setupPositionView().toVarying("v_positionView")},"vec3").once(["POSITION","VERTEX"])(),tc=dn(e=>{let t;return t=e.camera.isOrthographicCamera?Sn(0,0,1):ec.negate().toVarying("v_positionViewDirection").normalize(),t.toVar("positionViewDirection")},"vec3").once(["POSITION"])();class rc extends di{static get type(){return"FrontFacingNode"}constructor(){super("bool"),this.isFrontFacingNode=!0}generate(e){if("fragment"!==e.shaderStage)return"true";const{material:t}=e;return t.side===L?"false":e.getFrontFacing()}}const sc=an(rc),ic=fn(sc).mul(2).sub(1),nc=dn(([e],{material:t})=>{const r=t.side;return r===L?e=e.mul(-1):r===P&&(e=e.mul(ic)),e}),ac=El("normal","vec3"),oc=dn(e=>!1===e.geometry.hasAttribute("normal")?(d('TSL: Vertex attribute "normal" not found on geometry.'),Sn(0,1,0)):ac,"vec3").once()().toVar("normalLocal"),uc=ec.dFdx().cross(ec.dFdy()).normalize().toVar("normalFlat"),lc=dn(e=>{let t;return t=e.isFlatShading()?uc:mc(oc).toVarying("v_normalViewGeometry").normalize(),t},"vec3").once()().toVar("normalViewGeometry"),dc=dn(e=>{let t=lc.transformDirection(vd);return!0!==e.isFlatShading()&&(t=t.toVarying("v_normalWorldGeometry")),t.normalize().toVar("normalWorldGeometry")},"vec3").once()(),cc=dn(e=>{let t;return"NORMAL"===e.subBuildFn||"VERTEX"===e.subBuildFn?(t=lc,!0!==e.isFlatShading()&&(t=nc(t))):t=e.context.setupNormal().context({getUV:null,getTextureLevel:null}),t},"vec3").once(["NORMAL","VERTEX"])().toVar("normalView"),hc=cc.transformDirection(vd).toVar("normalWorld"),pc=dn(({subBuildFn:e,context:t})=>{let r;return r="NORMAL"===e||"VERTEX"===e?cc:t.setupClearcoatNormal().context({getUV:null,getTextureLevel:null}),r},"vec3").once(["NORMAL","VERTEX"])().toVar("clearcoatNormalView"),gc=dn(([e,t=Id])=>{const r=Ln(t),s=e.div(Sn(r[0].dot(r[0]),r[1].dot(r[1]),r[2].dot(r[2])));return r.mul(s).xyz}),mc=dn(([e],t)=>{const r=t.context.modelNormalViewMatrix;if(r)return r.transformDirection(e);const s=$d.mul(e);return vd.transformDirection(s)}),fc=dn(()=>(d('TSL: "transformedNormalView" is deprecated. Use "normalView" instead.'),cc)).once(["NORMAL","VERTEX"])(),yc=dn(()=>(d('TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.'),hc)).once(["NORMAL","VERTEX"])(),bc=dn(()=>(d('TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.'),pc)).once(["NORMAL","VERTEX"])(),xc=new D,Tc=new a,_c=Na(0).onReference(({material:e})=>e).onObjectUpdate(({material:e})=>e.refractionRatio),vc=Na(1).onReference(({material:e})=>e).onObjectUpdate(function({material:e,scene:t}){return e.envMap?e.envMapIntensity:t.environmentIntensity}),Nc=Na(new a).onReference(function(e){return e.material}).onObjectUpdate(function({material:e,scene:t}){const r=null!==t.environment&&null===e.envMap?t.environmentRotation:e.envMapRotation;return r?(xc.copy(r),Tc.makeRotationFromEuler(xc)):Tc.identity(),Tc}),Sc=tc.negate().reflect(cc),Rc=tc.negate().refract(cc,_c),Ec=Sc.transformDirection(vd).toVar("reflectVector"),Ac=Rc.transformDirection(vd).toVar("reflectVector"),wc=new U;class Cc extends Pl{static get type(){return"CubeTextureNode"}constructor(e,t=null,r=null,s=null){super(e,t,r,s),this.isCubeTextureNode=!0}getInputType(){return!0===this.value.isDepthTexture?"cubeDepthTexture":"cubeTexture"}getDefaultUV(){const e=this.value;return e.mapping===I?Ec:e.mapping===O?Ac:(o('CubeTextureNode: Mapping "%s" not supported.',e.mapping),Sn(0,0,0))}setUpdateMatrix(){}setupUV(e,t){const r=this.value;return!0===r.isDepthTexture?e.renderer.coordinateSystem===h?Sn(t.x,t.y.negate(),t.z):t:(e.renderer.coordinateSystem!==h&&r.isRenderTargetTexture||(t=Sn(t.x.negate(),t.yz)),Nc.mul(t))}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}}const Mc=nn(Cc).setParameterLength(1,4).setName("cubeTexture"),Bc=(e=wc,t=null,r=null,s=null)=>{let i;return e&&!0===e.isCubeTextureNode?(i=en(e.clone()),i.referenceNode=e,null!==t&&(i.uvNode=en(t)),null!==r&&(i.levelNode=en(r)),null!==s&&(i.biasNode=en(s))):i=Mc(e,t,r,s),i};class Fc extends ci{static get type(){return"ReferenceElementNode"}constructor(e,t){super(e,t),this.referenceNode=e,this.isReferenceElementNode=!0}getNodeType(){return this.referenceNode.uniformType}generate(e){const t=super.generate(e),r=this.referenceNode.getNodeType(),s=this.getNodeType();return e.format(t,r,s)}}class Lc extends di{static get type(){return"ReferenceNode"}constructor(e,t,r=null,s=null){super(),this.property=e,this.uniformType=t,this.object=r,this.count=s,this.properties=e.split("."),this.reference=r,this.node=null,this.group=null,this.name=null,this.updateType=ti.OBJECT}element(e){return new Fc(this,en(e))}setGroup(e){return this.group=e,this}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.'),this.setName(e)}setNodeType(e){let t=null;t=null!==this.count?Vl(null,e,this.count):Array.isArray(this.getValueFromReference())?$l(null,e):"texture"===e?Ul(null):"cubeTexture"===e?Bc(null):Na(null,e),null!==this.group&&t.setGroup(this.group),null!==this.name&&t.setName(this.name),this.node=t}getNodeType(e){return null===this.node&&(this.updateReference(e),this.updateValue()),this.node.getNodeType(e)}getValueFromReference(e=this.reference){const{properties:t}=this;let r=e[t[0]];for(let e=1;enew Lc(e,t,r),Dc=(e,t,r,s)=>new Lc(e,t,s,r);class Uc extends Lc{static get type(){return"MaterialReferenceNode"}constructor(e,t,r=null){super(e,t,r),this.material=r,this.isMaterialReferenceNode=!0}updateReference(e){return this.reference=null!==this.material?this.material:e.material,this.reference}}const Ic=(e,t,r=null)=>new Uc(e,t,r),Oc=Al(),Vc=ec.dFdx(),kc=ec.dFdy(),Gc=Oc.dFdx(),$c=Oc.dFdy(),zc=cc,Wc=kc.cross(zc),Hc=zc.cross(Vc),qc=Wc.mul(Gc.x).add(Hc.mul($c.x)),jc=Wc.mul(Gc.y).add(Hc.mul($c.y)),Xc=qc.dot(qc).max(jc.dot(jc)),Kc=Xc.equal(0).select(0,Xc.inverseSqrt()),Qc=qc.mul(Kc).toVar("tangentViewFrame"),Yc=jc.mul(Kc).toVar("bitangentViewFrame"),Zc=El("tangent","vec4"),Jc=Zc.xyz.toVar("tangentLocal"),eh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?Wd.mul(wn(Jc,0)).xyz.toVarying("v_tangentView").normalize():Qc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("tangentView"),th=eh.transformDirection(vd).toVarying("v_tangentWorld").normalize().toVar("tangentWorld"),rh=dn(([e,t],r)=>{let s=e.mul(Zc.w).xyz;return"NORMAL"===r.subBuildFn&&!0!==r.isFlatShading()&&(s=s.toVarying(t)),s}).once(["NORMAL"]),sh=rh(ac.cross(Zc),"v_bitangentGeometry").normalize().toVar("bitangentGeometry"),ih=rh(oc.cross(Jc),"v_bitangentLocal").normalize().toVar("bitangentLocal"),nh=dn(e=>{let t;return t="VERTEX"===e.subBuildFn||e.geometry.hasAttribute("tangent")?rh(cc.cross(eh),"v_bitangentView").normalize():Yc,!0!==e.isFlatShading()&&(t=nc(t)),t},"vec3").once(["NORMAL","VERTEX"])().toVar("bitangentView"),ah=rh(hc.cross(th),"v_bitangentWorld").normalize().toVar("bitangentWorld"),oh=Ln(eh,nh,cc).toVar("TBNViewMatrix"),uh=tc.mul(oh),lh=dn(()=>{let e=ta.cross(tc);return e=e.cross(ta).normalize(),e=ou(e,cc,Jn.mul(zn.oneMinus()).oneMinus().pow2().pow2()).normalize(),e}).once()(),dh=e=>en(e).mul(.5).add(.5),ch=e=>Sn(e,To(lu(fn(1).sub(Zo(e,e)))));class hh extends pi{static get type(){return"NormalMapNode"}constructor(e,t=null){super("vec3"),this.node=e,this.scaleNode=t,this.normalMapType=V,this.unpackNormalMode=k}setup(e){const{normalMapType:t,scaleNode:r,unpackNormalMode:s}=this;let i=this.node.mul(2).sub(1);if(t===V?s===G?i=ch(i.xy):s===$?i=ch(i.yw):s!==k&&console.error(`THREE.NodeMaterial: Unexpected unpack normal mode: ${s}`):s!==k&&console.error(`THREE.NodeMaterial: Normal map type '${t}' is not compatible with unpack normal mode '${s}'`),null!==r){let t=r;!0===e.isFlatShading()&&(t=nc(t)),i=Sn(i.xy.mul(t),i.z)}let n=null;return t===z?n=mc(i):t===V?n=oh.mul(i).normalize():(o(`NodeMaterial: Unsupported normal map type: ${t}`),n=cc),n}}const ph=nn(hh).setParameterLength(1,2),gh=dn(({textureNode:e,bumpScale:t})=>{const r=t=>e.isolate().context({getUV:e=>t(e.uvNode||Al()),forceUVContext:!0}),s=fn(r(e=>e));return Tn(fn(r(e=>e.add(e.dFdx()))).sub(s),fn(r(e=>e.add(e.dFdy()))).sub(s)).mul(t)}),mh=dn(e=>{const{surf_pos:t,surf_norm:r,dHdxy:s}=e,i=t.dFdx().normalize(),n=r,a=t.dFdy().normalize().cross(n),o=n.cross(i),u=i.dot(a).mul(ic),l=u.sign().mul(s.x.mul(a).add(s.y.mul(o)));return u.abs().mul(r).sub(l).normalize()});class fh extends pi{static get type(){return"BumpMapNode"}constructor(e,t=null){super("vec3"),this.textureNode=e,this.scaleNode=t}setup(){const e=null!==this.scaleNode?this.scaleNode:1,t=gh({textureNode:this.textureNode,bumpScale:e});return mh({surf_pos:ec,surf_norm:cc,dHdxy:t})}}const yh=nn(fh).setParameterLength(1,2),bh=new Map;class xh extends di{static get type(){return"MaterialNode"}constructor(e){super(),this.scope=e}getCache(e,t){let r=bh.get(e);return void 0===r&&(r=Ic(e,t),bh.set(e,r)),r}getFloat(e){return this.getCache(e,"float")}getColor(e){return this.getCache(e,"color")}getTexture(e){return this.getCache("map"===e?"map":e+"Map","texture")}setup(e){const t=e.context.material,r=this.scope;let s=null;if(r===xh.COLOR){const e=void 0!==t.color?this.getColor(r):Sn();s=t.map&&!0===t.map.isTexture?e.mul(this.getTexture("map")):e}else if(r===xh.OPACITY){const e=this.getFloat(r);s=t.alphaMap&&!0===t.alphaMap.isTexture?e.mul(this.getTexture("alpha")):e}else if(r===xh.SPECULAR_STRENGTH)s=t.specularMap&&!0===t.specularMap.isTexture?this.getTexture("specular").r:fn(1);else if(r===xh.SPECULAR_INTENSITY){const e=this.getFloat(r);s=t.specularIntensityMap&&!0===t.specularIntensityMap.isTexture?e.mul(this.getTexture(r).a):e}else if(r===xh.SPECULAR_COLOR){const e=this.getColor(r);s=t.specularColorMap&&!0===t.specularColorMap.isTexture?e.mul(this.getTexture(r).rgb):e}else if(r===xh.ROUGHNESS){const e=this.getFloat(r);s=t.roughnessMap&&!0===t.roughnessMap.isTexture?e.mul(this.getTexture(r).g):e}else if(r===xh.METALNESS){const e=this.getFloat(r);s=t.metalnessMap&&!0===t.metalnessMap.isTexture?e.mul(this.getTexture(r).b):e}else if(r===xh.EMISSIVE){const e=this.getFloat("emissiveIntensity"),i=this.getColor(r).mul(e);s=t.emissiveMap&&!0===t.emissiveMap.isTexture?i.mul(this.getTexture(r)):i}else if(r===xh.NORMAL)t.normalMap?(s=ph(this.getTexture("normal"),this.getCache("normalScale","vec2")),s.normalMapType=t.normalMapType,t.normalMap.format!=W&&t.normalMap.format!=H&&t.normalMap.format!=q||(s.unpackNormalMode=G)):s=t.bumpMap?yh(this.getTexture("bump").r,this.getFloat("bumpScale")):cc;else if(r===xh.CLEARCOAT){const e=this.getFloat(r);s=t.clearcoatMap&&!0===t.clearcoatMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_ROUGHNESS){const e=this.getFloat(r);s=t.clearcoatRoughnessMap&&!0===t.clearcoatRoughnessMap.isTexture?e.mul(this.getTexture(r).r):e}else if(r===xh.CLEARCOAT_NORMAL)s=t.clearcoatNormalMap?ph(this.getTexture(r),this.getCache(r+"Scale","vec2")):cc;else if(r===xh.SHEEN){const e=this.getColor("sheenColor").mul(this.getFloat("sheen"));s=t.sheenColorMap&&!0===t.sheenColorMap.isTexture?e.mul(this.getTexture("sheenColor").rgb):e}else if(r===xh.SHEEN_ROUGHNESS){const e=this.getFloat(r);s=t.sheenRoughnessMap&&!0===t.sheenRoughnessMap.isTexture?e.mul(this.getTexture(r).a):e,s=s.clamp(1e-4,1)}else if(r===xh.ANISOTROPY)if(t.anisotropyMap&&!0===t.anisotropyMap.isTexture){const e=this.getTexture(r);s=Fn(sp.x,sp.y,sp.y.negate(),sp.x).mul(e.rg.mul(2).sub(Tn(1)).normalize().mul(e.b))}else s=sp;else if(r===xh.IRIDESCENCE_THICKNESS){const e=Pc("1","float",t.iridescenceThicknessRange);if(t.iridescenceThicknessMap){const i=Pc("0","float",t.iridescenceThicknessRange);s=e.sub(i).mul(this.getTexture(r).g).add(i)}else s=e}else if(r===xh.TRANSMISSION){const e=this.getFloat(r);s=t.transmissionMap?e.mul(this.getTexture(r).r):e}else if(r===xh.THICKNESS){const e=this.getFloat(r);s=t.thicknessMap?e.mul(this.getTexture(r).g):e}else if(r===xh.IOR)s=this.getFloat(r);else if(r===xh.LIGHT_MAP)s=this.getTexture(r).rgb.mul(this.getFloat("lightMapIntensity"));else if(r===xh.AO)s=this.getTexture(r).r.sub(1).mul(this.getFloat("aoMapIntensity")).add(1);else if(r===xh.LINE_DASH_OFFSET)s=t.dashOffset?this.getFloat(r):fn(0);else{const t=this.getNodeType(e);s=this.getCache(r,t)}return s}}xh.ALPHA_TEST="alphaTest",xh.COLOR="color",xh.OPACITY="opacity",xh.SHININESS="shininess",xh.SPECULAR="specular",xh.SPECULAR_STRENGTH="specularStrength",xh.SPECULAR_INTENSITY="specularIntensity",xh.SPECULAR_COLOR="specularColor",xh.REFLECTIVITY="reflectivity",xh.ROUGHNESS="roughness",xh.METALNESS="metalness",xh.NORMAL="normal",xh.CLEARCOAT="clearcoat",xh.CLEARCOAT_ROUGHNESS="clearcoatRoughness",xh.CLEARCOAT_NORMAL="clearcoatNormal",xh.EMISSIVE="emissive",xh.ROTATION="rotation",xh.SHEEN="sheen",xh.SHEEN_ROUGHNESS="sheenRoughness",xh.ANISOTROPY="anisotropy",xh.IRIDESCENCE="iridescence",xh.IRIDESCENCE_IOR="iridescenceIOR",xh.IRIDESCENCE_THICKNESS="iridescenceThickness",xh.IOR="ior",xh.TRANSMISSION="transmission",xh.THICKNESS="thickness",xh.ATTENUATION_DISTANCE="attenuationDistance",xh.ATTENUATION_COLOR="attenuationColor",xh.LINE_SCALE="scale",xh.LINE_DASH_SIZE="dashSize",xh.LINE_GAP_SIZE="gapSize",xh.LINE_WIDTH="linewidth",xh.LINE_DASH_OFFSET="dashOffset",xh.POINT_SIZE="size",xh.DISPERSION="dispersion",xh.LIGHT_MAP="light",xh.AO="ao";const Th=an(xh,xh.ALPHA_TEST),_h=an(xh,xh.COLOR),vh=an(xh,xh.SHININESS),Nh=an(xh,xh.EMISSIVE),Sh=an(xh,xh.OPACITY),Rh=an(xh,xh.SPECULAR),Eh=an(xh,xh.SPECULAR_INTENSITY),Ah=an(xh,xh.SPECULAR_COLOR),wh=an(xh,xh.SPECULAR_STRENGTH),Ch=an(xh,xh.REFLECTIVITY),Mh=an(xh,xh.ROUGHNESS),Bh=an(xh,xh.METALNESS),Fh=an(xh,xh.NORMAL),Lh=an(xh,xh.CLEARCOAT),Ph=an(xh,xh.CLEARCOAT_ROUGHNESS),Dh=an(xh,xh.CLEARCOAT_NORMAL),Uh=an(xh,xh.ROTATION),Ih=an(xh,xh.SHEEN),Oh=an(xh,xh.SHEEN_ROUGHNESS),Vh=an(xh,xh.ANISOTROPY),kh=an(xh,xh.IRIDESCENCE),Gh=an(xh,xh.IRIDESCENCE_IOR),$h=an(xh,xh.IRIDESCENCE_THICKNESS),zh=an(xh,xh.TRANSMISSION),Wh=an(xh,xh.THICKNESS),Hh=an(xh,xh.IOR),qh=an(xh,xh.ATTENUATION_DISTANCE),jh=an(xh,xh.ATTENUATION_COLOR),Xh=an(xh,xh.LINE_SCALE),Kh=an(xh,xh.LINE_DASH_SIZE),Qh=an(xh,xh.LINE_GAP_SIZE),Yh=an(xh,xh.LINE_WIDTH),Zh=an(xh,xh.LINE_DASH_OFFSET),Jh=an(xh,xh.POINT_SIZE),ep=an(xh,xh.DISPERSION),tp=an(xh,xh.LIGHT_MAP),rp=an(xh,xh.AO),sp=Na(new t).onReference(function(e){return e.material}).onRenderUpdate(function({material:e}){this.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation))}),ip=dn(e=>e.context.setupModelViewProjection(),"vec4").once()().toVarying("v_modelViewProjection");class np extends ci{static get type(){return"StorageArrayElementNode"}constructor(e,t){super(e,t),this.isStorageArrayElementNode=!0}set storageBufferNode(e){this.node=e}get storageBufferNode(){return this.node}getMemberType(e,t){const r=this.storageBufferNode.structTypeNode;return r?r.getMemberType(e,t):"void"}setup(e){return!1===e.isAvailable("storageBuffer")&&!0===this.node.isPBO&&e.setupPBO(this.node),super.setup(e)}generate(e,t){let r;const s=e.context.assign;if(r=!1===e.isAvailable("storageBuffer")?!0!==this.node.isPBO||!0===s||!this.node.value.isInstancedBufferAttribute&&"compute"===e.shaderStage?this.node.build(e):e.generatePBO(this):super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}const ap=nn(np).setParameterLength(2);class op extends Ol{static get type(){return"StorageBufferNode"}constructor(e,t=null,r=0){let s,i=null;t&&t.isStruct?(s="struct",i=t.layout,(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)&&(r=e.count)):null===t&&(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute)?(s=zs(e.itemSize),r=e.count):s=t,super(e,s,r),this.isStorageBufferNode=!0,this.structTypeNode=i,this.access=si.READ_WRITE,this.isAtomic=!1,this.isPBO=!1,this._attribute=null,this._varying=null,this.global=!0,!0!==e.isStorageBufferAttribute&&!0!==e.isStorageInstancedBufferAttribute&&(e.isInstancedBufferAttribute?e.isStorageInstancedBufferAttribute=!0:e.isStorageBufferAttribute=!0)}getHash(e){if(0===this.bufferCount){let t=e.globalCache.getData(this.value);return void 0===t&&(t={node:this},e.globalCache.setData(this.value,t)),t.node.uuid}return this.uuid}getInputType(){return this.value.isIndirectStorageBufferAttribute?"indirectStorageBuffer":"storageBuffer"}element(e){return ap(this,e)}setPBO(e){return this.isPBO=e,this}getPBO(){return this.isPBO}setAccess(e){return this.access=e,this}toReadOnly(){return this.setAccess(si.READ_ONLY)}setAtomic(e){return this.isAtomic=e,this}toAtomic(){return this.setAtomic(!0)}getAttributeData(){return null===this._attribute&&(this._attribute=tl(this.value),this._varying=Uu(this._attribute)),{attribute:this._attribute,varying:this._varying}}getNodeType(e){if(null!==this.structTypeNode)return this.structTypeNode.getNodeType(e);if(e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.getNodeType(e);const{attribute:t}=this.getAttributeData();return t.getNodeType(e)}getMemberType(e,t){return null!==this.structTypeNode?this.structTypeNode.getMemberType(e,t):"void"}generate(e){if(null!==this.structTypeNode&&this.structTypeNode.build(e),e.isAvailable("storageBuffer")||e.isAvailable("indirectStorageBuffer"))return super.generate(e);const{attribute:t,varying:r}=this.getAttributeData(),s=r.build(e);return e.registerTransform(s,t),s}}const up=(e,t=null,r=0)=>new op(e,t,r);class lp extends di{static get type(){return"IndexNode"}constructor(e){super("uint"),this.scope=e,this.isIndexNode=!0}generate(e){const t=this.getNodeType(e),r=this.scope;let s,i;if(r===lp.VERTEX)s=e.getVertexIndex();else if(r===lp.INSTANCE)s=e.getInstanceIndex();else if(r===lp.DRAW)s=e.getDrawIndex();else if(r===lp.INVOCATION_LOCAL)s=e.getInvocationLocalIndex();else if(r===lp.INVOCATION_SUBGROUP)s=e.getInvocationSubgroupIndex();else{if(r!==lp.SUBGROUP)throw new Error("THREE.IndexNode: Unknown scope: "+r);s=e.getSubgroupIndex()}if("vertex"===e.shaderStage||"compute"===e.shaderStage)i=s;else{i=Uu(this).build(e,t)}return i}}lp.VERTEX="vertex",lp.INSTANCE="instance",lp.SUBGROUP="subgroup",lp.INVOCATION_LOCAL="invocationLocal",lp.INVOCATION_SUBGROUP="invocationSubgroup",lp.DRAW="draw";const dp=an(lp,lp.VERTEX),cp=an(lp,lp.INSTANCE),hp=an(lp,lp.SUBGROUP),pp=an(lp,lp.INVOCATION_SUBGROUP),gp=an(lp,lp.INVOCATION_LOCAL),mp=an(lp,lp.DRAW);class fp extends di{static get type(){return"InstanceNode"}constructor(e,t,r=null){super("void"),this.count=e,this.instanceMatrix=t,this.instanceColor=r,this.instanceMatrixNode=null,this.instanceColorNode=null,this.updateType=ti.FRAME,this.buffer=null,this.bufferColor=null,this.previousInstanceMatrixNode=null}get isStorageMatrix(){const{instanceMatrix:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}get isStorageColor(){const{instanceColor:e}=this;return e&&!0===e.isStorageInstancedBufferAttribute}setup(e){let{instanceMatrixNode:t,instanceColorNode:r}=this;null===t&&(t=this._createInstanceMatrixNode(!0,e),this.instanceMatrixNode=t);const{instanceColor:s,isStorageColor:i}=this;if(s&&null===r){if(i)r=up(s,"vec3",Math.max(s.count,1)).element(cp);else{const e=new j(s.array,3),t=s.usage===x?sl:rl;this.bufferColor=e,r=Sn(t(e,"vec3",3,0))}this.instanceColorNode=r}const n=t.mul(Qd).xyz;if(Qd.assign(n),e.needsPreviousData()&&Yd.assign(this.getPreviousInstancedPosition(e)),e.hasGeometryAttribute("normal")){const e=gc(oc,t);oc.assign(e)}null!==this.instanceColorNode&&Vn("vec3","vInstanceColor").assign(this.instanceColorNode)}update(e){null!==this.buffer&&!0!==this.isStorageMatrix&&(this.buffer.clearUpdateRanges(),this.buffer.updateRanges.push(...this.instanceMatrix.updateRanges),this.instanceMatrix.version!==this.buffer.version&&(this.buffer.version=this.instanceMatrix.version)),this.instanceColor&&null!==this.bufferColor&&!0!==this.isStorageColor&&(this.bufferColor.clearUpdateRanges(),this.bufferColor.updateRanges.push(...this.instanceColor.updateRanges),this.instanceColor.version!==this.bufferColor.version&&(this.bufferColor.version=this.instanceColor.version)),null!==this.previousInstanceMatrixNode&&e.object.previousInstanceMatrix.array.set(this.instanceMatrix.array)}getPreviousInstancedPosition(e){const t=e.object;return null===this.previousInstanceMatrixNode&&(t.previousInstanceMatrix=this.instanceMatrix.clone(),this.previousInstanceMatrixNode=this._createInstanceMatrixNode(!1,e)),this.previousInstanceMatrixNode.mul(Yd).xyz}_createInstanceMatrixNode(e,t){let r;const{instanceMatrix:s}=this,{count:i}=s;if(this.isStorageMatrix)r=up(s,"mat4",Math.max(i,1)).element(cp);else{if(16*i*4<=t.getUniformBufferLimit())r=Vl(s.array,"mat4",Math.max(i,1)).element(cp);else{const t=new X(s.array,16,1);!0===e&&(this.buffer=t);const i=s.usage===x?sl:rl,n=[i(t,"vec4",16,0),i(t,"vec4",16,4),i(t,"vec4",16,8),i(t,"vec4",16,12)];r=Pn(...n)}}return r}}const yp=nn(fp).setParameterLength(2,3);class bp extends fp{static get type(){return"InstancedMeshNode"}constructor(e){const{count:t,instanceMatrix:r,instanceColor:s}=e;super(t,r,s),this.instancedMesh=e}}const xp=nn(bp).setParameterLength(1);class Tp extends di{static get type(){return"BatchNode"}constructor(e){super("void"),this.batchMesh=e,this.batchingIdNode=null}setup(e){null===this.batchingIdNode&&(null===e.getDrawIndex()?this.batchingIdNode=cp:this.batchingIdNode=mp);const t=dn(([e])=>{const t=yn(Cl(Il(this.batchMesh._indirectTexture),0).x).toConst(),r=yn(e).mod(t).toConst(),s=yn(e).div(t).toConst();return Il(this.batchMesh._indirectTexture,_n(r,s)).x}).setLayout({name:"getIndirectIndex",type:"uint",inputs:[{name:"id",type:"int"}]}),r=t(yn(this.batchingIdNode)),s=this.batchMesh._matricesTexture,i=yn(Cl(Il(s),0).x).toConst(),n=fn(r).mul(4).toInt().toConst(),a=n.mod(i).toConst(),o=n.div(i).toConst(),u=Pn(Il(s,_n(a,o)),Il(s,_n(a.add(1),o)),Il(s,_n(a.add(2),o)),Il(s,_n(a.add(3),o))),l=this.batchMesh._colorsTexture;if(null!==l){const e=dn(([e])=>{const t=yn(Cl(Il(l),0).x).toConst(),r=e,s=r.mod(t).toConst(),i=r.div(t).toConst();return Il(l,_n(s,i)).rgb}).setLayout({name:"getBatchingColor",type:"vec3",inputs:[{name:"id",type:"int"}]}),t=e(r);Vn("vec3","vBatchColor").assign(t)}const d=Ln(u);Qd.assign(u.mul(Qd));const c=oc.div(Sn(d[0].dot(d[0]),d[1].dot(d[1]),d[2].dot(d[2]))),h=d.mul(c).xyz;oc.assign(h),e.hasGeometryAttribute("tangent")&&Jc.mulAssign(d)}}const _p=nn(Tp).setParameterLength(1),vp=new WeakMap;class Np extends di{static get type(){return"SkinningNode"}constructor(e){super("void"),this.skinnedMesh=e,this.updateType=ti.OBJECT,this.skinIndexNode=El("skinIndex","uvec4"),this.skinWeightNode=El("skinWeight","vec4"),this.bindMatrixNode=Pc("bindMatrix","mat4"),this.bindMatrixInverseNode=Pc("bindMatrixInverse","mat4"),this.boneMatricesNode=Dc("skeleton.boneMatrices","mat4",e.skeleton.bones.length),this.positionNode=Qd,this.toPositionNode=Qd,this.previousBoneMatricesNode=null}getSkinnedPosition(e=this.boneMatricesNode,t=this.positionNode){const{skinIndexNode:r,skinWeightNode:s,bindMatrixNode:i,bindMatrixInverseNode:n}=this,a=e.element(r.x),o=e.element(r.y),u=e.element(r.z),l=e.element(r.w),d=i.mul(t),c=Fa(a.mul(s.x).mul(d),o.mul(s.y).mul(d),u.mul(s.z).mul(d),l.mul(s.w).mul(d));return n.mul(c).xyz}getSkinnedNormalAndTangent(e=this.boneMatricesNode,t=oc,r=Jc){const{skinIndexNode:s,skinWeightNode:i,bindMatrixNode:n,bindMatrixInverseNode:a}=this,o=e.element(s.x),u=e.element(s.y),l=e.element(s.z),d=e.element(s.w);let c=Fa(i.x.mul(o),i.y.mul(u),i.z.mul(l),i.w.mul(d));c=a.mul(c).mul(n);return{skinNormal:c.transformDirection(t).xyz,skinTangent:c.transformDirection(r).xyz}}getPreviousSkinnedPosition(e){const t=e.object;return null===this.previousBoneMatricesNode&&(t.skeleton.previousBoneMatrices=new Float32Array(t.skeleton.boneMatrices),this.previousBoneMatricesNode=Dc("skeleton.previousBoneMatrices","mat4",t.skeleton.bones.length)),this.getSkinnedPosition(this.previousBoneMatricesNode,Yd)}setup(e){e.needsPreviousData()&&Yd.assign(this.getPreviousSkinnedPosition(e));const t=this.getSkinnedPosition();if(this.toPositionNode&&this.toPositionNode.assign(t),e.hasGeometryAttribute("normal")){const{skinNormal:t,skinTangent:r}=this.getSkinnedNormalAndTangent();oc.assign(t),e.hasGeometryAttribute("tangent")&&Jc.assign(r)}return t}generate(e,t){if("void"!==t)return super.generate(e,t)}update(e){const t=e.object&&e.object.skeleton?e.object.skeleton:this.skinnedMesh.skeleton;vp.get(t)!==e.frameId&&(vp.set(t,e.frameId),null!==this.previousBoneMatricesNode&&(null===t.previousBoneMatrices&&(t.previousBoneMatrices=new Float32Array(t.boneMatrices)),t.previousBoneMatrices.set(t.boneMatrices)),t.update())}}const Sp=e=>new Np(e);class Rp extends di{static get type(){return"LoopNode"}constructor(e=[]){super("void"),this.params=e}getVarName(e){return String.fromCharCode("i".charCodeAt(0)+e)}getProperties(e){const t=e.getNodeProperties(this);if(void 0!==t.stackNode)return t;const r={};for(let e=0,t=this.params.length-1;eNumber(l)?">=":"<")),a)n=`while ( ${l} )`;else{const r={start:u,end:l},s=r.start,i=r.end;let a;const g=()=>h.includes("<")?"+=":"-=";if(null!=p)switch(typeof p){case"function":a=e.flowStagesNode(t.updateNode,"void").code.replace(/\t|;/g,"");break;case"number":a=d+" "+g()+" "+e.generateConst(c,p);break;case"string":a=d+" "+p;break;default:p.isNode?a=d+" "+g()+" "+p.build(e):(o("TSL: 'Loop( { update: ... } )' is not a function, string or number.",this.stackTrace),a="break /* invalid update */")}else p="int"===c||"uint"===c?h.includes("<")?"++":"--":g()+" 1.",a=d+" "+p;n=`for ( ${e.getVar(c,d)+" = "+s}; ${d+" "+h+" "+i}; ${a} )`}e.addFlowCode((0===s?"\n":"")+e.tab+n+" {\n\n").addFlowTab()}const i=s.build(e,"void");t.returnsNode.build(e,"void"),e.removeFlowTab().addFlowCode("\n"+e.tab+i);for(let t=0,r=this.params.length-1;tnew Rp(sn(e,"int")).toStack(),Ap=()=>fl("break").toStack(),wp=new WeakMap,Cp=new s,Mp=dn(({bufferMap:e,influence:t,stride:r,width:s,depth:i,offset:n})=>{const a=yn(dp).mul(r).add(n),o=a.div(s),u=a.sub(o.mul(s));return Il(e,_n(u,o)).depth(i).xyz.mul(t)});class Bp extends di{static get type(){return"MorphNode"}constructor(e){super("void"),this.mesh=e,this.morphBaseInfluence=Na(1),this.updateType=ti.OBJECT}setup(e){const{geometry:r}=e,s=void 0!==r.morphAttributes.position,i=r.hasAttribute("normal")&&void 0!==r.morphAttributes.normal,n=r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color,a=void 0!==n?n.length:0,{texture:o,stride:u,size:l}=function(e){const r=void 0!==e.morphAttributes.position,s=void 0!==e.morphAttributes.normal,i=void 0!==e.morphAttributes.color,n=e.morphAttributes.position||e.morphAttributes.normal||e.morphAttributes.color,a=void 0!==n?n.length:0;let o=wp.get(e);if(void 0===o||o.count!==a){void 0!==o&&o.texture.dispose();const u=e.morphAttributes.position||[],l=e.morphAttributes.normal||[],d=e.morphAttributes.color||[];let c=0;!0===r&&(c=1),!0===s&&(c=2),!0===i&&(c=3);let h=e.attributes.position.count*c,p=1;const g=4096;h>g&&(p=Math.ceil(h/g),h=g);const m=new Float32Array(h*p*4*a),f=new K(m,h,p,a);f.type=Q,f.needsUpdate=!0;const y=4*c;for(let x=0;x{const t=fn(0).toVar();this.mesh.count>1&&null!==this.mesh.morphTexture&&void 0!==this.mesh.morphTexture?t.assign(Il(this.mesh.morphTexture,_n(yn(e).add(1),yn(cp))).r):t.assign(Pc("morphTargetInfluences","float").element(e).toVar()),pn(t.notEqual(0),()=>{!0===s&&Qd.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(0)})),!0===i&&oc.addAssign(Mp({bufferMap:o,influence:t,stride:u,width:d,depth:e,offset:yn(1)}))})})}update(){const e=this.morphBaseInfluence;this.mesh.geometry.morphTargetsRelative?e.value=1:e.value=1-this.mesh.morphTargetInfluences.reduce((e,t)=>e+t,0)}}const Fp=nn(Bp).setParameterLength(1);class Lp extends di{static get type(){return"LightingNode"}constructor(){super("vec3"),this.isLightingNode=!0}}class Pp extends Lp{static get type(){return"AONode"}constructor(e=null){super(),this.aoNode=e}setup(e){e.context.ambientOcclusion.mulAssign(this.aoNode)}}class Dp extends _u{static get type(){return"LightingContextNode"}constructor(e,t=null,r=null,s=null){super(e),this.lightingModel=t,this.backdropNode=r,this.backdropAlphaNode=s,this._value=null}getContext(){const{backdropNode:e,backdropAlphaNode:t}=this,r={directDiffuse:Sn().toVar("directDiffuse"),directSpecular:Sn().toVar("directSpecular"),indirectDiffuse:Sn().toVar("indirectDiffuse"),indirectSpecular:Sn().toVar("indirectSpecular")};return{radiance:Sn().toVar("radiance"),irradiance:Sn().toVar("irradiance"),iblIrradiance:Sn().toVar("iblIrradiance"),ambientOcclusion:fn(1).toVar("ambientOcclusion"),reflectedLight:r,backdrop:e,backdropAlpha:t}}setup(e){return this.value=this._value||(this._value=this.getContext()),this.value.lightingModel=this.lightingModel||e.context.lightingModel,super.setup(e)}}const Up=nn(Dp);class Ip extends Lp{static get type(){return"IrradianceNode"}constructor(e){super(),this.node=e}setup(e){e.context.irradiance.addAssign(this.node)}}const Op=new t;class Vp extends Pl{static get type(){return"ViewportTextureNode"}constructor(e=Kl,t=null,r=null){let s=null;null===r?(s=new Y,s.minFilter=Z,r=s):s=r,super(r,e,t),this.generateMipmaps=!1,this.defaultFramebuffer=s,this.isOutputTextureNode=!0,this.updateBeforeType=ti.RENDER,this._cacheTextures=new WeakMap}getTextureForReference(e=null){let t,r;if(this.referenceNode?(t=this.referenceNode.defaultFramebuffer,r=this.referenceNode._cacheTextures):(t=this.defaultFramebuffer,r=this._cacheTextures),null===e)return t;if(!1===r.has(e)){const s=t.clone();r.set(e,s)}return r.get(e)}updateReference(e){const t=e.renderer.getRenderTarget();return this.value=this.getTextureForReference(t),this.value}updateBefore(e){const t=e.renderer,r=t.getRenderTarget();null===r?t.getDrawingBufferSize(Op):Op.set(r.width,r.height);const s=this.getTextureForReference(r);s.image.width===Op.width&&s.image.height===Op.height||(s.image.width=Op.width,s.image.height=Op.height,s.needsUpdate=!0);const i=s.generateMipmaps;s.generateMipmaps=this.generateMipmaps,t.copyFramebufferToTexture(s),s.generateMipmaps=i}clone(){const e=new this.constructor(this.uvNode,this.levelNode,this.value);return e.generateMipmaps=this.generateMipmaps,e}}const kp=nn(Vp).setParameterLength(0,3),Gp=nn(Vp,null,null,{generateMipmaps:!0}).setParameterLength(0,3),$p=Gp(),zp=(e=Kl,t=null)=>$p.sample(e,t);let Wp=null;class Hp extends Vp{static get type(){return"ViewportDepthTextureNode"}constructor(e=Kl,t=null){null===Wp&&(Wp=new J),super(e,t,Wp)}getTextureForReference(){return Wp}}const qp=nn(Hp).setParameterLength(0,2);class jp extends di{static get type(){return"ViewportDepthNode"}constructor(e,t=null){super("float"),this.scope=e,this.valueNode=t,this.isViewportDepthNode=!0}generate(e){const{scope:t}=this;return t===jp.DEPTH_BASE?e.getFragDepth():super.generate(e)}setup({camera:e}){const{scope:t}=this,r=this.valueNode;let s=null;if(t===jp.DEPTH_BASE)null!==r&&(s=eg().assign(r));else if(t===jp.DEPTH)s=e.isPerspectiveCamera?Qp(ec.z,bd,xd):Xp(ec.z,bd,xd);else if(t===jp.LINEAR_DEPTH)if(null!==r)if(e.isPerspectiveCamera){const e=Zp(r,bd,xd);s=Xp(e,bd,xd)}else s=r;else s=Xp(ec.z,bd,xd);return s}}jp.DEPTH_BASE="depthBase",jp.DEPTH="depth",jp.LINEAR_DEPTH="linearDepth";const Xp=(e,t,r)=>e.add(t).div(t.sub(r)),Kp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?r.sub(t).mul(e).sub(r):t.sub(r).mul(e).sub(t)),Qp=(e,t,r)=>t.add(e).mul(r).div(r.sub(t).mul(e)),Yp=(e,t,r)=>t.mul(e.add(r)).div(e.mul(t.sub(r))),Zp=dn(([e,t,r],s)=>!0===s.renderer.reversedDepthBuffer?t.mul(r).div(t.sub(r).mul(e).sub(t)):t.mul(r).div(r.sub(t).mul(e).sub(r))),Jp=(e,t,r)=>{t=t.max(1e-6).toVar();const s=xo(e.negate().div(t)),i=xo(r.div(t));return s.div(i)},eg=nn(jp,jp.DEPTH_BASE),tg=an(jp,jp.DEPTH),rg=nn(jp,jp.LINEAR_DEPTH).setParameterLength(0,1),sg=rg(qp());tg.assign=e=>eg(e);class ig extends di{static get type(){return"ClippingNode"}constructor(e=ig.DEFAULT){super(),this.scope=e}setup(e){super.setup(e);const t=e.clippingContext,{intersectionPlanes:r,unionPlanes:s}=t;return this.hardwareClipping=e.material.hardwareClipping,this.scope===ig.ALPHA_TO_COVERAGE?this.setupAlphaToCoverage(r,s):this.scope===ig.HARDWARE?this.setupHardwareClipping(s,e):this.setupDefault(r,s)}setupAlphaToCoverage(e,t){return dn(()=>{const r=fn().toVar("distanceToPlane"),s=fn().toVar("distanceToGradient"),i=fn(1).toVar("clipOpacity"),n=t.length;if(!1===this.hardwareClipping&&n>0){const e=$l(t).setGroup(Ta);Ep(n,({i:t})=>{const n=e.element(t);r.assign(ec.dot(n.xyz).negate().add(n.w)),s.assign(r.fwidth().div(2)),i.mulAssign(cu(s.negate(),s,r))})}const a=e.length;if(a>0){const t=$l(e).setGroup(Ta),n=fn(1).toVar("intersectionClipOpacity");Ep(a,({i:e})=>{const i=t.element(e);r.assign(ec.dot(i.xyz).negate().add(i.w)),s.assign(r.fwidth().div(2)),n.mulAssign(cu(s.negate(),s,r).oneMinus())}),i.mulAssign(n.oneMinus())}kn.a.mulAssign(i),kn.a.equal(0).discard()})()}setupDefault(e,t){return dn(()=>{const r=t.length;if(!1===this.hardwareClipping&&r>0){const e=$l(t).setGroup(Ta);Ep(r,({i:t})=>{const r=e.element(t);ec.dot(r.xyz).greaterThan(r.w).discard()})}const s=e.length;if(s>0){const t=$l(e).setGroup(Ta),r=xn(!0).toVar("clipped");Ep(s,({i:e})=>{const s=t.element(e);r.assign(ec.dot(s.xyz).greaterThan(s.w).and(r))}),r.discard()}})()}setupHardwareClipping(e,t){const r=e.length;return t.enableHardwareClipping(r),dn(()=>{const s=$l(e).setGroup(Ta),i=Wl(t.getClipDistance());Ep(r,({i:e})=>{const t=s.element(e),r=ec.dot(t.xyz).sub(t.w).negate();i.element(e).assign(r)})})()}}ig.ALPHA_TO_COVERAGE="alphaToCoverage",ig.DEFAULT="default",ig.HARDWARE="hardware";const ng=dn(([e])=>Ro(Pa(1e4,Eo(Pa(17,e.x).add(Pa(.1,e.y)))).mul(Fa(.1,Fo(Eo(Pa(13,e.y).add(e.x))))))),ag=dn(([e])=>ng(Tn(ng(e.xy),e.z))),og=dn(([e])=>{const t=jo(Po(Io(e.xyz)),Po(Oo(e.xyz))),r=fn(1).div(fn(.05).mul(t)).toVar("pixScale"),s=Tn(yo(vo(xo(r))),yo(No(xo(r)))),i=Tn(ag(vo(s.x.mul(e.xyz))),ag(vo(s.y.mul(e.xyz)))),n=Ro(xo(r)),a=Fa(Pa(n.oneMinus(),i.x),Pa(n,i.y)),o=qo(n,n.oneMinus()),u=Sn(a.mul(a).div(Pa(2,o).mul(La(1,o))),a.sub(Pa(.5,o)).div(La(1,o)),La(1,La(1,a).mul(La(1,a)).div(Pa(2,o).mul(La(1,o))))),l=a.lessThan(o.oneMinus()).select(a.lessThan(o).select(u.x,u.y),u.z);return uu(l,1e-6,1)}).setLayout({name:"getAlphaHashThreshold",type:"float",inputs:[{name:"position",type:"vec3"}]});class ug extends Rl{static get type(){return"VertexColorNode"}constructor(e){super(null,"vec4"),this.isVertexColorNode=!0,this.index=e}getAttributeName(){const e=this.index;return"color"+(e>0?e:"")}generate(e){const t=this.getAttributeName(e);let r;return r=!0===e.hasGeometryAttribute(t)?super.generate(e):e.generateConst(this.nodeType,new s(1,1,1,1)),r}serialize(e){super.serialize(e),e.index=this.index}deserialize(e){super.deserialize(e),this.index=e.index}}const lg=(e=0)=>new ug(e),dg=dn(([e,t])=>qo(1,e.oneMinus().div(t)).oneMinus()).setLayout({name:"blendBurn",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),cg=dn(([e,t])=>qo(e.div(t.oneMinus()),1)).setLayout({name:"blendDodge",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),hg=dn(([e,t])=>e.oneMinus().mul(t.oneMinus()).oneMinus()).setLayout({name:"blendScreen",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),pg=dn(([e,t])=>ou(e.mul(2).mul(t),e.oneMinus().mul(2).mul(t.oneMinus()).oneMinus(),Xo(.5,e))).setLayout({name:"blendOverlay",type:"vec3",inputs:[{name:"base",type:"vec3"},{name:"blend",type:"vec3"}]}),gg=dn(([e,t])=>{const r=t.a.add(e.a.mul(t.a.oneMinus()));return wn(t.rgb.mul(t.a).add(e.rgb.mul(e.a).mul(t.a.oneMinus())).div(r),r)}).setLayout({name:"blendColor",type:"vec4",inputs:[{name:"base",type:"vec4"},{name:"blend",type:"vec4"}]}),mg=dn(([e])=>wn(e.rgb.mul(e.a),e.a),{color:"vec4",return:"vec4"}),fg=dn(([e])=>(pn(e.a.equal(0),()=>wn(0)),wn(e.rgb.div(e.a),e.a)),{color:"vec4",return:"vec4"});class yg extends ee{static get type(){return"NodeMaterial"}get type(){return this.constructor.type}set type(e){}constructor(){super(),this.isNodeMaterial=!0,this.fog=!0,this.lights=!1,this.hardwareClipping=!1,this.lightsNode=null,this.envNode=null,this.aoNode=null,this.colorNode=null,this.normalNode=null,this.opacityNode=null,this.backdropNode=null,this.backdropAlphaNode=null,this.alphaTestNode=null,this.maskNode=null,this.maskShadowNode=null,this.positionNode=null,this.geometryNode=null,this.depthNode=null,this.receivedShadowPositionNode=null,this.castShadowPositionNode=null,this.receivedShadowNode=null,this.castShadowNode=null,this.outputNode=null,this.mrtNode=null,this.fragmentNode=null,this.vertexNode=null,this.contextNode=null}_getNodeChildren(){const e=[];for(const t of Object.getOwnPropertyNames(this)){if(!0===t.startsWith("_"))continue;const r=this[t];r&&!0===r.isNode&&e.push({property:t,childNode:r})}return e}customProgramCacheKey(){const e=[];for(const{property:t,childNode:r}of this._getNodeChildren())e.push(Os(t.slice(0,-4)),r.getCacheKey());return this.type+Vs(e)}build(e){this.setup(e)}setupObserver(e){return new Ps(e)}setup(e){e.context.setupNormal=()=>Pu(this.setupNormal(e),"NORMAL","vec3"),e.context.setupPositionView=()=>this.setupPositionView(e),e.context.setupModelViewProjection=()=>this.setupModelViewProjection(e);const t=e.renderer,r=t.getRenderTarget();!0===t.contextNode.isContextNode?e.context={...e.context,...t.contextNode.getFlowContextData()}:o('NodeMaterial: "renderer.contextNode" must be an instance of `context()`.'),null!==this.contextNode&&(!0===this.contextNode.isContextNode?e.context={...e.context,...this.contextNode.getFlowContextData()}:o('NodeMaterial: "material.contextNode" must be an instance of `context()`.')),e.addStack();const s=this.setupVertex(e),i=Pu(this.vertexNode||s,"VERTEX");let n;e.context.clipSpace=i,e.stack.outputNode=i,this.setupHardwareClipping(e),null!==this.geometryNode&&(e.stack.outputNode=e.stack.outputNode.bypass(this.geometryNode)),e.addFlow("vertex",e.removeStack()),e.addStack();const a=this.setupClipping(e);if(!0!==this.depthWrite&&!0!==this.depthTest||(null!==r?!0===r.depthBuffer&&this.setupDepth(e):!0===t.depth&&this.setupDepth(e)),null===this.fragmentNode){this.setupDiffuseColor(e),this.setupVariants(e);const s=this.setupLighting(e);null!==a&&e.stack.addToStack(a);const i=wn(s,kn.a).max(0);n=this.setupOutput(e,i),aa.assign(n);const o=null!==this.outputNode;if(o&&(n=this.outputNode),e.context.getOutput&&(n=e.context.getOutput(n,e)),null!==r){const e=t.getMRT(),r=this.mrtNode;null!==e?(o&&aa.assign(n),n=e,null!==r&&(n=e.merge(r))):null!==r&&(n=r)}}else{let t=this.fragmentNode;!0!==t.isOutputStructNode&&(t=wn(t)),n=this.setupOutput(e,t)}e.stack.outputNode=n,e.addFlow("fragment",e.removeStack()),e.observer=this.setupObserver(e)}setupClipping(e){if(null===e.clippingContext)return null;const{unionPlanes:t,intersectionPlanes:r}=e.clippingContext;let s=null;if(t.length>0||r.length>0){const t=e.renderer.currentSamples;this.alphaToCoverage&&t>1?s=new ig(ig.ALPHA_TO_COVERAGE):e.stack.addToStack(new ig)}return s}setupHardwareClipping(e){if(this.hardwareClipping=!1,null===e.clippingContext)return;const t=e.clippingContext.unionPlanes.length;t>0&&t<=8&&e.isAvailable("clipDistance")&&(e.stack.addToStack(new ig(ig.HARDWARE)),this.hardwareClipping=!0)}setupDepth(e){const{renderer:t,camera:r}=e;let s=this.depthNode;if(null===s){const e=t.getMRT();e&&e.has("depth")?s=e.get("depth"):!0===t.logarithmicDepthBuffer&&(s=r.isPerspectiveCamera?Jp(ec.z,bd,xd):Xp(ec.z,bd,xd))}null!==s&&tg.assign(s).toStack()}setupPositionView(){return Wd.mul(Qd).xyz}setupModelViewProjection(){return Td.mul(ec)}setupVertex(e){return e.addStack(),this.setupPosition(e),e.context.position=e.removeStack(),ip}setupPosition(e){const{object:t,geometry:r}=e;if((r.morphAttributes.position||r.morphAttributes.normal||r.morphAttributes.color)&&Fp(t).toStack(),!0===t.isSkinnedMesh&&Sp(t).toStack(),this.displacementMap){const e=Ic("displacementMap","texture"),t=Ic("displacementScale","float"),r=Ic("displacementBias","float");Qd.addAssign(oc.normalize().mul(e.x.mul(t).add(r)))}return t.isBatchedMesh&&_p(t).toStack(),t.isInstancedMesh&&t.instanceMatrix&&!0===t.instanceMatrix.isInstancedBufferAttribute&&xp(t).toStack(),null!==this.positionNode&&Qd.assign(Pu(this.positionNode,"POSITION","vec3")),Qd}setupDiffuseColor(e){const{object:t,geometry:r}=e;null!==this.maskNode&&xn(this.maskNode).not().discard();let s=this.colorNode?wn(this.colorNode):_h;if(!0===this.vertexColors&&r.hasAttribute("color")&&(s=s.mul(lg())),t.instanceColor){s=Vn("vec3","vInstanceColor").mul(s)}if(t.isBatchedMesh&&t._colorsTexture){s=Vn("vec3","vBatchColor").mul(s)}kn.assign(s);const i=this.opacityNode?fn(this.opacityNode):Sh;kn.a.assign(kn.a.mul(i));let n=null;(null!==this.alphaTestNode||this.alphaTest>0)&&(n=null!==this.alphaTestNode?fn(this.alphaTestNode):Th,!0===this.alphaToCoverage?(kn.a=cu(n,n.add($o(kn.a)),kn.a),kn.a.lessThanEqual(0).discard()):kn.a.lessThanEqual(n).discard()),!0===this.alphaHash&&kn.a.lessThan(og(Qd)).discard(),e.isOpaque()&&kn.a.assign(1)}setupVariants(){}setupOutgoingLight(){return!0===this.lights?Sn(0):kn.rgb}setupNormal(){return this.normalNode?Sn(this.normalNode):Fh}setupEnvironment(){let e=null;return this.envNode?e=this.envNode:this.envMap&&(e=this.envMap.isCubeTexture?Ic("envMap","cubeTexture"):Ic("envMap","texture")),e}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Ip(tp)),t}setupLights(e){const t=[],r=this.setupEnvironment(e);r&&r.isLightingNode&&t.push(r);const s=this.setupLightMap(e);s&&s.isLightingNode&&t.push(s);let i=this.aoNode;null===i&&e.material.aoMap&&(i=rp),e.context.getAO&&(i=e.context.getAO(i,e)),i&&t.push(new Pp(i));let n=this.lightsNode||e.lightsNode;return t.length>0&&(n=e.renderer.lighting.createNode([...n.getLights(),...t])),n}setupLightingModel(){}setupLighting(e){const{material:t}=e,{backdropNode:r,backdropAlphaNode:s,emissiveNode:i}=this,n=!0===this.lights||null!==this.lightsNode?this.setupLights(e):null;let a=this.setupOutgoingLight(e);if(n&&n.getScope().hasLights){const t=this.setupLightingModel(e)||null;a=Up(n,t,r,s)}else null!==r&&(a=Sn(null!==s?ou(a,r,s):r));return(i&&!0===i.isNode||t.emissive&&!0===t.emissive.isColor)&&($n.assign(Sn(i||Nh)),a=a.add($n)),a}setupFog(e,t){const r=e.fogNode;return r&&(aa.assign(t),t=wn(r.toVar())),t}setupPremultipliedAlpha(e,t){return mg(t)}setupOutput(e,t){return!0===this.fog&&(t=this.setupFog(e,t)),!0===this.premultipliedAlpha&&(t=this.setupPremultipliedAlpha(e,t)),t}setDefaultValues(e){for(const t in e){const r=e[t];void 0===this[t]&&(this[t]=r,r&&r.clone&&(this[t]=r.clone()))}const t=Object.getOwnPropertyDescriptors(e.constructor.prototype);for(const e in t)void 0===Object.getOwnPropertyDescriptor(this.constructor.prototype,e)&&void 0!==t[e].get&&Object.defineProperty(this.constructor.prototype,e,t[e])}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{},nodes:{}});const r=ee.prototype.toJSON.call(this,e);r.inputNodes={};for(const{property:t,childNode:s}of this._getNodeChildren())r.inputNodes[t]=s.toJSON(e).uuid;function s(e){const t=[];for(const r in e){const s=e[r];delete s.metadata,t.push(s)}return t}if(t){const t=s(e.textures),i=s(e.images),n=s(e.nodes);t.length>0&&(r.textures=t),i.length>0&&(r.images=i),n.length>0&&(r.nodes=n)}return r}copy(e){return this.lightsNode=e.lightsNode,this.envNode=e.envNode,this.aoNode=e.aoNode,this.colorNode=e.colorNode,this.normalNode=e.normalNode,this.opacityNode=e.opacityNode,this.backdropNode=e.backdropNode,this.backdropAlphaNode=e.backdropAlphaNode,this.alphaTestNode=e.alphaTestNode,this.maskNode=e.maskNode,this.maskShadowNode=e.maskShadowNode,this.positionNode=e.positionNode,this.geometryNode=e.geometryNode,this.depthNode=e.depthNode,this.receivedShadowPositionNode=e.receivedShadowPositionNode,this.castShadowPositionNode=e.castShadowPositionNode,this.receivedShadowNode=e.receivedShadowNode,this.castShadowNode=e.castShadowNode,this.outputNode=e.outputNode,this.mrtNode=e.mrtNode,this.fragmentNode=e.fragmentNode,this.vertexNode=e.vertexNode,this.contextNode=e.contextNode,super.copy(e)}}const bg=new te;class xg extends yg{static get type(){return"LineBasicNodeMaterial"}constructor(e){super(),this.isLineBasicNodeMaterial=!0,this.setDefaultValues(bg),this.setValues(e)}}const Tg=new re;class _g extends yg{static get type(){return"LineDashedNodeMaterial"}constructor(e){super(),this.isLineDashedNodeMaterial=!0,this.setDefaultValues(Tg),this.dashOffset=0,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.setValues(e)}setupVariants(){const e=this.offsetNode?fn(this.offsetNode):Zh,t=this.dashScaleNode?fn(this.dashScaleNode):Xh,r=this.dashSizeNode?fn(this.dashSizeNode):Kh,s=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(r),ua.assign(s);const i=Uu(El("lineDistance").mul(t));(e?i.add(e):i).mod(oa.add(ua)).greaterThan(oa).discard()}}const vg=new re;class Ng extends yg{static get type(){return"Line2NodeMaterial"}constructor(e={}){super(),this.isLine2NodeMaterial=!0,this.setDefaultValues(vg),this.vertexColors=e.vertexColors,this.dashOffset=0,this.lineColorNode=null,this.offsetNode=null,this.dashScaleNode=null,this.dashSizeNode=null,this.gapSizeNode=null,this.blending=se,this._useDash=e.dashed,this._useAlphaToCoverage=!0,this._useWorldUnits=!1,this.setValues(e)}setup(e){const{renderer:t}=e,r=this._useAlphaToCoverage,s=this.vertexColors,i=this._useDash,n=this._useWorldUnits,a=dn(({start:e,end:t})=>{const r=Td.element(2).element(2),s=Td.element(3).element(2).mul(-.5).div(r).sub(e.z).div(t.z.sub(e.z));return wn(ou(e.xyz,t.xyz,s),t.w)}).setLayout({name:"trimSegment",type:"vec4",inputs:[{name:"start",type:"vec4"},{name:"end",type:"vec4"}]});this.vertexNode=dn(()=>{const e=El("instanceStart"),t=El("instanceEnd"),r=wn(Wd.mul(wn(e,1))).toVar("start"),s=wn(Wd.mul(wn(t,1))).toVar("end");if(i){const e=this.dashScaleNode?fn(this.dashScaleNode):Xh,t=this.offsetNode?fn(this.offsetNode):Zh,r=El("instanceDistanceStart"),s=El("instanceDistanceEnd");let i=Kd.y.lessThan(.5).select(e.mul(r),e.mul(s));i=i.add(t),Vn("float","lineDistance").assign(i)}n&&(Vn("vec3","worldStart").assign(r.xyz),Vn("vec3","worldEnd").assign(s.xyz));const o=Zl.z.div(Zl.w),u=Td.element(2).element(3).equal(-1);pn(u,()=>{pn(r.z.lessThan(0).and(s.z.greaterThan(0)),()=>{s.assign(a({start:r,end:s}))}).ElseIf(s.z.lessThan(0).and(r.z.greaterThanEqual(0)),()=>{r.assign(a({start:s,end:r}))})});const l=Td.mul(r),d=Td.mul(s),c=l.xyz.div(l.w),h=d.xyz.div(d.w),p=h.xy.sub(c.xy).toVar();p.x.assign(p.x.mul(o)),p.assign(p.normalize());const g=wn().toVar();if(n){const e=s.xyz.sub(r.xyz).normalize(),t=ou(r.xyz,s.xyz,.5).normalize(),n=e.cross(t).normalize(),a=e.cross(n),o=Vn("vec4","worldPos");o.assign(Kd.y.lessThan(.5).select(r,s));const u=Yh.mul(.5);o.addAssign(wn(Kd.x.lessThan(0).select(n.mul(u),n.mul(u).negate()),0)),i||(o.addAssign(wn(Kd.y.lessThan(.5).select(e.mul(u).negate(),e.mul(u)),0)),o.addAssign(wn(a.mul(u),0)),pn(Kd.y.greaterThan(1).or(Kd.y.lessThan(0)),()=>{o.subAssign(wn(a.mul(2).mul(u),0))})),g.assign(Td.mul(o));const l=Sn().toVar();l.assign(Kd.y.lessThan(.5).select(c,h)),g.z.assign(l.z.mul(g.w))}else{const e=Tn(p.y,p.x.negate()).toVar("offset");p.x.assign(p.x.div(o)),e.x.assign(e.x.div(o)),e.assign(Kd.x.lessThan(0).select(e.negate(),e)),pn(Kd.y.lessThan(0),()=>{e.assign(e.sub(p))}).ElseIf(Kd.y.greaterThan(1),()=>{e.assign(e.add(p))}),e.assign(e.mul(Yh)),e.assign(e.div(Zl.w.div(Xl))),g.assign(Kd.y.lessThan(.5).select(l,d)),e.assign(e.mul(g.w)),g.assign(g.add(wn(e,0,0)))}return g})();const o=dn(({p1:e,p2:t,p3:r,p4:s})=>{const i=e.sub(r),n=s.sub(r),a=t.sub(e),o=i.dot(n),u=n.dot(a),l=i.dot(a),d=n.dot(n),c=a.dot(a).mul(d).sub(u.mul(u)),h=o.mul(u).sub(l.mul(d)).div(c).clamp(),p=o.add(u.mul(h)).div(d).clamp();return Tn(h,p)});if(this.colorNode=dn(()=>{const e=Al();if(i){const t=this.dashSizeNode?fn(this.dashSizeNode):Kh,r=this.gapSizeNode?fn(this.gapSizeNode):Qh;oa.assign(t),ua.assign(r);const s=Vn("float","lineDistance");e.y.lessThan(-1).or(e.y.greaterThan(1)).discard(),s.mod(oa.add(ua)).greaterThan(oa).discard()}const a=fn(1).toVar("alpha");if(n){const e=Vn("vec3","worldStart"),s=Vn("vec3","worldEnd"),n=Vn("vec4","worldPos").xyz.normalize().mul(1e5),u=s.sub(e),l=o({p1:e,p2:s,p3:Sn(0,0,0),p4:n}),d=e.add(u.mul(l.x)),c=n.mul(l.y),h=d.sub(c).length().div(Yh);if(!i)if(r&&t.currentSamples>0){const e=h.fwidth();a.assign(cu(e.negate().add(.5),e.add(.5),h).oneMinus())}else h.greaterThan(.5).discard()}else if(r&&t.currentSamples>0){const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1)),s=t.mul(t).add(r.mul(r)),i=fn(s.fwidth()).toVar("dlen");pn(e.y.abs().greaterThan(1),()=>{a.assign(cu(i.oneMinus(),i.add(1),s).oneMinus())})}else pn(e.y.abs().greaterThan(1),()=>{const t=e.x,r=e.y.greaterThan(0).select(e.y.sub(1),e.y.add(1));t.mul(t).add(r.mul(r)).greaterThan(1).discard()});let u;if(this.lineColorNode)u=this.lineColorNode;else if(s){const e=El("instanceColorStart"),t=El("instanceColorEnd");u=Kd.y.lessThan(.5).select(e,t).mul(_h)}else u=_h;return wn(u,a)})(),this.transparent){const e=this.opacityNode?fn(this.opacityNode):Sh;this.outputNode=wn(this.colorNode.rgb.mul(e).add(zp().rgb.mul(e.oneMinus())),this.colorNode.a)}super.setup(e)}get worldUnits(){return this._useWorldUnits}set worldUnits(e){this._useWorldUnits!==e&&(this._useWorldUnits=e,this.needsUpdate=!0)}get dashed(){return this._useDash}set dashed(e){this._useDash!==e&&(this._useDash=e,this.needsUpdate=!0)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const Sg=new ie;class Rg extends yg{static get type(){return"MeshNormalNodeMaterial"}constructor(e){super(),this.isMeshNormalNodeMaterial=!0,this.setDefaultValues(Sg),this.setValues(e)}setupDiffuseColor(){const e=this.opacityNode?fn(this.opacityNode):Sh;kn.assign(zu(wn(dh(cc),e),ne))}}const Eg=dn(([e=Jd])=>{const t=e.z.atan(e.x).mul(1/(2*Math.PI)).add(.5),r=e.y.clamp(-1,1).asin().mul(1/Math.PI).add(.5);return Tn(t,r)});class Ag extends ae{constructor(e=1,t={}){super(e,e,t),this.isCubeRenderTarget=!0;const r={width:e,height:e,depth:1},s=[r,r,r,r,r,r];this.texture=new U(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){const r=t.minFilter,s=t.generateMipmaps;t.generateMipmaps=!0,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=new oe(5,5,5),n=Eg(Jd),a=new yg;a.colorNode=Ul(t,n,0),a.side=L,a.blending=se;const o=new ue(i,a),u=new le;u.add(o),t.minFilter===Z&&(t.minFilter=de);const l=new ce(1,10,this),d=e.getMRT();return e.setMRT(null),l.update(e,u),e.setMRT(d),t.minFilter=r,t.generateMipmaps=s,o.geometry.dispose(),o.material.dispose(),this}clear(e,t=!0,r=!0,s=!0){const i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,r,s);e.setRenderTarget(i)}}const wg=new WeakMap;class Cg extends pi{static get type(){return"CubeMapNode"}constructor(e){super("vec3"),this.envNode=e,this._cubeTexture=null,this._cubeTextureNode=Bc(null);const t=new U;t.isRenderTargetTexture=!0,this._defaultTexture=t,this.updateBeforeType=ti.RENDER}updateBefore(e){const{renderer:t,material:r}=e,s=this.envNode;if(s.isTextureNode||s.isMaterialReferenceNode){const e=s.isTextureNode?s.value:r[s.property];if(e&&e.isTexture){const r=e.mapping;if(r===he||r===pe){if(wg.has(e)){const t=wg.get(e);Bg(t,e.mapping),this._cubeTexture=t}else{const r=e.image;if(function(e){return null!=e&&e.height>0}(r)){const s=new Ag(r.height);s.fromEquirectangularTexture(t,e),Bg(s.texture,e.mapping),this._cubeTexture=s.texture,wg.set(e,s.texture),e.addEventListener("dispose",Mg)}else this._cubeTexture=this._defaultTexture}this._cubeTextureNode.value=this._cubeTexture}else this._cubeTextureNode=this.envNode}}}setup(e){return this.updateBefore(e),this._cubeTextureNode}}function Mg(e){const t=e.target;t.removeEventListener("dispose",Mg);const r=wg.get(t);void 0!==r&&(wg.delete(t),r.dispose())}function Bg(e,t){t===he?e.mapping=I:t===pe&&(e.mapping=O)}const Fg=nn(Cg).setParameterLength(1);class Lg extends Lp{static get type(){return"BasicEnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){e.context.environment=Fg(this.envNode)}}class Pg extends Lp{static get type(){return"BasicLightMapNode"}constructor(e=null){super(),this.lightMapNode=e}setup(e){const t=fn(1/Math.PI);e.context.irradianceLightMap=this.lightMapNode.mul(t)}}class Dg{start(e){e.lightsNode.setupLights(e,e.lightsNode.getLightNodes(e)),this.indirect(e)}finish(){}direct(){}directRectArea(){}indirect(){}ambientOcclusion(){}}class Ug extends Dg{constructor(){super()}indirect({context:e}){const t=e.ambientOcclusion,r=e.reflectedLight,s=e.irradianceLightMap;r.indirectDiffuse.assign(wn(0)),s?r.indirectDiffuse.addAssign(s):r.indirectDiffuse.addAssign(wn(1,1,1,0)),r.indirectDiffuse.mulAssign(t),r.indirectDiffuse.mulAssign(kn.rgb)}finish(e){const{material:t,context:r}=e,s=r.outgoingLight,i=e.context.environment;if(i)switch(t.combine){case fe:s.rgb.assign(ou(s.rgb,s.rgb.mul(i.rgb),wh.mul(Ch)));break;case me:s.rgb.assign(ou(s.rgb,i.rgb,wh.mul(Ch)));break;case ge:s.rgb.addAssign(i.rgb.mul(wh.mul(Ch)));break;default:d("BasicLightingModel: Unsupported .combine value:",t.combine)}}}const Ig=new ye;class Og extends yg{static get type(){return"MeshBasicNodeMaterial"}constructor(e){super(),this.isMeshBasicNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Ig),this.setValues(e)}setupNormal(){return nc(lc)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightMap(e){let t=null;return e.material.lightMap&&(t=new Pg(tp)),t}setupOutgoingLight(){return kn.rgb}setupLightingModel(){return new Ug}}const Vg=dn(({f0:e,f90:t,dotVH:r})=>{const s=r.mul(-5.55473).sub(6.98316).mul(r).exp2();return e.mul(s.oneMinus()).add(t.mul(s))}),kg=dn(e=>e.diffuseColor.mul(1/Math.PI)),Gg=dn(({dotNH:e})=>na.mul(fn(.5)).add(1).mul(fn(1/Math.PI)).mul(e.pow(na))),$g=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(t).clamp(),s=tc.dot(t).clamp(),i=Vg({f0:ra,f90:1,dotVH:s}),n=fn(.25),a=Gg({dotNH:r});return i.mul(n).mul(a)});class zg extends Ug{constructor(e=!0){super(),this.specular=e}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t);r.directDiffuse.addAssign(s.mul(kg({diffuseColor:kn.rgb}))),!0===this.specular&&r.directSpecular.addAssign(s.mul($g({lightDirection:e})).mul(wh))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Wg=new be;class Hg extends yg{static get type(){return"MeshLambertNodeMaterial"}constructor(e){super(),this.isMeshLambertNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Wg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg(!1)}}const qg=new xe;class jg extends yg{static get type(){return"MeshPhongNodeMaterial"}constructor(e){super(),this.isMeshPhongNodeMaterial=!0,this.lights=!0,this.shininessNode=null,this.specularNode=null,this.setDefaultValues(qg),this.setValues(e)}setupEnvironment(e){const t=super.setupEnvironment(e);return t?new Lg(t):null}setupLightingModel(){return new zg}setupVariants(){const e=(this.shininessNode?fn(this.shininessNode):vh).max(1e-4);na.assign(e);const t=this.specularNode||Rh;ra.assign(t)}copy(e){return this.shininessNode=e.shininessNode,this.specularNode=e.specularNode,super.copy(e)}}const Xg=dn(e=>{if(!1===e.geometry.hasAttribute("normal"))return fn(0);const t=lc.dFdx().abs().max(lc.dFdy().abs());return t.x.max(t.y).max(t.z)}),Kg=dn(e=>{const{roughness:t}=e,r=Xg();let s=t.max(.0525);return s=s.add(r),s=s.min(1),s}),Qg=dn(({alpha:e,dotNL:t,dotNV:r})=>{const s=e.pow2(),i=t.mul(s.add(s.oneMinus().mul(r.pow2())).sqrt()),n=r.mul(s.add(s.oneMinus().mul(t.pow2())).sqrt());return Da(.5,i.add(n).max(no))}).setLayout({name:"V_GGX_SmithCorrelated",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNL",type:"float"},{name:"dotNV",type:"float"}]}),Yg=dn(({alphaT:e,alphaB:t,dotTV:r,dotBV:s,dotTL:i,dotBL:n,dotNV:a,dotNL:o})=>{const u=o.mul(Sn(e.mul(r),t.mul(s),a).length()),l=a.mul(Sn(e.mul(i),t.mul(n),o).length());return Da(.5,u.add(l))}).setLayout({name:"V_GGX_SmithCorrelated_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotTV",type:"float",qualifier:"in"},{name:"dotBV",type:"float",qualifier:"in"},{name:"dotTL",type:"float",qualifier:"in"},{name:"dotBL",type:"float",qualifier:"in"},{name:"dotNV",type:"float",qualifier:"in"},{name:"dotNL",type:"float",qualifier:"in"}]}),Zg=dn(({alpha:e,dotNH:t})=>{const r=e.pow2(),s=t.pow2().mul(r.oneMinus()).oneMinus();return r.div(s.pow2()).mul(1/Math.PI)}).setLayout({name:"D_GGX",type:"float",inputs:[{name:"alpha",type:"float"},{name:"dotNH",type:"float"}]}),Jg=fn(1/Math.PI),em=dn(({alphaT:e,alphaB:t,dotNH:r,dotTH:s,dotBH:i})=>{const n=e.mul(t),a=Sn(t.mul(s),e.mul(i),n.mul(r)),o=a.dot(a),u=n.div(o);return Jg.mul(n.mul(u.pow2()))}).setLayout({name:"D_GGX_Anisotropic",type:"float",inputs:[{name:"alphaT",type:"float",qualifier:"in"},{name:"alphaB",type:"float",qualifier:"in"},{name:"dotNH",type:"float",qualifier:"in"},{name:"dotTH",type:"float",qualifier:"in"},{name:"dotBH",type:"float",qualifier:"in"}]}),tm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,normalView:n=cc,USE_IRIDESCENCE:a,USE_ANISOTROPY:o})=>{const u=s.pow2(),l=e.add(tc).normalize(),d=n.dot(e).clamp(),c=n.dot(tc).clamp(),h=n.dot(l).clamp(),p=tc.dot(l).clamp();let g,m,f=Vg({f0:t,f90:r,dotVH:p});if(Yi(a)&&(f=Kn.mix(f,i)),Yi(o)){const t=ea.dot(e),r=ea.dot(tc),s=ea.dot(l),i=ta.dot(e),n=ta.dot(tc),a=ta.dot(l);g=Yg({alphaT:Zn,alphaB:u,dotTV:r,dotBV:n,dotTL:t,dotBL:i,dotNV:c,dotNL:d}),m=em({alphaT:Zn,alphaB:u,dotNH:h,dotTH:s,dotBH:a})}else g=Qg({alpha:u,dotNL:d,dotNV:c}),m=Zg({alpha:u,dotNH:h});return f.mul(g).mul(m)}),rm=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);let sm=null;const im=dn(({roughness:e,dotNV:t})=>{null===sm&&(sm=new Te(rm,16,16,W,_e),sm.name="DFG_LUT",sm.minFilter=de,sm.magFilter=de,sm.wrapS=ve,sm.wrapT=ve,sm.generateMipmaps=!1,sm.needsUpdate=!0);const r=Tn(e,t);return Ul(sm,r).rg}),nm=dn(({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a})=>{const o=tm({lightDirection:e,f0:t,f90:r,roughness:s,f:i,USE_IRIDESCENCE:n,USE_ANISOTROPY:a}),u=cc.dot(e).clamp(),l=cc.dot(tc).clamp(),d=im({roughness:s,dotNV:l}),c=im({roughness:s,dotNV:u}),h=t.mul(d.x).add(r.mul(d.y)),p=t.mul(c.x).add(r.mul(c.y)),g=d.x.add(d.y),m=c.x.add(c.y),f=fn(1).sub(g),y=fn(1).sub(m),b=t.add(t.oneMinus().mul(.047619)),x=h.mul(p).mul(b).div(fn(1).sub(f.mul(y).mul(b).mul(b)).add(no)),T=f.mul(y),_=x.mul(T);return o.add(_)}),am=dn(e=>{const{dotNV:t,specularColor:r,specularF90:s,roughness:i}=e,n=im({dotNV:t,roughness:i});return r.mul(n.x).add(s.mul(n.y))}),om=dn(({f:e,f90:t,dotVH:r})=>{const s=r.oneMinus().saturate(),i=s.mul(s),n=s.mul(i,i).clamp(0,.9999);return e.sub(Sn(t).mul(n)).div(n.oneMinus())}).setLayout({name:"Schlick_to_F0",type:"vec3",inputs:[{name:"f",type:"vec3"},{name:"f90",type:"float"},{name:"dotVH",type:"float"}]}),um=dn(({roughness:e,dotNH:t})=>{const r=e.pow2(),s=fn(1).div(r),i=t.pow2().oneMinus().max(.0078125);return fn(2).add(s).mul(i.pow(s.mul(.5))).div(2*Math.PI)}).setLayout({name:"D_Charlie",type:"float",inputs:[{name:"roughness",type:"float"},{name:"dotNH",type:"float"}]}),lm=dn(({dotNV:e,dotNL:t})=>fn(1).div(fn(4).mul(t.add(e).sub(t.mul(e))))).setLayout({name:"V_Neubelt",type:"float",inputs:[{name:"dotNV",type:"float"},{name:"dotNL",type:"float"}]}),dm=dn(({lightDirection:e})=>{const t=e.add(tc).normalize(),r=cc.dot(e).clamp(),s=cc.dot(tc).clamp(),i=cc.dot(t).clamp(),n=um({roughness:Xn,dotNH:i}),a=lm({dotNV:s,dotNL:r});return jn.mul(n).mul(a)}),cm=dn(({N:e,V:t,roughness:r})=>{const s=e.dot(t).saturate(),i=Tn(r,s.oneMinus().sqrt());return i.assign(i.mul(.984375).add(.0078125)),i}).setLayout({name:"LTC_Uv",type:"vec2",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"roughness",type:"float"}]}),hm=dn(({f:e})=>{const t=e.length();return jo(t.mul(t).add(e.z).div(t.add(1)),0)}).setLayout({name:"LTC_ClippedSphereFormFactor",type:"float",inputs:[{name:"f",type:"vec3"}]}),pm=dn(({v1:e,v2:t})=>{const r=e.dot(t),s=r.abs().toVar(),i=s.mul(.0145206).add(.4965155).mul(s).add(.8543985).toVar(),n=s.add(4.1616724).mul(s).add(3.417594).toVar(),a=i.div(n),o=r.greaterThan(0).select(a,jo(r.mul(r).oneMinus(),1e-7).inverseSqrt().mul(.5).sub(a));return e.cross(t).mul(o)}).setLayout({name:"LTC_EdgeVectorFormFactor",type:"vec3",inputs:[{name:"v1",type:"vec3"},{name:"v2",type:"vec3"}]}),gm=dn(({N:e,V:t,P:r,mInv:s,p0:i,p1:n,p2:a,p3:o})=>{const u=n.sub(i).toVar(),l=o.sub(i).toVar(),d=u.cross(l),c=Sn().toVar();return pn(d.dot(r.sub(i)).greaterThanEqual(0),()=>{const u=t.sub(e.mul(t.dot(e))).normalize(),l=e.cross(u).negate(),d=s.mul(Ln(u,l,e).transpose()).toVar(),h=d.mul(i.sub(r)).normalize().toVar(),p=d.mul(n.sub(r)).normalize().toVar(),g=d.mul(a.sub(r)).normalize().toVar(),m=d.mul(o.sub(r)).normalize().toVar(),f=Sn(0).toVar();f.addAssign(pm({v1:h,v2:p})),f.addAssign(pm({v1:p,v2:g})),f.addAssign(pm({v1:g,v2:m})),f.addAssign(pm({v1:m,v2:h})),c.assign(Sn(hm({f:f})))}),c}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"N",type:"vec3"},{name:"V",type:"vec3"},{name:"P",type:"vec3"},{name:"mInv",type:"mat3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),mm=dn(({P:e,p0:t,p1:r,p2:s,p3:i})=>{const n=r.sub(t).toVar(),a=i.sub(t).toVar(),o=n.cross(a),u=Sn().toVar();return pn(o.dot(e.sub(t)).greaterThanEqual(0),()=>{const n=t.sub(e).normalize().toVar(),a=r.sub(e).normalize().toVar(),o=s.sub(e).normalize().toVar(),l=i.sub(e).normalize().toVar(),d=Sn(0).toVar();d.addAssign(pm({v1:n,v2:a})),d.addAssign(pm({v1:a,v2:o})),d.addAssign(pm({v1:o,v2:l})),d.addAssign(pm({v1:l,v2:n})),u.assign(Sn(hm({f:d.abs()})))}),u}).setLayout({name:"LTC_Evaluate",type:"vec3",inputs:[{name:"P",type:"vec3"},{name:"p0",type:"vec3"},{name:"p1",type:"vec3"},{name:"p2",type:"vec3"},{name:"p3",type:"vec3"}]}),fm=1/6,ym=e=>Pa(fm,Pa(e,Pa(e,e.negate().add(3)).sub(3)).add(1)),bm=e=>Pa(fm,Pa(e,Pa(e,Pa(3,e).sub(6))).add(4)),xm=e=>Pa(fm,Pa(e,Pa(e,Pa(-3,e).add(3)).add(3)).add(1)),Tm=e=>Pa(fm,eu(e,3)),_m=e=>ym(e).add(bm(e)),vm=e=>xm(e).add(Tm(e)),Nm=e=>Fa(-1,bm(e).div(ym(e).add(bm(e)))),Sm=e=>Fa(1,Tm(e).div(xm(e).add(Tm(e)))),Rm=(e,t,r)=>{const s=e.uvNode,i=Pa(s,t.zw).add(.5),n=vo(i),a=Ro(i),o=_m(a.x),u=vm(a.x),l=Nm(a.x),d=Sm(a.x),c=Nm(a.y),h=Sm(a.y),p=Tn(n.x.add(l),n.y.add(c)).sub(.5).mul(t.xy),g=Tn(n.x.add(d),n.y.add(c)).sub(.5).mul(t.xy),m=Tn(n.x.add(l),n.y.add(h)).sub(.5).mul(t.xy),f=Tn(n.x.add(d),n.y.add(h)).sub(.5).mul(t.xy),y=_m(a.y).mul(Fa(o.mul(e.sample(p).level(r)),u.mul(e.sample(g).level(r)))),b=vm(a.y).mul(Fa(o.mul(e.sample(m).level(r)),u.mul(e.sample(f).level(r))));return y.add(b)},Em=dn(([e,t])=>{const r=Tn(e.size(yn(t))),s=Tn(e.size(yn(t.add(1)))),i=Da(1,r),n=Da(1,s),a=Rm(e,wn(i,r),vo(t)),o=Rm(e,wn(n,s),No(t));return Ro(t).mix(a,o)}),Am=dn(([e,t])=>{const r=t.mul(Bl(e));return Em(e,r)}),wm=dn(([e,t,r,s,i])=>{const n=Sn(du(t.negate(),So(e),Da(1,s))),a=Sn(Po(i[0].xyz),Po(i[1].xyz),Po(i[2].xyz));return So(n).mul(r.mul(a))}).setLayout({name:"getVolumeTransmissionRay",type:"vec3",inputs:[{name:"n",type:"vec3"},{name:"v",type:"vec3"},{name:"thickness",type:"float"},{name:"ior",type:"float"},{name:"modelMatrix",type:"mat4"}]}),Cm=dn(([e,t])=>e.mul(uu(t.mul(2).sub(2),0,1))).setLayout({name:"applyIorToRoughness",type:"float",inputs:[{name:"roughness",type:"float"},{name:"ior",type:"float"}]}),Mm=Gp(),Bm=zp(),Fm=dn(([e,t,r],{material:s})=>{const i=(s.side===L?Mm:Bm).sample(e),n=xo(Ql.x).mul(Cm(t,r));return Em(i,n)}),Lm=dn(([e,t,r])=>(pn(r.notEqual(0),()=>{const s=bo(t).negate().div(r);return fo(s.negate().mul(e))}),Sn(1))).setLayout({name:"volumeAttenuation",type:"vec3",inputs:[{name:"transmissionDistance",type:"float"},{name:"attenuationColor",type:"vec3"},{name:"attenuationDistance",type:"float"}]}),Pm=dn(([e,t,r,s,i,n,a,o,u,l,d,c,h,p,g])=>{let m,f;if(g){m=wn().toVar(),f=Sn().toVar();const i=d.sub(1).mul(g.mul(.025)),n=Sn(d.sub(i),d,d.add(i));Ep({start:0,end:3},({i:i})=>{const d=n.element(i),g=wm(e,t,c,d,o),y=a.add(g),b=l.mul(u.mul(wn(y,1))),x=Tn(b.xy.div(b.w)).toVar();x.addAssign(1),x.divAssign(2),x.assign(Tn(x.x,x.y.oneMinus()));const T=Fm(x,r,d);m.element(i).assign(T.element(i)),m.a.addAssign(T.a),f.element(i).assign(s.element(i).mul(Lm(Po(g),h,p).element(i)))}),m.a.divAssign(3)}else{const i=wm(e,t,c,d,o),n=a.add(i),g=l.mul(u.mul(wn(n,1))),y=Tn(g.xy.div(g.w)).toVar();y.addAssign(1),y.divAssign(2),y.assign(Tn(y.x,y.y.oneMinus())),m=Fm(y,r,d),f=s.mul(Lm(Po(i),h,p))}const y=f.rgb.mul(m.rgb),b=e.dot(t).clamp(),x=Sn(am({dotNV:b,specularColor:i,specularF90:n,roughness:r})),T=f.r.add(f.g,f.b).div(3);return wn(x.oneMinus().mul(y),m.a.oneMinus().mul(T).oneMinus())}),Dm=Ln(3.2404542,-.969266,.0556434,-1.5371385,1.8760108,-.2040259,-.4985314,.041556,1.0572252),Um=(e,t)=>e.sub(t).div(e.add(t)).pow2(),Im=dn(({outsideIOR:e,eta2:t,cosTheta1:r,thinFilmThickness:s,baseF0:i})=>{const n=ou(e,t,cu(0,.03,s)),a=e.div(n).pow2().mul(r.pow2().oneMinus()).oneMinus();pn(a.lessThan(0),()=>Sn(1));const o=a.sqrt(),u=Um(n,e),l=Vg({f0:u,f90:1,dotVH:r}),d=l.oneMinus(),c=n.lessThan(e).select(Math.PI,0),h=fn(Math.PI).sub(c),p=(e=>{const t=e.sqrt();return Sn(1).add(t).div(Sn(1).sub(t))})(i.clamp(0,.9999)),g=Um(p,n.toVec3()),m=Vg({f0:g,f90:1,dotVH:o}),f=Sn(p.x.lessThan(n).select(Math.PI,0),p.y.lessThan(n).select(Math.PI,0),p.z.lessThan(n).select(Math.PI,0)),y=n.mul(s,o,2),b=Sn(h).add(f),x=l.mul(m).clamp(1e-5,.9999),T=x.sqrt(),_=d.pow2().mul(m).div(Sn(1).sub(x)),v=l.add(_).toVar(),N=_.sub(d).toVar();return Ep({start:1,end:2,condition:"<=",name:"m"},({m:e})=>{N.mulAssign(T);const t=((e,t)=>{const r=e.mul(2*Math.PI*1e-9),s=Sn(54856e-17,44201e-17,52481e-17),i=Sn(1681e3,1795300,2208400),n=Sn(43278e5,93046e5,66121e5),a=fn(9747e-17*Math.sqrt(2*Math.PI*45282e5)).mul(r.mul(2239900).add(t.x).cos()).mul(r.pow2().mul(-45282e5).exp());let o=s.mul(n.mul(2*Math.PI).sqrt()).mul(i.mul(r).add(t).cos()).mul(r.pow2().negate().mul(n).exp());return o=Sn(o.x.add(a),o.y,o.z).div(1.0685e-7),Dm.mul(o)})(fn(e).mul(y),fn(e).mul(b)).mul(2);v.addAssign(N.mul(t))}),v.max(Sn(0))}).setLayout({name:"evalIridescence",type:"vec3",inputs:[{name:"outsideIOR",type:"float"},{name:"eta2",type:"float"},{name:"cosTheta1",type:"float"},{name:"thinFilmThickness",type:"float"},{name:"baseF0",type:"vec3"}]}),Om=dn(({normal:e,viewDir:t,roughness:r})=>{const s=e.dot(t).saturate(),i=r.mul(r),n=r.add(.1).reciprocal(),a=fn(-1.9362).add(r.mul(1.0678)).add(i.mul(.4573)).sub(n.mul(.8469)),o=fn(-.6014).add(r.mul(.5538)).sub(i.mul(.467)).sub(n.mul(.1255));return a.mul(s).add(o).exp().saturate()}),Vm=Sn(.04),km=fn(1);class Gm extends Dg{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1){super(),this.clearcoat=e,this.sheen=t,this.iridescence=r,this.anisotropy=s,this.transmission=i,this.dispersion=n,this.clearcoatRadiance=null,this.clearcoatSpecularDirect=null,this.clearcoatSpecularIndirect=null,this.sheenSpecularDirect=null,this.sheenSpecularIndirect=null,this.iridescenceFresnel=null,this.iridescenceF0=null,this.iridescenceF0Dielectric=null,this.iridescenceF0Metallic=null}start(e){if(!0===this.clearcoat&&(this.clearcoatRadiance=Sn().toVar("clearcoatRadiance"),this.clearcoatSpecularDirect=Sn().toVar("clearcoatSpecularDirect"),this.clearcoatSpecularIndirect=Sn().toVar("clearcoatSpecularIndirect")),!0===this.sheen&&(this.sheenSpecularDirect=Sn().toVar("sheenSpecularDirect"),this.sheenSpecularIndirect=Sn().toVar("sheenSpecularIndirect")),!0===this.iridescence){const e=cc.dot(tc).clamp(),t=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:ra}),r=Im({outsideIOR:fn(1),eta2:Qn,cosTheta1:e,thinFilmThickness:Yn,baseF0:kn.rgb});this.iridescenceFresnel=ou(t,r,Wn),this.iridescenceF0Dielectric=om({f:t,f90:1,dotVH:e}),this.iridescenceF0Metallic=om({f:r,f90:1,dotVH:e}),this.iridescenceF0=ou(this.iridescenceF0Dielectric,this.iridescenceF0Metallic,Wn)}if(!0===this.transmission){const t=Zd,r=Rd.sub(Zd).normalize(),s=hc,i=e.context;i.backdrop=Pm(s,r,zn,Gn,sa,ia,t,Id,vd,Td,da,ha,ga,pa,this.dispersion?ma:null),i.backdropAlpha=ca,kn.a.mulAssign(ou(1,i.backdrop.a,ca))}super.start(e)}computeMultiscattering(e,t,r,s,i=null){const n=cc.dot(tc).clamp(),a=im({roughness:zn,dotNV:n}),o=i?Kn.mix(s,i):s,u=o.mul(a.x).add(r.mul(a.y)),l=a.x.add(a.y).oneMinus(),d=o.add(o.oneMinus().mul(.047619)),c=u.mul(d).div(l.mul(d).oneMinus());e.addAssign(u),t.addAssign(c.mul(l))}direct({lightDirection:e,lightColor:t,reflectedLight:r}){const s=cc.dot(e).clamp().mul(t).toVar();if(!0===this.sheen){this.sheenSpecularDirect.addAssign(s.mul(dm({lightDirection:e})));const t=Om({normal:cc,viewDir:tc,roughness:Xn}),r=Om({normal:cc,viewDir:e,roughness:Xn}),i=jn.r.max(jn.g).max(jn.b).mul(t.max(r)).oneMinus();s.mulAssign(i)}if(!0===this.clearcoat){const r=pc.dot(e).clamp().mul(t);this.clearcoatSpecularDirect.addAssign(r.mul(tm({lightDirection:e,f0:Vm,f90:km,roughness:qn,normalView:pc})))}r.directDiffuse.addAssign(s.mul(kg({diffuseColor:Gn}))),r.directSpecular.addAssign(s.mul(nm({lightDirection:e,f0:sa,f90:1,roughness:zn,f:this.iridescenceFresnel,USE_IRIDESCENCE:this.iridescence,USE_ANISOTROPY:this.anisotropy})))}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s,reflectedLight:i,ltc_1:n,ltc_2:a}){const o=t.add(r).sub(s),u=t.sub(r).sub(s),l=t.sub(r).add(s),d=t.add(r).add(s),c=cc,h=tc,p=ec.toVar(),g=cm({N:c,V:h,roughness:zn}),m=n.sample(g).toVar(),f=a.sample(g).toVar(),y=Ln(Sn(m.x,0,m.y),Sn(0,1,0),Sn(m.z,0,m.w)).toVar(),b=sa.mul(f.x).add(ia.sub(sa).mul(f.y)).toVar();if(i.directSpecular.addAssign(e.mul(b).mul(gm({N:c,V:h,P:p,mInv:y,p0:o,p1:u,p2:l,p3:d}))),i.directDiffuse.addAssign(e.mul(Gn).mul(gm({N:c,V:h,P:p,mInv:Ln(1,0,0,0,1,0,0,0,1),p0:o,p1:u,p2:l,p3:d}))),!0===this.clearcoat){const t=pc,r=cm({N:t,V:h,roughness:qn}),s=n.sample(r),i=a.sample(r),c=Ln(Sn(s.x,0,s.y),Sn(0,1,0),Sn(s.z,0,s.w)),g=Vm.mul(i.x).add(km.sub(Vm).mul(i.y));this.clearcoatSpecularDirect.addAssign(e.mul(g).mul(gm({N:t,V:h,P:p,mInv:c,p0:o,p1:u,p2:l,p3:d})))}}indirect(e){this.indirectDiffuse(e),this.indirectSpecular(e),this.ambientOcclusion(e)}indirectDiffuse(e){const{irradiance:t,reflectedLight:r}=e.context,s=t.mul(kg({diffuseColor:Gn})).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();s.mulAssign(t)}r.indirectDiffuse.addAssign(s)}indirectSpecular(e){const{radiance:t,iblIrradiance:r,reflectedLight:s}=e.context;if(!0===this.sheen&&this.sheenSpecularIndirect.addAssign(r.mul(jn,Om({normal:cc,viewDir:tc,roughness:Xn}))),!0===this.clearcoat){const e=pc.dot(tc).clamp(),t=am({dotNV:e,specularColor:Vm,specularF90:km,roughness:qn});this.clearcoatSpecularIndirect.addAssign(this.clearcoatRadiance.mul(t))}const i=Sn().toVar("singleScatteringDielectric"),n=Sn().toVar("multiScatteringDielectric"),a=Sn().toVar("singleScatteringMetallic"),o=Sn().toVar("multiScatteringMetallic");this.computeMultiscattering(i,n,ia,ra,this.iridescenceF0Dielectric),this.computeMultiscattering(a,o,ia,kn.rgb,this.iridescenceF0Metallic);const u=ou(i,a,Wn),l=ou(n,o,Wn),d=i.add(n),c=Gn.mul(d.oneMinus()),h=r.mul(1/Math.PI),p=t.mul(u).add(l.mul(h)).toVar(),g=c.mul(h).toVar();if(!0===this.sheen){const e=Om({normal:cc,viewDir:tc,roughness:Xn}),t=jn.r.max(jn.g).max(jn.b).mul(e).oneMinus();p.mulAssign(t),g.mulAssign(t)}s.indirectSpecular.addAssign(p),s.indirectDiffuse.addAssign(g)}ambientOcclusion(e){const{ambientOcclusion:t,reflectedLight:r}=e.context,s=cc.dot(tc).clamp().add(t),i=zn.mul(-16).oneMinus().negate().exp2(),n=t.sub(s.pow(i).oneMinus()).clamp();!0===this.clearcoat&&this.clearcoatSpecularIndirect.mulAssign(t),!0===this.sheen&&this.sheenSpecularIndirect.mulAssign(t),r.indirectDiffuse.mulAssign(t),r.indirectSpecular.mulAssign(n)}finish({context:e}){const{outgoingLight:t}=e;if(!0===this.clearcoat){const e=pc.dot(tc).clamp(),r=Vg({dotVH:e,f0:Vm,f90:km}),s=t.mul(Hn.mul(r).oneMinus()).add(this.clearcoatSpecularDirect.add(this.clearcoatSpecularIndirect).mul(Hn));t.assign(s)}if(!0===this.sheen){const e=t.add(this.sheenSpecularDirect,this.sheenSpecularIndirect.mul(1/Math.PI));t.assign(e)}}}const $m=fn(1),zm=fn(-2),Wm=fn(.8),Hm=fn(-1),qm=fn(.4),jm=fn(2),Xm=fn(.305),Km=fn(3),Qm=fn(.21),Ym=fn(4),Zm=fn(4),Jm=fn(16),ef=dn(([e])=>{const t=Sn(Fo(e)).toVar(),r=fn(-1).toVar();return pn(t.x.greaterThan(t.z),()=>{pn(t.x.greaterThan(t.y),()=>{r.assign(Tu(e.x.greaterThan(0),0,3))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}).Else(()=>{pn(t.z.greaterThan(t.y),()=>{r.assign(Tu(e.z.greaterThan(0),2,5))}).Else(()=>{r.assign(Tu(e.y.greaterThan(0),1,4))})}),r}).setLayout({name:"getFace",type:"float",inputs:[{name:"direction",type:"vec3"}]}),tf=dn(([e,t])=>{const r=Tn().toVar();return pn(t.equal(0),()=>{r.assign(Tn(e.z,e.y).div(Fo(e.x)))}).ElseIf(t.equal(1),()=>{r.assign(Tn(e.x.negate(),e.z.negate()).div(Fo(e.y)))}).ElseIf(t.equal(2),()=>{r.assign(Tn(e.x.negate(),e.y).div(Fo(e.z)))}).ElseIf(t.equal(3),()=>{r.assign(Tn(e.z.negate(),e.y).div(Fo(e.x)))}).ElseIf(t.equal(4),()=>{r.assign(Tn(e.x.negate(),e.z).div(Fo(e.y)))}).Else(()=>{r.assign(Tn(e.x,e.y).div(Fo(e.z)))}),Pa(.5,r.add(1))}).setLayout({name:"getUV",type:"vec2",inputs:[{name:"direction",type:"vec3"},{name:"face",type:"float"}]}),rf=dn(([e])=>{const t=fn(0).toVar();return pn(e.greaterThanEqual(Wm),()=>{t.assign($m.sub(e).mul(Hm.sub(zm)).div($m.sub(Wm)).add(zm))}).ElseIf(e.greaterThanEqual(qm),()=>{t.assign(Wm.sub(e).mul(jm.sub(Hm)).div(Wm.sub(qm)).add(Hm))}).ElseIf(e.greaterThanEqual(Xm),()=>{t.assign(qm.sub(e).mul(Km.sub(jm)).div(qm.sub(Xm)).add(jm))}).ElseIf(e.greaterThanEqual(Qm),()=>{t.assign(Xm.sub(e).mul(Ym.sub(Km)).div(Xm.sub(Qm)).add(Km))}).Else(()=>{t.assign(fn(-2).mul(xo(Pa(1.16,e))))}),t}).setLayout({name:"roughnessToMip",type:"float",inputs:[{name:"roughness",type:"float"}]}),sf=dn(([e,t])=>{const r=e.toVar();r.assign(Pa(2,r).sub(1));const s=Sn(r,1).toVar();return pn(t.equal(0),()=>{s.assign(s.zyx)}).ElseIf(t.equal(1),()=>{s.assign(s.xzy),s.xz.mulAssign(-1)}).ElseIf(t.equal(2),()=>{s.x.mulAssign(-1)}).ElseIf(t.equal(3),()=>{s.assign(s.zyx),s.xz.mulAssign(-1)}).ElseIf(t.equal(4),()=>{s.assign(s.xzy),s.xy.mulAssign(-1)}).ElseIf(t.equal(5),()=>{s.z.mulAssign(-1)}),s}).setLayout({name:"getDirection",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"face",type:"float"}]}),nf=dn(([e,t,r,s,i,n])=>{const a=fn(r),o=Sn(t),u=uu(rf(a),zm,n),l=Ro(u),d=vo(u),c=Sn(af(e,o,d,s,i,n)).toVar();return pn(l.notEqual(0),()=>{const t=Sn(af(e,o,d.add(1),s,i,n)).toVar();c.assign(ou(c,t,l))}),c}),af=dn(([e,t,r,s,i,n])=>{const a=fn(r).toVar(),o=Sn(t),u=fn(ef(o)).toVar(),l=fn(jo(Zm.sub(a),0)).toVar();a.assign(jo(a,Zm));const d=fn(yo(a)).toVar(),c=Tn(tf(o,u).mul(d.sub(2)).add(1)).toVar();return pn(u.greaterThan(2),()=>{c.y.addAssign(d),u.subAssign(3)}),c.x.addAssign(u.mul(d)),c.x.addAssign(l.mul(Pa(3,Jm))),c.y.addAssign(Pa(4,yo(n).sub(d))),c.x.mulAssign(s),c.y.mulAssign(i),e.sample(c).grad(Tn(),Tn())}),of=dn(({envMap:e,mipInt:t,outputDirection:r,theta:s,axis:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Ao(s),l=r.mul(u).add(i.cross(r).mul(Eo(s))).add(i.mul(i.dot(r).mul(u.oneMinus())));return af(e,l,t,n,a,o)}),uf=dn(({n:e,latitudinal:t,poleAxis:r,outputDirection:s,weights:i,samples:n,dTheta:a,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})=>{const h=Sn(Tu(t,r,Jo(r,s))).toVar();pn(h.equal(Sn(0)),()=>{h.assign(Sn(s.z,0,s.x.negate()))}),h.assign(So(h));const p=Sn().toVar();return p.addAssign(i.element(0).mul(of({theta:0,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),Ep({start:yn(1),end:e},({i:e})=>{pn(e.greaterThanEqual(n),()=>{Ap()});const t=fn(a.mul(fn(e))).toVar();p.addAssign(i.element(e).mul(of({theta:t.mul(-1),axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c}))),p.addAssign(i.element(e).mul(of({theta:t,axis:h,outputDirection:s,mipInt:o,envMap:u,CUBEUV_TEXEL_WIDTH:l,CUBEUV_TEXEL_HEIGHT:d,CUBEUV_MAX_MIP:c})))}),wn(p,1)}),lf=dn(([e])=>{const t=bn(e).toVar();return t.assign(t.shiftLeft(bn(16)).bitOr(t.shiftRight(bn(16)))),t.assign(t.bitAnd(bn(1431655765)).shiftLeft(bn(1)).bitOr(t.bitAnd(bn(2863311530)).shiftRight(bn(1)))),t.assign(t.bitAnd(bn(858993459)).shiftLeft(bn(2)).bitOr(t.bitAnd(bn(3435973836)).shiftRight(bn(2)))),t.assign(t.bitAnd(bn(252645135)).shiftLeft(bn(4)).bitOr(t.bitAnd(bn(4042322160)).shiftRight(bn(4)))),t.assign(t.bitAnd(bn(16711935)).shiftLeft(bn(8)).bitOr(t.bitAnd(bn(4278255360)).shiftRight(bn(8)))),fn(t).mul(2.3283064365386963e-10)}),df=dn(([e,t])=>Tn(fn(e).div(fn(t)),lf(e))),cf=dn(([e,t,r])=>{const s=r.mul(r).toConst(),i=Sn(1,0,0).toConst(),n=Jo(t,i).toConst(),a=To(e.x).toConst(),o=Pa(2,3.14159265359).mul(e.y).toConst(),u=a.mul(Ao(o)).toConst(),l=a.mul(Eo(o)).toVar(),d=Pa(.5,t.z.add(1)).toConst();l.assign(d.oneMinus().mul(To(u.mul(u).oneMinus())).add(d.mul(l)));const c=i.mul(u).add(n.mul(l)).add(t.mul(To(jo(0,u.mul(u).add(l.mul(l)).oneMinus()))));return So(Sn(s.mul(c.x),s.mul(c.y),jo(0,c.z)))}),hf=dn(({roughness:e,mipInt:t,envMap:r,N_immutable:s,GGX_SAMPLES:i,CUBEUV_TEXEL_WIDTH:n,CUBEUV_TEXEL_HEIGHT:a,CUBEUV_MAX_MIP:o})=>{const u=Sn(s).toVar(),l=Sn(0).toVar(),d=fn(0).toVar();return pn(e.lessThan(.001),()=>{l.assign(af(r,u,t,n,a,o))}).Else(()=>{const s=Tu(Fo(u.z).lessThan(.999),Sn(0,0,1),Sn(1,0,0)),c=So(Jo(s,u)).toVar(),h=Jo(u,c).toVar();Ep({start:bn(0),end:i},({i:s})=>{const p=df(s,i),g=cf(p,Sn(0,0,1),e),m=So(c.mul(g.x).add(h.mul(g.y)).add(u.mul(g.z))),f=So(m.mul(Zo(u,m).mul(2)).sub(u)),y=jo(Zo(u,f),0);pn(y.greaterThan(0),()=>{const e=af(r,f,t,n,a,o);l.addAssign(e.mul(y)),d.addAssign(y)})}),pn(d.greaterThan(0),()=>{l.assign(l.div(d))})}),wn(l,1)}),pf=[.125,.215,.35,.446,.526,.582],gf=20,mf=new Se(-1,1,1,-1,0,1),ff=new Re(90,1),yf=new e;let bf=null,xf=0,Tf=0;const _f=new r,vf=new WeakMap,Nf=[3,1,5,0,4,2],Sf=sf(Al(),El("faceIndex")).normalize(),Rf=Sn(Sf.x,Sf.y,Sf.z);class Ef{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._sizeLods=[],this._sigmas=[],this._lodMeshes=[],this._blurMaterial=null,this._ggxMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._backgroundBox=null}get _hasInitialized(){return this._renderer.hasInitialized()}fromScene(e,t=0,r=.1,s=100,i={}){const{size:n=256,position:a=_f,renderTarget:o=null}=i;if(this._setSize(n),!1===this._hasInitialized){d('PMREMGenerator: ".fromScene()" called before the backend is initialized. Try using "await renderer.init()" instead.');const n=o||this._allocateTarget();return i.renderTarget=n,this.fromSceneAsync(e,t,r,s,i),n}bf=this._renderer.getRenderTarget(),xf=this._renderer.getActiveCubeFace(),Tf=this._renderer.getActiveMipmapLevel();const u=o||this._allocateTarget();return u.depthBuffer=!0,this._init(u),this._sceneToCubeUV(e,r,s,u,a),t>0&&this._blur(u,0,0,t),this._applyPMREM(u),this._cleanup(u),u}async fromSceneAsync(e,t=0,r=.1,s=100,i={}){return v('PMREMGenerator: ".fromSceneAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this.fromScene(e,t,r,s,i)}fromEquirectangular(e,t=null){if(!1===this._hasInitialized){d('PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using "await renderer.init()" instead.'),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromEquirectangularAsync(e,r),r}return this._fromTexture(e,t)}async fromEquirectangularAsync(e,t=null){return v('PMREMGenerator: ".fromEquirectangularAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}fromCubemap(e,t=null){if(!1===this._hasInitialized){d("PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead."),this._setSizeFromTexture(e);const r=t||this._allocateTarget();return this.fromCubemapAsync(e,t),r}return this._fromTexture(e,t)}async fromCubemapAsync(e,t=null){return v('PMREMGenerator: ".fromCubemapAsync()" is deprecated. Use "await renderer.init()" instead.'),await this._renderer.init(),this._fromTexture(e,t)}async compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(),await this._compileMaterial(this._cubemapMaterial))}async compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Bf(),await this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose(),null!==this._backgroundBox&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSizeFromTexture(e){e.mapping===I||e.mapping===O?this._setSize(0===e.image.length?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4)}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._ggxMaterial&&this._ggxMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?o=pf[a-e+4-1]:0===a&&(o=0),r.push(o);const u=1/(n-2),l=-u,d=1+u,c=[l,l,d,l,d,d,l,l,d,d,l,d],h=6,p=6,g=3,m=2,f=1,y=new Float32Array(g*p*h),b=new Float32Array(m*p*h),x=new Float32Array(f*p*h);for(let e=0;e2?0:-1,s=[t,r,0,t+2/3,r,0,t+2/3,r+1,0,t,r,0,t+2/3,r+1,0,t,r+1,0],i=Nf[e];y.set(s,g*p*i),b.set(c,m*p*i);const n=[i,i,i,i,i,i];x.set(n,f*p*i)}const T=new Ne;T.setAttribute("position",new Ce(y,g)),T.setAttribute("uv",new Ce(b,m)),T.setAttribute("faceIndex",new Ce(x,f)),s.push(new ue(T,null)),i>4&&i--}return{lodMeshes:s,sizeLods:t,sigmas:r}}(t)),this._blurMaterial=function(e,t,s){const i=$l(new Array(gf).fill(0)),n=Na(new r(0,1,0)),a=Na(0),o=fn(gf),u=Na(0),l=Na(1),d=Ul(),c=Na(0),h=fn(1/t),p=fn(1/s),g=fn(e),m={n:o,latitudinal:u,weights:i,poleAxis:n,outputDirection:Rf,dTheta:a,samples:l,envMap:d,mipInt:c,CUBEUV_TEXEL_WIDTH:h,CUBEUV_TEXEL_HEIGHT:p,CUBEUV_MAX_MIP:g},f=Cf("blur");return f.fragmentNode=uf({...m,latitudinal:u.equal(1)}),vf.set(f,m),f}(t,e.width,e.height),this._ggxMaterial=function(e,t,r){const s=Ul(),i=Na(0),n=Na(0),a=fn(1/t),o=fn(1/r),u=fn(e),l={envMap:s,roughness:i,mipInt:n,CUBEUV_TEXEL_WIDTH:a,CUBEUV_TEXEL_HEIGHT:o,CUBEUV_MAX_MIP:u},d=Cf("ggx");return d.fragmentNode=hf({...l,N_immutable:Rf,GGX_SAMPLES:bn(512)}),vf.set(d,l),d}(t,e.width,e.height)}}async _compileMaterial(e){const t=new ue(new Ne,e);await this._renderer.compile(t,mf)}_sceneToCubeUV(e,t,r,s,i){const n=ff;n.near=t,n.far=r;const a=[1,1,1,1,-1,1],o=[1,-1,1,-1,1,-1],u=this._renderer,l=u.autoClear;u.getClearColor(yf),u.autoClear=!1,null===this._backgroundBox&&(this._backgroundBox=new ue(new oe,new ye({name:"PMREM.Background",side:L,depthWrite:!1,depthTest:!1})));const d=this._backgroundBox,c=d.material;let h=!1;const p=e.background;p?p.isColor&&(c.color.copy(p),e.background=null,h=!0):(c.color.copy(yf),h=!0),u.setRenderTarget(s),u.clear(),h&&u.render(d,n);for(let t=0;t<6;t++){const r=t%3;0===r?(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x+o[t],i.y,i.z)):1===r?(n.up.set(0,0,a[t]),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y+o[t],i.z)):(n.up.set(0,a[t],0),n.position.set(i.x,i.y,i.z),n.lookAt(i.x,i.y,i.z+o[t]));const l=this._cubeSize;wf(s,r*l,t>2?l:0,l,l),u.render(e,n)}u.autoClear=l,e.background=p}_textureToCubeUV(e,t){const r=this._renderer,s=e.mapping===I||e.mapping===O;s?null===this._cubemapMaterial&&(this._cubemapMaterial=Mf(e)):null===this._equirectMaterial&&(this._equirectMaterial=Bf(e));const i=s?this._cubemapMaterial:this._equirectMaterial;i.fragmentNode.value=e;const n=this._lodMeshes[0];n.material=i;const a=this._cubeSize;wf(t,0,0,3*a,2*a),r.setRenderTarget(t),r.render(n,mf)}_applyPMREM(e){const t=this._renderer,r=t.autoClear;t.autoClear=!1;const s=this._lodMeshes.length;for(let t=1;tc-4?r-c+4:0),g=4*(this._cubeSize-h);e.texture.frame=(e.texture.frame||0)+1,o.envMap.value=e.texture,o.roughness.value=d,o.mipInt.value=c-t,wf(i,p,g,3*h,2*h),s.setRenderTarget(i),s.render(a,mf),i.texture.frame=(i.texture.frame||0)+1,o.envMap.value=i.texture,o.roughness.value=0,o.mipInt.value=c-r,wf(e,p,g,3*h,2*h),s.setRenderTarget(e),s.render(a,mf)}_blur(e,t,r,s,i){const n=this._pingPongRenderTarget;this._halfBlur(e,n,t,r,s,"latitudinal",i),this._halfBlur(n,e,r,r,s,"longitudinal",i)}_halfBlur(e,t,r,s,i,n,a){const u=this._renderer,l=this._blurMaterial;"latitudinal"!==n&&"longitudinal"!==n&&o("blur direction must be either latitudinal or longitudinal!");const c=this._lodMeshes[s];c.material=l;const h=vf.get(l),p=this._sizeLods[r]-1,g=isFinite(i)?Math.PI/(2*p):2*Math.PI/39,m=i/g,f=isFinite(i)?1+Math.floor(3*m):gf;f>gf&&d(`sigmaRadians, ${i}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const y=[];let b=0;for(let e=0;ex-4?s-x+4:0),4*(this._cubeSize-T),3*T,2*T),u.setRenderTarget(t),u.render(c,mf)}}function Af(e,t){const r=new ae(e,t,{magFilter:de,minFilter:de,generateMipmaps:!1,type:_e,format:Ae,colorSpace:Ee});return r.texture.mapping=we,r.texture.name="PMREM.cubeUv",r.texture.isPMREMTexture=!0,r.scissorTest=!0,r}function wf(e,t,r,s,i){e.viewport.set(t,r,s,i),e.scissor.set(t,r,s,i)}function Cf(e){const t=new yg;return t.depthTest=!1,t.depthWrite=!1,t.blending=se,t.name=`PMREM_${e}`,t}function Mf(e){const t=Cf("cubemap");return t.fragmentNode=Bc(e,Rf),t}function Bf(e){const t=Cf("equirect");return t.fragmentNode=Ul(e,Eg(Rf),0),t}const Ff=new WeakMap;function Lf(e,t,r){const s=function(e){let t=Ff.get(e);void 0===t&&(t=new WeakMap,Ff.set(e,t));return t}(t);let i=s.get(e);if((void 0!==i?i.pmremVersion:-1)!==e.pmremVersion){const t=e.image;if(e.isCubeTexture){if(!function(e){if(null==e)return!1;let t=0;const r=6;for(let s=0;s0}(t))return null;i=r.fromEquirectangular(e,i)}i.pmremVersion=e.pmremVersion,s.set(e,i)}return i.texture}class Pf extends pi{static get type(){return"PMREMNode"}constructor(e,t=null,r=null){super("vec3"),this._value=e,this._pmrem=null,this.uvNode=t,this.levelNode=r,this._generator=null;const s=new N;s.isRenderTargetTexture=!0,this._texture=Ul(s),this._width=Na(0),this._height=Na(0),this._maxMip=Na(0),this.updateBeforeType=ti.RENDER}set value(e){this._value=e,this._pmrem=null}get value(){return this._value}updateFromTexture(e){const t=function(e){const t=Math.log2(e)-2,r=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),112)),texelHeight:r,maxMip:t}}(e.image.height);this._texture.value=e,this._width.value=t.texelWidth,this._height.value=t.texelHeight,this._maxMip.value=t.maxMip}updateBefore(e){let t=this._pmrem;const r=t?t.pmremVersion:-1,s=this._value;r!==s.pmremVersion&&(t=!0===s.isPMREMTexture?s:Lf(s,e.renderer,this._generator),null!==t&&(this._pmrem=t,this.updateFromTexture(t)))}setup(e){null===this._generator&&(this._generator=new Ef(e.renderer)),this.updateBefore(e);let t=this.uvNode;null===t&&e.context.getUV&&(t=e.context.getUV(this,e)),t=Nc.mul(Sn(t.x,t.y.negate(),t.z));let r=this.levelNode;return null===r&&e.context.getTextureLevel&&(r=e.context.getTextureLevel(this)),nf(this._texture,t,r,this._width,this._height,this._maxMip)}dispose(){super.dispose(),null!==this._generator&&this._generator.dispose()}}const Df=nn(Pf).setParameterLength(1,3),Uf=new WeakMap;class If extends Lp{static get type(){return"EnvironmentNode"}constructor(e=null){super(),this.envNode=e}setup(e){const{material:t}=e;let r=this.envNode;if(r.isTextureNode||r.isMaterialReferenceNode){const s=r.isTextureNode?r.value:t[r.property],i=this._getPMREMNodeCache(e.renderer);let n=i.get(s);void 0===n&&(n=Df(s),i.set(s,n)),r=n}const s=!0===t.useAnisotropy||t.anisotropy>0?lh:cc,i=r.context(Of(zn,s)).mul(vc),n=r.context(Vf(hc)).mul(Math.PI).mul(vc),a=ul(i),o=ul(n);e.context.radiance.addAssign(a),e.context.iblIrradiance.addAssign(o);const u=e.context.lightingModel.clearcoatRadiance;if(u){const e=r.context(Of(qn,pc)).mul(vc),t=ul(e);u.addAssign(t)}}_getPMREMNodeCache(e){let t=Uf.get(e);return void 0===t&&(t=new WeakMap,Uf.set(e,t)),t}}const Of=(e,t)=>{let r=null;return{getUV:()=>(null===r&&(r=tc.negate().reflect(t),r=su(e).mix(r,t).normalize(),r=r.transformDirection(vd)),r),getTextureLevel:()=>e}},Vf=e=>({getUV:()=>e,getTextureLevel:()=>fn(1)}),kf=new Me;class Gf extends yg{static get type(){return"MeshStandardNodeMaterial"}constructor(e){super(),this.isMeshStandardNodeMaterial=!0,this.lights=!0,this.emissiveNode=null,this.metalnessNode=null,this.roughnessNode=null,this.setDefaultValues(kf),this.setValues(e)}setupEnvironment(e){let t=super.setupEnvironment(e);return null===t&&e.environmentNode&&(t=e.environmentNode),t?new If(t):null}setupLightingModel(){return new Gm}setupSpecular(){const e=ou(Sn(.04),kn.rgb,Wn);ra.assign(Sn(.04)),sa.assign(e),ia.assign(1)}setupVariants(){const e=this.metalnessNode?fn(this.metalnessNode):Bh;Wn.assign(e);let t=this.roughnessNode?fn(this.roughnessNode):Mh;t=Kg({roughness:t}),zn.assign(t),this.setupSpecular(),Gn.assign(kn.rgb.mul(e.oneMinus()))}copy(e){return this.emissiveNode=e.emissiveNode,this.metalnessNode=e.metalnessNode,this.roughnessNode=e.roughnessNode,super.copy(e)}}const $f=new Be;class zf extends Gf{static get type(){return"MeshPhysicalNodeMaterial"}constructor(e){super(),this.isMeshPhysicalNodeMaterial=!0,this.clearcoatNode=null,this.clearcoatRoughnessNode=null,this.clearcoatNormalNode=null,this.sheenNode=null,this.sheenRoughnessNode=null,this.iridescenceNode=null,this.iridescenceIORNode=null,this.iridescenceThicknessNode=null,this.specularIntensityNode=null,this.specularColorNode=null,this.iorNode=null,this.transmissionNode=null,this.thicknessNode=null,this.attenuationDistanceNode=null,this.attenuationColorNode=null,this.dispersionNode=null,this.anisotropyNode=null,this.setDefaultValues($f),this.setValues(e)}get useClearcoat(){return this.clearcoat>0||null!==this.clearcoatNode}get useIridescence(){return this.iridescence>0||null!==this.iridescenceNode}get useSheen(){return this.sheen>0||null!==this.sheenNode}get useAnisotropy(){return this.anisotropy>0||null!==this.anisotropyNode}get useTransmission(){return this.transmission>0||null!==this.transmissionNode}get useDispersion(){return this.dispersion>0||null!==this.dispersionNode}setupSpecular(){const e=this.iorNode?fn(this.iorNode):Hh;da.assign(e),ra.assign(qo(tu(da.sub(1).div(da.add(1))).mul(Ah),Sn(1)).mul(Eh)),sa.assign(ou(ra,kn.rgb,Wn)),ia.assign(ou(Eh,1,Wn))}setupLightingModel(){return new Gm(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion)}setupVariants(e){if(super.setupVariants(e),this.useClearcoat){const e=this.clearcoatNode?fn(this.clearcoatNode):Lh,t=this.clearcoatRoughnessNode?fn(this.clearcoatRoughnessNode):Ph;Hn.assign(e),qn.assign(Kg({roughness:t}))}if(this.useSheen){const e=this.sheenNode?Sn(this.sheenNode):Ih,t=this.sheenRoughnessNode?fn(this.sheenRoughnessNode):Oh;jn.assign(e),Xn.assign(t)}if(this.useIridescence){const e=this.iridescenceNode?fn(this.iridescenceNode):kh,t=this.iridescenceIORNode?fn(this.iridescenceIORNode):Gh,r=this.iridescenceThicknessNode?fn(this.iridescenceThicknessNode):$h;Kn.assign(e),Qn.assign(t),Yn.assign(r)}if(this.useAnisotropy){const e=(this.anisotropyNode?Tn(this.anisotropyNode):Vh).toVar();Jn.assign(e.length()),pn(Jn.equal(0),()=>{e.assign(Tn(1,0))}).Else(()=>{e.divAssign(Tn(Jn)),Jn.assign(Jn.saturate())}),Zn.assign(Jn.pow2().mix(zn.pow2(),1)),ea.assign(oh[0].mul(e.x).add(oh[1].mul(e.y))),ta.assign(oh[1].mul(e.x).sub(oh[0].mul(e.y)))}if(this.useTransmission){const e=this.transmissionNode?fn(this.transmissionNode):zh,t=this.thicknessNode?fn(this.thicknessNode):Wh,r=this.attenuationDistanceNode?fn(this.attenuationDistanceNode):qh,s=this.attenuationColorNode?Sn(this.attenuationColorNode):jh;if(ca.assign(e),ha.assign(t),pa.assign(r),ga.assign(s),this.useDispersion){const e=this.dispersionNode?fn(this.dispersionNode):ep;ma.assign(e)}}}setupClearcoatNormal(){return this.clearcoatNormalNode?Sn(this.clearcoatNormalNode):Dh}setup(e){e.context.setupClearcoatNormal=()=>Pu(this.setupClearcoatNormal(e),"NORMAL","vec3"),super.setup(e)}copy(e){return this.clearcoatNode=e.clearcoatNode,this.clearcoatRoughnessNode=e.clearcoatRoughnessNode,this.clearcoatNormalNode=e.clearcoatNormalNode,this.sheenNode=e.sheenNode,this.sheenRoughnessNode=e.sheenRoughnessNode,this.iridescenceNode=e.iridescenceNode,this.iridescenceIORNode=e.iridescenceIORNode,this.iridescenceThicknessNode=e.iridescenceThicknessNode,this.specularIntensityNode=e.specularIntensityNode,this.specularColorNode=e.specularColorNode,this.iorNode=e.iorNode,this.transmissionNode=e.transmissionNode,this.thicknessNode=e.thicknessNode,this.attenuationDistanceNode=e.attenuationDistanceNode,this.attenuationColorNode=e.attenuationColorNode,this.dispersionNode=e.dispersionNode,this.anisotropyNode=e.anisotropyNode,super.copy(e)}}class Wf extends Gm{constructor(e=!1,t=!1,r=!1,s=!1,i=!1,n=!1,a=!1){super(e,t,r,s,i,n),this.useSSS=a}direct({lightDirection:e,lightColor:t,reflectedLight:r},s){if(!0===this.useSSS){const i=s.material,{thicknessColorNode:n,thicknessDistortionNode:a,thicknessAmbientNode:o,thicknessAttenuationNode:u,thicknessPowerNode:l,thicknessScaleNode:d}=i,c=e.add(cc.mul(a)).normalize(),h=fn(tc.dot(c.negate()).saturate().pow(l).mul(d)),p=Sn(h.add(o).mul(n));r.directDiffuse.addAssign(p.mul(u.mul(t)))}super.direct({lightDirection:e,lightColor:t,reflectedLight:r},s)}}class Hf extends zf{static get type(){return"MeshSSSNodeMaterial"}constructor(e){super(e),this.thicknessColorNode=null,this.thicknessDistortionNode=fn(.1),this.thicknessAmbientNode=fn(0),this.thicknessAttenuationNode=fn(.1),this.thicknessPowerNode=fn(2),this.thicknessScaleNode=fn(10)}get useSSS(){return null!==this.thicknessColorNode}setupLightingModel(){return new Wf(this.useClearcoat,this.useSheen,this.useIridescence,this.useAnisotropy,this.useTransmission,this.useDispersion,this.useSSS)}copy(e){return this.thicknessColorNode=e.thicknessColorNode,this.thicknessDistortionNode=e.thicknessDistortionNode,this.thicknessAmbientNode=e.thicknessAmbientNode,this.thicknessAttenuationNode=e.thicknessAttenuationNode,this.thicknessPowerNode=e.thicknessPowerNode,this.thicknessScaleNode=e.thicknessScaleNode,super.copy(e)}}const qf=dn(({normal:e,lightDirection:t,builder:r})=>{const s=e.dot(t),i=Tn(s.mul(.5).add(.5),0);if(r.material.gradientMap){const e=Ic("gradientMap","texture").context({getUV:()=>i});return Sn(e.r)}{const e=i.fwidth().mul(.5);return ou(Sn(.7),Sn(1),cu(fn(.7).sub(e.x),fn(.7).add(e.x),i.x))}});class jf extends Dg{direct({lightDirection:e,lightColor:t,reflectedLight:r},s){const i=qf({normal:ac,lightDirection:e,builder:s}).mul(t);r.directDiffuse.addAssign(i.mul(kg({diffuseColor:kn.rgb})))}indirect(e){const{ambientOcclusion:t,irradiance:r,reflectedLight:s}=e.context;s.indirectDiffuse.addAssign(r.mul(kg({diffuseColor:kn}))),s.indirectDiffuse.mulAssign(t)}}const Xf=new Fe;class Kf extends yg{static get type(){return"MeshToonNodeMaterial"}constructor(e){super(),this.isMeshToonNodeMaterial=!0,this.lights=!0,this.setDefaultValues(Xf),this.setValues(e)}setupLightingModel(){return new jf}}const Qf=dn(()=>{const e=Sn(tc.z,0,tc.x.negate()).normalize(),t=tc.cross(e);return Tn(e.dot(cc),t.dot(cc)).mul(.495).add(.5)}).once(["NORMAL","VERTEX"])().toVar("matcapUV"),Yf=new Le;class Zf extends yg{static get type(){return"MeshMatcapNodeMaterial"}constructor(e){super(),this.isMeshMatcapNodeMaterial=!0,this.setDefaultValues(Yf),this.setValues(e)}setupVariants(e){const t=Qf;let r;r=e.material.matcap?Ic("matcap","texture").context({getUV:()=>t}):Sn(ou(.2,.8,t.y)),kn.rgb.mulAssign(r.rgb)}}class Jf extends pi{static get type(){return"RotateNode"}constructor(e,t){super(),this.positionNode=e,this.rotationNode=t}getNodeType(e){return this.positionNode.getNodeType(e)}setup(e){const{rotationNode:t,positionNode:r}=this;if("vec2"===this.getNodeType(e)){const e=t.cos(),s=t.sin();return Fn(e,s,s.negate(),e).mul(r)}{const e=t,s=Pn(wn(1,0,0,0),wn(0,Ao(e.x),Eo(e.x).negate(),0),wn(0,Eo(e.x),Ao(e.x),0),wn(0,0,0,1)),i=Pn(wn(Ao(e.y),0,Eo(e.y),0),wn(0,1,0,0),wn(Eo(e.y).negate(),0,Ao(e.y),0),wn(0,0,0,1)),n=Pn(wn(Ao(e.z),Eo(e.z).negate(),0,0),wn(Eo(e.z),Ao(e.z),0,0),wn(0,0,1,0),wn(0,0,0,1));return s.mul(i).mul(n).mul(wn(r,1)).xyz}}}const ey=nn(Jf).setParameterLength(2),ty=new Pe;class ry extends yg{static get type(){return"SpriteNodeMaterial"}constructor(e){super(),this.isSpriteNodeMaterial=!0,this._useSizeAttenuation=!0,this.positionNode=null,this.rotationNode=null,this.scaleNode=null,this.transparent=!0,this.setDefaultValues(ty),this.setValues(e)}setupPositionView(e){const{object:t,camera:r}=e,{positionNode:s,rotationNode:i,scaleNode:n,sizeAttenuation:a}=this,o=Wd.mul(Sn(s||0));let u=Tn(Id[0].xyz.length(),Id[1].xyz.length());null!==n&&(u=u.mul(Tn(n))),r.isPerspectiveCamera&&!1===a&&(u=u.mul(o.z.negate()));let l=Kd.xy;if(t.center&&!0===t.center.isVector2){const e=((e,t,r)=>new Hu(e,t,r))("center","vec2",t);l=l.sub(e.sub(.5))}l=l.mul(u);const d=fn(i||Uh),c=ey(l,d);return wn(o.xy.add(c),o.zw)}copy(e){return this.positionNode=e.positionNode,this.rotationNode=e.rotationNode,this.scaleNode=e.scaleNode,super.copy(e)}get sizeAttenuation(){return this._useSizeAttenuation}set sizeAttenuation(e){this._useSizeAttenuation!==e&&(this._useSizeAttenuation=e,this.needsUpdate=!0)}}const sy=new De,iy=new t;class ny extends ry{static get type(){return"PointsNodeMaterial"}constructor(e){super(),this.sizeNode=null,this.isPointsNodeMaterial=!0,this.setDefaultValues(sy),this.setValues(e)}setupPositionView(){const{positionNode:e}=this;return Wd.mul(Sn(e||Qd)).xyz}setupVertexSprite(e){const{material:t,camera:r}=e,{rotationNode:s,scaleNode:i,sizeNode:n,sizeAttenuation:a}=this;let o=super.setupVertex(e);if(!0!==t.isNodeMaterial)return o;let u=null!==n?Tn(n):Jh;u=u.mul(Xl),r.isPerspectiveCamera&&!0===a&&(u=u.mul(ay.div(ec.z.negate()))),i&&i.isNode&&(u=u.mul(Tn(i)));let l=Kd.xy;if(s&&s.isNode){const e=fn(s);l=ey(l,e)}return l=l.mul(u),l=l.div(Jl.div(2)),l=l.mul(o.w),o=o.add(wn(l,0,0)),o}setupVertex(e){return e.object.isPoints?super.setupVertex(e):this.setupVertexSprite(e)}get alphaToCoverage(){return this._useAlphaToCoverage}set alphaToCoverage(e){this._useAlphaToCoverage!==e&&(this._useAlphaToCoverage=e,this.needsUpdate=!0)}}const ay=Na(1).onFrameUpdate(function({renderer:e}){const t=e.getSize(iy);this.value=.5*t.y});class oy extends Dg{constructor(){super(),this.shadowNode=fn(1).toVar("shadowMask")}direct({lightNode:e}){null!==e.shadowNode&&this.shadowNode.mulAssign(e.shadowNode)}finish({context:e}){kn.a.mulAssign(this.shadowNode.oneMinus()),e.outgoingLight.rgb.assign(kn.rgb)}}const uy=new Ue;class ly extends yg{static get type(){return"ShadowNodeMaterial"}constructor(e){super(),this.isShadowNodeMaterial=!0,this.lights=!0,this.transparent=!0,this.setDefaultValues(uy),this.setValues(e)}setupLightingModel(){return new oy}}const dy=On("vec3"),cy=On("vec3"),hy=On("vec3");class py extends Dg{constructor(){super()}start(e){const{material:t}=e,r=On("vec3"),s=On("vec3");pn(Rd.sub(Zd).length().greaterThan(Gd.mul(2)),()=>{r.assign(Rd),s.assign(Zd)}).Else(()=>{r.assign(Zd),s.assign(Rd)});const i=s.sub(r),n=Na("int").onRenderUpdate(({material:e})=>e.steps),a=i.length().div(n).toVar(),o=i.normalize().toVar(),u=fn(0).toVar(),l=Sn(1).toVar();t.offsetNode&&u.addAssign(t.offsetNode.mul(a)),Ep(n,()=>{const s=r.add(o.mul(u)),i=vd.mul(wn(s,1)).xyz;let n;null!==t.depthNode&&(cy.assign(rg(Qp(i.z,bd,xd))),e.context.sceneDepthNode=rg(t.depthNode).toVar()),e.context.positionWorld=s,e.context.shadowPositionWorld=s,e.context.positionView=i,dy.assign(0),t.scatteringNode&&(n=t.scatteringNode({positionRay:s})),super.start(e),n&&dy.mulAssign(n);const d=dy.mul(.01).negate().mul(a).exp();l.mulAssign(d),u.addAssign(a)}),hy.addAssign(l.saturate().oneMinus())}scatteringLight(e,t){const r=t.context.sceneDepthNode;r?pn(r.greaterThanEqual(cy),()=>{dy.addAssign(e)}):dy.addAssign(e)}direct({lightNode:e,lightColor:t},r){if(void 0===e.light.distance)return;const s=t.xyz.toVar();s.mulAssign(e.shadowNode),this.scatteringLight(s,r)}directRectArea({lightColor:e,lightPosition:t,halfWidth:r,halfHeight:s},i){const n=t.add(r).sub(s),a=t.sub(r).sub(s),o=t.sub(r).add(s),u=t.add(r).add(s),l=i.context.positionView,d=e.xyz.mul(mm({P:l,p0:n,p1:a,p2:o,p3:u})).pow(1.5);this.scatteringLight(d,i)}finish(e){e.context.outgoingLight.assign(hy)}}class gy extends yg{static get type(){return"VolumeNodeMaterial"}constructor(e){super(),this.isVolumeNodeMaterial=!0,this.steps=25,this.offsetNode=null,this.scatteringNode=null,this.lights=!0,this.transparent=!0,this.side=L,this.depthTest=!1,this.depthWrite=!1,this.setValues(e)}setupLightingModel(){return new py}}class my{constructor(e,t,r){this.renderer=e,this.nodes=t,this.info=r,this._context="undefined"!=typeof self?self:null,this._animationLoop=null,this._requestId=null}start(){const e=(t,r)=>{this._requestId=this._context.requestAnimationFrame(e),!0===this.info.autoReset&&this.info.reset(),this.nodes.nodeFrame.update(),this.info.frame=this.nodes.nodeFrame.frameId,this.renderer._inspector.begin(),null!==this._animationLoop&&this._animationLoop(t,r),this.renderer._inspector.finish()};e()}stop(){this._context.cancelAnimationFrame(this._requestId),this._requestId=null}getAnimationLoop(){return this._animationLoop}setAnimationLoop(e){this._animationLoop=e}getContext(){return this._context}setContext(e){this._context=e}dispose(){this.stop()}}class fy{constructor(){this.weakMaps={}}_getWeakMap(e){const t=e.length;let r=this.weakMaps[t];return void 0===r&&(r=new WeakMap,this.weakMaps[t]=r),r}get(e){let t=this._getWeakMap(e);for(let r=0;r{this.dispose()},this.onGeometryDispose=()=>{this.attributes=null,this.attributesId=null},this.material.addEventListener("dispose",this.onMaterialDispose),this.geometry.addEventListener("dispose",this.onGeometryDispose)}updateClipping(e){this.clippingContext=e}get clippingNeedsUpdate(){return null!==this.clippingContext&&this.clippingContext.cacheKey!==this.clippingContextCacheKey&&(this.clippingContextCacheKey=this.clippingContext.cacheKey,!0)}get hardwareClippingPlanes(){return!0===this.material.hardwareClipping?this.clippingContext.unionClippingCount:0}getNodeBuilderState(){return this._nodeBuilderState||(this._nodeBuilderState=this._nodes.getForRender(this))}getMonitor(){return this._monitor||(this._monitor=this.getNodeBuilderState().observer)}getBindings(){return this._bindings||(this._bindings=this.getNodeBuilderState().createBindings())}getBindingGroup(e){for(const t of this.getBindings())if(t.name===e)return t}getIndex(){return this._geometries.getIndex(this)}getIndirect(){return this._geometries.getIndirect(this)}getIndirectOffset(){return this._geometries.getIndirectOffset(this)}getChainArray(){return[this.object,this.material,this.context,this.lightsNode]}setGeometry(e){this.geometry=e,this.attributes=null,this.attributesId=null}getAttributes(){if(null!==this.attributes)return this.attributes;const e=this.getNodeBuilderState().nodeAttributes,t=this.geometry,r=[],s=new Set,i={};for(const n of e){let e;if(n.node&&n.node.attribute?e=n.node.attribute:(e=t.getAttribute(n.name),i[n.name]=e.id),void 0===e)continue;r.push(e);const a=e.isInterleavedBufferAttribute?e.data:e;s.add(a)}return this.attributes=r,this.attributesId=i,this.vertexBuffers=Array.from(s.values()),r}getVertexBuffers(){return null===this.vertexBuffers&&this.getAttributes(),this.vertexBuffers}getDrawParameters(){const{object:e,material:t,geometry:r,group:s,drawRange:i}=this,n=this.drawParams||(this.drawParams={vertexCount:0,firstVertex:0,instanceCount:0,firstInstance:0}),a=this.getIndex(),o=null!==a;let u=1;if(!0===r.isInstancedBufferGeometry?u=r.instanceCount:void 0!==e.count&&(u=Math.max(0,e.count)),0===u)return null;if(n.instanceCount=u,!0===e.isBatchedMesh)return n;let l=1;!0!==t.wireframe||e.isPoints||e.isLineSegments||e.isLine||e.isLineLoop||(l=2);let d=i.start*l,c=(i.start+i.count)*l;null!==s&&(d=Math.max(d,s.start*l),c=Math.min(c,(s.start+s.count)*l));const h=r.attributes.position;let p=1/0;o?p=a.count:null!=h&&(p=h.count),d=Math.max(d,0),c=Math.min(c,p);const g=c-d;return g<0||g===1/0?null:(n.vertexCount=g,n.firstVertex=d,n)}getGeometryCacheKey(){const{geometry:e}=this;let t="";for(const r of Object.keys(e.attributes).sort()){const s=e.attributes[r];t+=r+",",s.data&&(t+=s.data.stride+","),s.offset&&(t+=s.offset+","),s.itemSize&&(t+=s.itemSize+","),s.normalized&&(t+="n,")}for(const r of Object.keys(e.morphAttributes).sort()){const s=e.morphAttributes[r];t+="morph-"+r+",";for(let e=0,r=s.length;e1||Array.isArray(e.morphTargetInfluences))&&(s+=e.uuid+","),s+=this.context.id+",",s+=e.receiveShadow+",",Os(s)}get needsGeometryUpdate(){if(this.geometry.id!==this.object.geometry.id)return!0;if(null!==this.attributes){const e=this.attributesId;for(const t in e){const r=this.geometry.getAttribute(t);if(void 0===r||e[t]!==r.id)return!0}}return!1}get needsUpdate(){return this.initialNodesCacheKey!==this.getDynamicCacheKey()||this.clippingNeedsUpdate}getDynamicCacheKey(){let e=0;return!0!==this.material.isShadowPassMaterial&&(e=this._nodes.getCacheKey(this.scene,this.lightsNode)),this.camera.isArrayCamera&&(e=ks(e,this.camera.cameras.length)),this.object.receiveShadow&&(e=ks(e,1)),e=ks(e,this.renderer.contextNode.id,this.renderer.contextNode.version),e}getCacheKey(){return this.getMaterialCacheKey()+this.getDynamicCacheKey()}dispose(){this.material.removeEventListener("dispose",this.onMaterialDispose),this.geometry.removeEventListener("dispose",this.onGeometryDispose),this.onDispose()}}const xy=[];class Ty{constructor(e,t,r,s,i,n){this.renderer=e,this.nodes=t,this.geometries=r,this.pipelines=s,this.bindings=i,this.info=n,this.chainMaps={}}get(e,t,r,s,i,n,a,o){const u=this.getChainMap(o);xy[0]=e,xy[1]=t,xy[2]=n,xy[3]=i;let l=u.get(xy);return void 0===l?(l=this.createRenderObject(this.nodes,this.geometries,this.renderer,e,t,r,s,i,n,a,o),u.set(xy,l)):(l.camera=s,l.updateClipping(a),l.needsGeometryUpdate&&l.setGeometry(e.geometry),(l.version!==t.version||l.needsUpdate)&&(l.initialCacheKey!==l.getCacheKey()?(l.dispose(),l=this.get(e,t,r,s,i,n,a,o)):l.version=t.version)),xy[0]=null,xy[1]=null,xy[2]=null,xy[3]=null,l}getChainMap(e="default"){return this.chainMaps[e]||(this.chainMaps[e]=new fy)}dispose(){this.chainMaps={}}createRenderObject(e,t,r,s,i,n,a,o,u,l,d){const c=this.getChainMap(d),h=new by(e,t,r,s,i,n,a,o,u,l);return h.onDispose=()=>{this.pipelines.delete(h),this.bindings.deleteForRender(h),this.nodes.delete(h),c.delete(h.getChainArray())},h}}class _y{constructor(){this.data=new WeakMap}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}delete(e){let t=null;return this.data.has(e)&&(t=this.data.get(e),this.data.delete(e)),t}has(e){return this.data.has(e)}dispose(){this.data=new WeakMap}}const vy=1,Ny=2,Sy=3,Ry=4,Ey=16;class Ay extends _y{constructor(e){super(),this.backend=e}delete(e){const t=super.delete(e);return null!==t&&this.backend.destroyAttribute(e),t}update(e,t){const r=this.get(e);if(void 0===r.version)t===vy?this.backend.createAttribute(e):t===Ny?this.backend.createIndexAttribute(e):t===Sy?this.backend.createStorageAttribute(e):t===Ry&&this.backend.createIndirectStorageAttribute(e),r.version=this._getBufferAttribute(e).version;else{const t=this._getBufferAttribute(e);(r.version=65535?Ie:Oe)(t,1);return i.version=wy(e),i.__id=Cy(e),i}class By extends _y{constructor(e,t){super(),this.attributes=e,this.info=t,this.wireframes=new WeakMap,this.attributeCall=new WeakMap,this._geometryDisposeListeners=new Map}has(e){const t=e.geometry;return super.has(t)&&!0===this.get(t).initialized}updateForRender(e){!1===this.has(e)&&this.initGeometry(e),this.updateAttributes(e)}initGeometry(e){const t=e.geometry;this.get(t).initialized=!0,this.info.memory.geometries++;const r=()=>{this.info.memory.geometries--;const s=t.index,i=e.getAttributes();null!==s&&this.attributes.delete(s);for(const e of i)this.attributes.delete(e);const n=this.wireframes.get(t);void 0!==n&&this.attributes.delete(n),t.removeEventListener("dispose",r),this._geometryDisposeListeners.delete(t)};t.addEventListener("dispose",r),this._geometryDisposeListeners.set(t,r)}updateAttributes(e){const t=e.getAttributes();for(const e of t)e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute?this.updateAttribute(e,Sy):this.updateAttribute(e,vy);const r=this.getIndex(e);null!==r&&this.updateAttribute(r,Ny);const s=e.geometry.indirect;null!==s&&this.updateAttribute(s,Ry)}updateAttribute(e,t){const r=this.info.render.calls;e.isInterleavedBufferAttribute?void 0===this.attributeCall.get(e)?(this.attributes.update(e,t),this.attributeCall.set(e,r)):this.attributeCall.get(e.data)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e.data,r),this.attributeCall.set(e,r)):this.attributeCall.get(e)!==r&&(this.attributes.update(e,t),this.attributeCall.set(e,r))}getIndirect(e){return e.geometry.indirect}getIndirectOffset(e){return e.geometry.indirectOffset}getIndex(e){const{geometry:t,material:r}=e;let s=t.index;if(!0===r.wireframe){const e=this.wireframes;let r=e.get(t);void 0===r?(r=My(t),e.set(t,r)):r.version===wy(t)&&r.__id===Cy(t)||(this.attributes.delete(r),r=My(t),e.set(t,r)),s=r}return s}dispose(){for(const[e,t]of this._geometryDisposeListeners.entries())e.removeEventListener("dispose",t);this._geometryDisposeListeners.clear()}}class Fy{constructor(){this.autoReset=!0,this.frame=0,this.calls=0,this.render={calls:0,frameCalls:0,drawCalls:0,triangles:0,points:0,lines:0,timestamp:0},this.compute={calls:0,frameCalls:0,timestamp:0},this.memory={geometries:0,textures:0}}update(e,t,r){this.render.drawCalls++,e.isMesh||e.isSprite?this.render.triangles+=r*(t/3):e.isPoints?this.render.points+=r*t:e.isLineSegments?this.render.lines+=r*(t/2):e.isLine?this.render.lines+=r*(t-1):o("WebGPUInfo: Unknown object type.")}reset(){this.render.drawCalls=0,this.render.frameCalls=0,this.compute.frameCalls=0,this.render.triangles=0,this.render.points=0,this.render.lines=0}dispose(){this.reset(),this.calls=0,this.render.calls=0,this.compute.calls=0,this.render.timestamp=0,this.compute.timestamp=0,this.memory.geometries=0,this.memory.textures=0}}class Ly{constructor(e){this.cacheKey=e,this.usedTimes=0}}class Py extends Ly{constructor(e,t,r){super(e),this.vertexProgram=t,this.fragmentProgram=r}}class Dy extends Ly{constructor(e,t){super(e),this.computeProgram=t,this.isComputePipeline=!0}}let Uy=0;class Iy{constructor(e,t,r,s=null,i=null){this.id=Uy++,this.code=e,this.stage=t,this.name=r,this.transforms=s,this.attributes=i,this.usedTimes=0}}class Oy extends _y{constructor(e,t){super(),this.backend=e,this.nodes=t,this.bindings=null,this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}getForCompute(e,t){const{backend:r}=this,s=this.get(e);if(this._needsComputeUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.computeProgram.usedTimes--);const n=this.nodes.getForCompute(e);let a=this.programs.compute.get(n.computeShader);void 0===a&&(i&&0===i.computeProgram.usedTimes&&this._releaseProgram(i.computeProgram),a=new Iy(n.computeShader,"compute",e.name,n.transforms,n.nodeAttributes),this.programs.compute.set(n.computeShader,a),r.createProgram(a));const o=this._getComputeCacheKey(e,a);let u=this.caches.get(o);void 0===u&&(i&&0===i.usedTimes&&this._releasePipeline(i),u=this._getComputePipeline(e,a,o,t)),u.usedTimes++,a.usedTimes++,s.version=e.version,s.pipeline=u}return s.pipeline}getForRender(e,t=null){const{backend:r}=this,s=this.get(e);if(this._needsRenderUpdate(e)){const i=s.pipeline;i&&(i.usedTimes--,i.vertexProgram.usedTimes--,i.fragmentProgram.usedTimes--);const n=e.getNodeBuilderState(),a=e.material?e.material.name:"";let o=this.programs.vertex.get(n.vertexShader);void 0===o&&(i&&0===i.vertexProgram.usedTimes&&this._releaseProgram(i.vertexProgram),o=new Iy(n.vertexShader,"vertex",a),this.programs.vertex.set(n.vertexShader,o),r.createProgram(o));let u=this.programs.fragment.get(n.fragmentShader);void 0===u&&(i&&0===i.fragmentProgram.usedTimes&&this._releaseProgram(i.fragmentProgram),u=new Iy(n.fragmentShader,"fragment",a),this.programs.fragment.set(n.fragmentShader,u),r.createProgram(u));const l=this._getRenderCacheKey(e,o,u);let d=this.caches.get(l);void 0===d?(i&&0===i.usedTimes&&this._releasePipeline(i),d=this._getRenderPipeline(e,o,u,l,t)):e.pipeline=d,d.usedTimes++,o.usedTimes++,u.usedTimes++,s.pipeline=d}return s.pipeline}isReady(e){const t=this.get(e).pipeline;if(void 0===t)return!1;const r=this.backend.get(t);return void 0!==r.pipeline&&null!==r.pipeline}delete(e){const t=this.get(e).pipeline;return t&&(t.usedTimes--,0===t.usedTimes&&this._releasePipeline(t),t.isComputePipeline?(t.computeProgram.usedTimes--,0===t.computeProgram.usedTimes&&this._releaseProgram(t.computeProgram)):(t.fragmentProgram.usedTimes--,t.vertexProgram.usedTimes--,0===t.vertexProgram.usedTimes&&this._releaseProgram(t.vertexProgram),0===t.fragmentProgram.usedTimes&&this._releaseProgram(t.fragmentProgram))),super.delete(e)}dispose(){super.dispose(),this.caches=new Map,this.programs={vertex:new Map,fragment:new Map,compute:new Map}}updateForRender(e){this.getForRender(e)}_getComputePipeline(e,t,r,s){r=r||this._getComputeCacheKey(e,t);let i=this.caches.get(r);return void 0===i&&(i=new Dy(r,t),this.caches.set(r,i),this.backend.createComputePipeline(i,s)),i}_getRenderPipeline(e,t,r,s,i){s=s||this._getRenderCacheKey(e,t,r);let n=this.caches.get(s);return void 0===n&&(n=new Py(s,t,r),this.caches.set(s,n),e.pipeline=n,this.backend.createRenderPipeline(e,i)),n}_getComputeCacheKey(e,t){return e.id+","+t.id}_getRenderCacheKey(e,t,r){return t.id+","+r.id+","+this.backend.getRenderCacheKey(e)}_releasePipeline(e){this.caches.delete(e.cacheKey)}_releaseProgram(e){const t=e.code,r=e.stage;this.programs[r].delete(t)}_needsComputeUpdate(e){const t=this.get(e);return void 0===t.pipeline||t.version!==e.version}_needsRenderUpdate(e){return void 0===this.get(e).pipeline||this.backend.needsRenderUpdate(e)}}class Vy extends _y{constructor(e,t,r,s,i,n){super(),this.backend=e,this.textures=r,this.pipelines=i,this.attributes=s,this.nodes=t,this.info=n,this.pipelines.bindings=this}getForRender(e){const t=e.getBindings();for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}getForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t){const r=this.get(e);void 0===r.bindGroup&&(this._init(e),this.backend.createBindings(e,t,0),r.bindGroup=e)}return t}updateForCompute(e){this._updateBindings(this.getForCompute(e))}updateForRender(e){this._updateBindings(this.getForRender(e))}deleteForCompute(e){const t=this.nodes.getForCompute(e).bindings;for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}deleteForRender(e){const t=e.getBindings();for(const e of t)this.backend.deleteBindGroupData(e),this.delete(e)}_updateBindings(e){for(const t of e)this._update(t,e)}_init(e){for(const t of e.bindings)if(t.isSampledTexture)this.textures.updateTexture(t.texture);else if(t.isSampler)this.textures.updateSampler(t.texture);else if(t.isStorageBuffer){const e=t.attribute,r=e.isIndirectStorageBufferAttribute?Ry:Sy;this.attributes.update(e,r)}}_update(e,t){const{backend:r}=this;let s=!1,i=!0,n=0,a=0;for(const t of e.bindings){if(!1!==this.nodes.updateGroup(t)){if(t.isStorageBuffer){const e=t.attribute,i=e.isIndirectStorageBufferAttribute?Ry:Sy,n=r.get(t);this.attributes.update(e,i),n.attribute!==e&&(n.attribute=e,s=!0)}if(t.isUniformBuffer){t.update()&&r.updateBinding(t)}else if(t.isSampledTexture){const o=t.update(),u=t.texture,l=this.textures.get(u);o&&(this.textures.updateTexture(u),t.generation!==l.generation&&(t.generation=l.generation,s=!0),l.bindGroups.add(e));if(void 0!==r.get(u).externalTexture||l.isDefaultTexture?i=!1:(n=10*n+u.id,a+=u.version),!0===u.isStorageTexture&&!0===u.mipmapsAutoUpdate){const e=this.get(u);!0===t.store?e.needsMipmap=!0:this.textures.needsMipmaps(u)&&!0===e.needsMipmap&&(this.backend.generateMipmaps(u),e.needsMipmap=!1)}}else if(t.isSampler){if(t.update()){const e=this.textures.updateSampler(t.texture);t.samplerKey!==e&&(t.samplerKey=e,s=!0)}}t.isBuffer&&t.updateRanges.length>0&&t.clearUpdateRanges()}}!0===s&&this.backend.updateBindings(e,t,i?n:0,a)}}function ky(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?e.z-t.z:e.id-t.id}function Gy(e,t){return e.groupOrder!==t.groupOrder?e.groupOrder-t.groupOrder:e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function $y(e){return(e.transmission>0||e.transmissionNode&&e.transmissionNode.isNode)&&e.side===P&&!1===e.forceSinglePass}class zy{constructor(e,t,r){this.renderItems=[],this.renderItemsIndex=0,this.opaque=[],this.transparentDoublePass=[],this.transparent=[],this.bundles=[],this.lightsNode=e.getNode(t,r),this.lightsArray=[],this.scene=t,this.camera=r,this.occlusionQueryCount=0}begin(){return this.renderItemsIndex=0,this.opaque.length=0,this.transparentDoublePass.length=0,this.transparent.length=0,this.bundles.length=0,this.lightsArray.length=0,this.occlusionQueryCount=0,this}getNextRenderItem(e,t,r,s,i,n,a){let o=this.renderItems[this.renderItemsIndex];return void 0===o?(o={id:e.id,object:e,geometry:t,material:r,groupOrder:s,renderOrder:e.renderOrder,z:i,group:n,clippingContext:a},this.renderItems[this.renderItemsIndex]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.groupOrder=s,o.renderOrder=e.renderOrder,o.z=i,o.group=n,o.clippingContext=a),this.renderItemsIndex++,o}push(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===e.occlusionTest&&this.occlusionQueryCount++,!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.push(o),this.transparent.push(o)):this.opaque.push(o)}unshift(e,t,r,s,i,n,a){const o=this.getNextRenderItem(e,t,r,s,i,n,a);!0===r.transparent||r.transmission>0||r.transmissionNode&&r.transmissionNode.isNode||r.backdropNode&&r.backdropNode.isNode?($y(r)&&this.transparentDoublePass.unshift(o),this.transparent.unshift(o)):this.opaque.unshift(o)}pushBundle(e){this.bundles.push(e)}pushLight(e){this.lightsArray.push(e)}sort(e,t){this.opaque.length>1&&this.opaque.sort(e||ky),this.transparentDoublePass.length>1&&this.transparentDoublePass.sort(t||Gy),this.transparent.length>1&&this.transparent.sort(t||Gy)}finish(){this.lightsNode.setLights(this.lightsArray);for(let e=this.renderItemsIndex,t=this.renderItems.length;e>t,u=a.height>>t;let l=e.depthTexture||i[t];const d=!0===e.depthBuffer||!0===e.stencilBuffer;let c=!1;void 0===l&&d&&(l=new J,l.format=e.stencilBuffer?Ve:ke,l.type=e.stencilBuffer?Ge:S,l.image.width=o,l.image.height=u,l.image.depth=a.depth,l.renderTarget=e,l.isArrayTexture=!0===e.multiview&&a.depth>1,i[t]=l),r.width===a.width&&a.height===r.height||(c=!0,l&&(l.needsUpdate=!0,l.image.width=o,l.image.height=u,l.image.depth=l.isArrayTexture?l.image.depth:1)),r.width=a.width,r.height=a.height,r.textures=n,r.depthTexture=l||null,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,r.renderTarget=e,r.sampleCount!==s&&(c=!0,l&&(l.needsUpdate=!0),r.sampleCount=s);const h={sampleCount:s};if(!0!==e.isXRRenderTarget){for(let e=0;e{this._destroyRenderTarget(e)},e.addEventListener("dispose",r.onDispose))}updateTexture(e,t={}){const r=this.get(e);if(!0===r.initialized&&r.version===e.version)return;const s=e.isRenderTargetTexture||e.isDepthTexture||e.isFramebufferTexture,i=this.backend;if(s&&!0===r.initialized&&i.destroyTexture(e),e.isFramebufferTexture){const t=this.renderer.getRenderTarget();e.type=t?t.texture.type:$e}const{width:n,height:a,depth:o}=this.getSize(e);if(t.width=n,t.height=a,t.depth=o,t.needsMipmaps=this.needsMipmaps(e),t.levels=t.needsMipmaps?this.getMipLevels(e,n,a):1,e.isCubeTexture&&e.mipmaps.length>0&&t.levels++,s||!0===e.isStorageTexture||!0===e.isExternalTexture)i.createTexture(e,t),r.generation=e.version;else if(e.version>0){const s=e.image;if(void 0===s)d("Renderer: Texture marked for update but image is undefined.");else if(!1===s.complete)d("Renderer: Texture marked for update but image is incomplete.");else{if(e.images){const r=[];for(const t of e.images)r.push(t);t.images=r}else t.image=s;void 0!==r.isDefaultTexture&&!0!==r.isDefaultTexture||(i.createTexture(e,t),r.isDefaultTexture=!1,r.generation=e.version),!0===e.source.dataReady&&i.updateTexture(e,t);const n=!0===e.isStorageTexture&&!1===e.mipmapsAutoUpdate;t.needsMipmaps&&0===e.mipmaps.length&&!n&&i.generateMipmaps(e),e.onUpdate&&e.onUpdate(e)}}else i.createDefaultTexture(e),r.isDefaultTexture=!0,r.generation=e.version;!0!==r.initialized&&(r.initialized=!0,r.generation=e.version,r.bindGroups=new Set,this.info.memory.textures++,e.isVideoTexture&&!0===p.enabled&&p.getTransfer(e.colorSpace)!==g&&d("WebGPURenderer: Video textures must use a color space with a sRGB transfer function, e.g. SRGBColorSpace."),r.onDispose=()=>{this._destroyTexture(e)},e.addEventListener("dispose",r.onDispose)),r.version=e.version}updateSampler(e){return this.backend.updateSampler(e)}getSize(e,t=Qy){let r=e.images?e.images[0]:e.image;return r?(void 0!==r.image&&(r=r.image),"undefined"!=typeof HTMLVideoElement&&r instanceof HTMLVideoElement?(t.width=r.videoWidth||1,t.height=r.videoHeight||1,t.depth=1):"undefined"!=typeof VideoFrame&&r instanceof VideoFrame?(t.width=r.displayWidth||1,t.height=r.displayHeight||1,t.depth=1):(t.width=r.width||1,t.height=r.height||1,t.depth=e.isCubeTexture?6:r.depth||1)):t.width=t.height=t.depth=1,t}getMipLevels(e,t,r){let s;return s=e.mipmaps.length>0?e.mipmaps.length:!0===e.isCompressedTexture?1:Math.floor(Math.log2(Math.max(t,r)))+1,s}needsMipmaps(e){return!0===e.generateMipmaps||e.mipmaps.length>0}_destroyRenderTarget(e){if(!0===this.has(e)){const t=this.get(e),r=t.textures,s=t.depthTexture;e.removeEventListener("dispose",t.onDispose);for(let e=0;e=2)for(let r=0;r{if(this._currentNode=t,!t.isVarNode||!t.isIntent(e)||!0===t.isAssign(e))if("setup"===s)t.build(e);else if("analyze"===s)t.build(e,this);else if("generate"===s){const r=e.getDataFromNode(t,"any").stages,s=r&&r[e.shaderStage];if(t.isVarNode&&s&&1===s.length&&s[0]&&s[0].isStackNode)return;t.build(e,"void")}},n=[...this.nodes];for(const e of n)i(e);this._currentNode=null;const a=this.nodes.filter(e=>-1===n.indexOf(e));for(const e of a)i(e);let o;return o=this.hasOutput(e)?this.outputNode.build(e,...t):super.build(e,...t),cn(r),e.removeActiveStack(this),o}}const tb=nn(eb).setParameterLength(0,1);class rb extends di{static get type(){return"StructTypeNode"}constructor(e,t=null){var r;super("struct"),this.membersLayout=(r=e,Object.entries(r).map(([e,t])=>"string"==typeof t?{name:e,type:t,atomic:!1}:{name:e,type:t.type,atomic:t.atomic||!1})),this.name=t,this.isStructLayoutNode=!0}getLength(){const e=Float32Array.BYTES_PER_ELEMENT;let t=1,r=0;for(const s of this.membersLayout){const i=s.type,n=qs(i),a=js(i)/e;t=Math.max(t,a);const o=r%t%a;0!==o&&(r+=a-o),r+=n}return Math.ceil(r/t)*t}getMemberType(e,t){const r=this.membersLayout.find(e=>e.name===t);return r?r.type:"void"}getNodeType(e){return e.getStructTypeFromNode(this,this.membersLayout,this.name).name}setup(e){e.getStructTypeFromNode(this,this.membersLayout,this.name),e.addInclude(this)}generate(e){return this.getNodeType(e)}}class sb extends di{static get type(){return"StructNode"}constructor(e,t){super("vec3"),this.structTypeNode=e,this.values=t,this.isStructNode=!0}getNodeType(e){return this.structTypeNode.getNodeType(e)}getMemberType(e,t){return this.structTypeNode.getMemberType(e,t)}_getChildren(){const e=super._getChildren(),t=e.find(e=>e.childNode===this.structTypeNode);return e.splice(e.indexOf(t),1),e.push(t),e}generate(e){const t=e.getVarFromNode(this),r=t.type,s=e.getPropertyName(t);return e.addLineFlowCode(`${s} = ${e.generateStruct(r,this.structTypeNode.membersLayout,this.values)}`,this),t.name}}class ib extends di{static get type(){return"OutputStructNode"}constructor(...e){super(),this.members=e,this.isOutputStructNode=!0}getNodeType(){return"OutputType"}generate(e){const t=e.getDataFromNode(this);if(void 0===t.membersLayout){const r=this.members,s=[];for(let t=0;tnew hb(e,"uint","float"),mb={};class fb extends io{static get type(){return"BitcountNode"}constructor(e,t){super(e,t),this.isBitcountNode=!0}_resolveElementType(e,t,r){"int"===r?t.assign(pb(e,"uint")):t.assign(e)}_returnDataNode(e){switch(e){case"uint":return bn;case"int":return yn;case"uvec2":return vn;case"uvec3":return En;case"uvec4":return Mn;case"ivec2":return _n;case"ivec3":return Rn;case"ivec4":return Cn}}_createTrailingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t);const i=fn(s.bitAnd(Do(s))),n=gb(i).shiftRight(23).sub(127);return r(n)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createLeadingZerosBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{pn(e.equal(bn(0)),()=>bn(32));const s=bn(0),i=bn(0);return this._resolveElementType(e,s,t),pn(s.shiftRight(16).equal(0),()=>{i.addAssign(16),s.shiftLeftAssign(16)}),pn(s.shiftRight(24).equal(0),()=>{i.addAssign(8),s.shiftLeftAssign(8)}),pn(s.shiftRight(28).equal(0),()=>{i.addAssign(4),s.shiftLeftAssign(4)}),pn(s.shiftRight(30).equal(0),()=>{i.addAssign(2),s.shiftLeftAssign(2)}),pn(s.shiftRight(31).equal(0),()=>{i.addAssign(1)}),r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createOneBitsBaseLayout(e,t){const r=this._returnDataNode(t);return dn(([e])=>{const s=bn(0);this._resolveElementType(e,s,t),s.assign(s.sub(s.shiftRight(bn(1)).bitAnd(bn(1431655765)))),s.assign(s.bitAnd(bn(858993459)).add(s.shiftRight(bn(2)).bitAnd(bn(858993459))));const i=s.add(s.shiftRight(bn(4))).bitAnd(bn(252645135)).mul(bn(16843009)).shiftRight(bn(24));return r(i)}).setLayout({name:e,type:t,inputs:[{name:"value",type:t}]})}_createMainLayout(e,t,r,s){const i=this._returnDataNode(t);return dn(([e])=>{if(1===r)return i(s(e));{const t=i(0),n=["x","y","z","w"];for(let i=0;id(r))()}}fb.COUNT_TRAILING_ZEROS="countTrailingZeros",fb.COUNT_LEADING_ZEROS="countLeadingZeros",fb.COUNT_ONE_BITS="countOneBits";const yb=on(fb,fb.COUNT_TRAILING_ZEROS).setParameterLength(1),bb=on(fb,fb.COUNT_LEADING_ZEROS).setParameterLength(1),xb=on(fb,fb.COUNT_ONE_BITS).setParameterLength(1),Tb=dn(([e])=>{const t=e.toUint().mul(747796405).add(2891336453),r=t.shiftRight(t.shiftRight(28).add(4)).bitXor(t).mul(277803737);return r.shiftRight(22).bitXor(r).toFloat().mul(1/2**32)}),_b=(e,t)=>eu(Pa(4,e.mul(La(1,e))),t);class vb extends pi{static get type(){return"PackFloatNode"}constructor(e,t){super(),this.vectorNode=t,this.encoding=e,this.isPackFloatNode=!0}getNodeType(){return"uint"}generate(e){const t=this.vectorNode.getNodeType(e);return`${e.getFloatPackingMethod(this.encoding)}(${this.vectorNode.build(e,t)})`}}const Nb=on(vb,"snorm").setParameterLength(1),Sb=on(vb,"unorm").setParameterLength(1),Rb=on(vb,"float16").setParameterLength(1);class Eb extends pi{static get type(){return"UnpackFloatNode"}constructor(e,t){super(),this.uintNode=t,this.encoding=e,this.isUnpackFloatNode=!0}getNodeType(){return"vec2"}generate(e){const t=this.uintNode.getNodeType(e);return`${e.getFloatUnpackingMethod(this.encoding)}(${this.uintNode.build(e,t)})`}}const Ab=on(Eb,"snorm").setParameterLength(1),wb=on(Eb,"unorm").setParameterLength(1),Cb=on(Eb,"float16").setParameterLength(1),Mb=dn(([e])=>e.fract().sub(.5).abs()).setLayout({name:"tri",type:"float",inputs:[{name:"x",type:"float"}]}),Bb=dn(([e])=>Sn(Mb(e.z.add(Mb(e.y.mul(1)))),Mb(e.z.add(Mb(e.x.mul(1)))),Mb(e.y.add(Mb(e.x.mul(1)))))).setLayout({name:"tri3",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),Fb=dn(([e,t,r])=>{const s=Sn(e).toVar(),i=fn(1.4).toVar(),n=fn(0).toVar(),a=Sn(s).toVar();return Ep({start:fn(0),end:fn(3),type:"float",condition:"<="},()=>{const e=Sn(Bb(a.mul(2))).toVar();s.addAssign(e.add(r.mul(fn(.1).mul(t)))),a.mulAssign(1.8),i.mulAssign(1.5),s.mulAssign(1.2);const o=fn(Mb(s.z.add(Mb(s.x.add(Mb(s.y)))))).toVar();n.addAssign(o.div(i)),a.addAssign(.14)}),n}).setLayout({name:"triNoise3D",type:"float",inputs:[{name:"position",type:"vec3"},{name:"speed",type:"float"},{name:"time",type:"float"}]});class Lb extends di{static get type(){return"FunctionOverloadingNode"}constructor(e=[],...t){super(),this.functionNodes=e,this.parametersNodes=t,this._candidateFn=null,this.global=!0}getNodeType(e){return this.getCandidateFn(e).shaderNode.layout.type}getCandidateFn(e){const t=this.parametersNodes;let r=this._candidateFn;if(null===r){let s=null,i=-1;for(const r of this.functionNodes){const n=r.shaderNode.layout;if(null===n)throw new Error("FunctionOverloadingNode: FunctionNode must be a layout.");const a=n.inputs;if(t.length===a.length){let n=0;for(let r=0;ri&&(s=r,i=n)}}this._candidateFn=r=s}return r}setup(e){return this.getCandidateFn(e)(...this.parametersNodes)}}const Pb=nn(Lb),Db=e=>(...t)=>Pb(e,...t),Ub=Na(0).setGroup(Ta).onRenderUpdate(e=>e.time),Ib=Na(0).setGroup(Ta).onRenderUpdate(e=>e.deltaTime),Ob=Na(0,"uint").setGroup(Ta).onRenderUpdate(e=>e.frameId);const Vb=dn(([e,t,r=Tn(.5)])=>ey(e.sub(r),t).add(r)),kb=dn(([e,t,r=Tn(.5)])=>{const s=e.sub(r),i=s.dot(s),n=i.mul(i).mul(t);return e.add(s.mul(n))}),Gb=dn(({position:e=null,horizontal:t=!0,vertical:r=!1})=>{let s;null!==e?(s=Id.toVar(),s[3][0]=e.x,s[3][1]=e.y,s[3][2]=e.z):s=Id;const i=vd.mul(s);return Yi(t)&&(i[0][0]=Id[0].length(),i[0][1]=0,i[0][2]=0),Yi(r)&&(i[1][0]=0,i[1][1]=Id[1].length(),i[1][2]=0),i[2][0]=0,i[2][1]=0,i[2][2]=1,Td.mul(i).mul(Qd)}),$b=dn(([e=null])=>{const t=rg();return rg(qp(e)).sub(t).lessThan(0).select(Kl,e)}),zb=dn(([e,t=Al(),r=fn(0)])=>{const s=e.x,i=e.y,n=r.mod(s.mul(i)).floor(),a=n.mod(s),o=i.sub(n.add(1).div(s).ceil()),u=e.reciprocal(),l=Tn(a,o);return t.add(l).mul(u)}),Wb=dn(([e,t=null,r=null,s=fn(1),i=Qd,n=oc])=>{let a=n.abs().normalize();a=a.div(a.dot(Sn(1)));const o=i.yz.mul(s),u=i.zx.mul(s),l=i.xy.mul(s),d=e.value,c=null!==t?t.value:d,h=null!==r?r.value:d,p=Ul(d,o).mul(a.x),g=Ul(c,u).mul(a.y),m=Ul(h,l).mul(a.z);return Fa(p,g,m)}),Hb=new Xe,qb=new r,jb=new r,Xb=new r,Kb=new a,Qb=new r(0,0,-1),Yb=new s,Zb=new r,Jb=new r,ex=new s,tx=new t,rx=new ae,sx=Kl.flipX();rx.depthTexture=new J(1,1);let ix=!1;class nx extends Pl{static get type(){return"ReflectorNode"}constructor(e={}){super(e.defaultTexture||rx.texture,sx),this._reflectorBaseNode=e.reflector||new ax(this,e),this._depthNode=null,this.setUpdateMatrix(!1)}get reflector(){return this._reflectorBaseNode}get target(){return this._reflectorBaseNode.target}getDepthNode(){if(null===this._depthNode){if(!0!==this._reflectorBaseNode.depth)throw new Error("THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ");this._depthNode=new nx({defaultTexture:rx.depthTexture,reflector:this._reflectorBaseNode})}return this._depthNode}setup(e){return e.object.isQuadMesh||this._reflectorBaseNode.build(e),super.setup(e)}clone(){const e=new this.constructor(this.reflectorNode);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e._reflectorBaseNode=this._reflectorBaseNode,e}dispose(){super.dispose(),this._reflectorBaseNode.dispose()}}class ax extends di{static get type(){return"ReflectorBaseNode"}constructor(e,t={}){super();const{target:r=new Ke,resolutionScale:s=1,generateMipmaps:i=!1,bounces:n=!0,depth:a=!1,samples:o=0}=t;this.textureNode=e,this.target=r,this.resolutionScale=s,void 0!==t.resolution&&(v('ReflectorNode: The "resolution" parameter has been renamed to "resolutionScale".'),this.resolutionScale=t.resolution),this.generateMipmaps=i,this.bounces=n,this.depth=a,this.samples=o,this.updateBeforeType=n?ti.RENDER:ti.FRAME,this.virtualCameras=new WeakMap,this.renderTargets=new Map,this.forceUpdate=!1,this.hasOutput=!1}_updateResolution(e,t){const r=this.resolutionScale;t.getDrawingBufferSize(tx),e.setSize(Math.round(tx.width*r),Math.round(tx.height*r))}setup(e){return this._updateResolution(rx,e.renderer),super.setup(e)}dispose(){super.dispose();for(const e of this.renderTargets.values())e.dispose()}getVirtualCamera(e){let t=this.virtualCameras.get(e);return void 0===t&&(t=e.clone(),this.virtualCameras.set(e,t)),t}getRenderTarget(e){let t=this.renderTargets.get(e);return void 0===t&&(t=new ae(0,0,{type:_e,samples:this.samples}),!0===this.generateMipmaps&&(t.texture.minFilter=Qe,t.texture.generateMipmaps=!0),!0===this.depth&&(t.depthTexture=new J),this.renderTargets.set(e,t)),t}updateBefore(e){if(!1===this.bounces&&ix)return!1;ix=!0;const{scene:t,camera:r,renderer:s,material:i}=e,{target:n}=this,a=this.getVirtualCamera(r),o=this.getRenderTarget(a);s.getDrawingBufferSize(tx),this._updateResolution(o,s),jb.setFromMatrixPosition(n.matrixWorld),Xb.setFromMatrixPosition(r.matrixWorld),Kb.extractRotation(n.matrixWorld),qb.set(0,0,1),qb.applyMatrix4(Kb),Zb.subVectors(jb,Xb);let u=!1;if(!0===Zb.dot(qb)>0&&!1===this.forceUpdate){if(!1===this.hasOutput)return void(ix=!1);u=!0}Zb.reflect(qb).negate(),Zb.add(jb),Kb.extractRotation(r.matrixWorld),Qb.set(0,0,-1),Qb.applyMatrix4(Kb),Qb.add(Xb),Jb.subVectors(jb,Qb),Jb.reflect(qb).negate(),Jb.add(jb),a.coordinateSystem=r.coordinateSystem,a.position.copy(Zb),a.up.set(0,1,0),a.up.applyMatrix4(Kb),a.up.reflect(qb),a.lookAt(Jb),a.near=r.near,a.far=r.far,a.updateMatrixWorld(),a.projectionMatrix.copy(r.projectionMatrix),Hb.setFromNormalAndCoplanarPoint(qb,jb),Hb.applyMatrix4(a.matrixWorldInverse),Yb.set(Hb.normal.x,Hb.normal.y,Hb.normal.z,Hb.constant);const l=a.projectionMatrix;ex.x=(Math.sign(Yb.x)+l.elements[8])/l.elements[0],ex.y=(Math.sign(Yb.y)+l.elements[9])/l.elements[5],ex.z=-1,ex.w=(1+l.elements[10])/l.elements[14],Yb.multiplyScalar(1/Yb.dot(ex));l.elements[2]=Yb.x,l.elements[6]=Yb.y,l.elements[10]=s.coordinateSystem===h?Yb.z-0:Yb.z+1-0,l.elements[14]=Yb.w,this.textureNode.value=o.texture,!0===this.depth&&(this.textureNode.getDepthNode().value=o.depthTexture),i.visible=!1;const d=s.getRenderTarget(),c=s.getMRT(),p=s.autoClear;s.setMRT(null),s.setRenderTarget(o),s.autoClear=!0;const g=t.name;t.name=(t.name||"Scene")+" [ Reflector ]",u?(s.clear(),this.hasOutput=!1):(s.render(t,a),this.hasOutput=!0),t.name=g,s.setMRT(c),s.setRenderTarget(d),s.autoClear=p,i.visible=!0,ix=!1,this.forceUpdate=!1}get resolution(){return v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale}set resolution(e){v('ReflectorNode: The "resolution" property has been renamed to "resolutionScale".'),this.resolutionScale=e}}const ox=new Se(-1,1,1,-1,0,1);class ux extends Ne{constructor(e=!1){super();const t=!1===e?[0,-1,0,1,2,1]:[0,2,0,0,2,0];this.setAttribute("position",new Ye([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Ye(t,2))}}const lx=new ux;class dx extends ue{constructor(e=null){super(lx,e),this.camera=ox,this.isQuadMesh=!0}async renderAsync(e){v('QuadMesh: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await e.init(),e.render(this,ox)}render(e){e.render(this,ox)}}const cx=new t;class hx extends Pl{static get type(){return"RTTNode"}constructor(e,t=null,r=null,s={type:_e}){const i=new ae(t,r,s);super(i.texture,Al()),this.isRTTNode=!0,this.node=e,this.width=t,this.height=r,this.pixelRatio=1,this.renderTarget=i,this.textureNeedsUpdate=!0,this.autoUpdate=!0,this._rttNode=null,this._quadMesh=new dx(new yg),this.updateBeforeType=ti.RENDER}get autoResize(){return null===this.width}setup(e){return this._rttNode=this.node.context(e.getSharedContext()),this._quadMesh.material.name="RTT",this._quadMesh.material.needsUpdate=!0,super.setup(e)}setSize(e,t){this.width=e,this.height=t;const r=e*this.pixelRatio,s=t*this.pixelRatio;this.renderTarget.setSize(r,s),this.textureNeedsUpdate=!0}setPixelRatio(e){this.pixelRatio=e,this.setSize(this.width,this.height)}updateBefore({renderer:e}){if(!1===this.textureNeedsUpdate&&!1===this.autoUpdate)return;if(this.textureNeedsUpdate=!1,!0===this.autoResize){const t=e.getPixelRatio(),r=e.getSize(cx),s=Math.floor(r.width*t),i=Math.floor(r.height*t);s===this.renderTarget.width&&i===this.renderTarget.height||(this.renderTarget.setSize(s,i),this.textureNeedsUpdate=!0)}let t="RTT";this.node.name&&(t=this.node.name+" [ "+t+" ]"),this._quadMesh.material.fragmentNode=this._rttNode,this._quadMesh.name=t;const r=e.getRenderTarget();e.setRenderTarget(this.renderTarget),this._quadMesh.render(e),e.setRenderTarget(r)}clone(){const e=new Pl(this.value,this.uvNode,this.levelNode);return e.sampler=this.sampler,e.referenceNode=this,e}}const px=(e,...t)=>new hx(en(e),...t),gx=dn(([e,t,r],s)=>{let i;s.renderer.coordinateSystem===h?(e=Tn(e.x,e.y.oneMinus()).mul(2).sub(1),i=wn(Sn(e,t),1)):i=wn(Sn(e.x,e.y.oneMinus(),t).mul(2).sub(1),1);const n=wn(r.mul(i));return n.xyz.div(n.w)}),mx=dn(([e,t])=>{const r=t.mul(wn(e,1)),s=r.xy.div(r.w).mul(.5).add(.5).toVar();return Tn(s.x,s.y.oneMinus())}),fx=dn(([e,t,r])=>{const s=Cl(Il(t)),i=_n(e.mul(s)).toVar(),n=Il(t,i).toVar(),a=Il(t,i.sub(_n(2,0))).toVar(),o=Il(t,i.sub(_n(1,0))).toVar(),u=Il(t,i.add(_n(1,0))).toVar(),l=Il(t,i.add(_n(2,0))).toVar(),d=Il(t,i.add(_n(0,2))).toVar(),c=Il(t,i.add(_n(0,1))).toVar(),h=Il(t,i.sub(_n(0,1))).toVar(),p=Il(t,i.sub(_n(0,2))).toVar(),g=Fo(La(fn(2).mul(o).sub(a),n)).toVar(),m=Fo(La(fn(2).mul(u).sub(l),n)).toVar(),f=Fo(La(fn(2).mul(c).sub(d),n)).toVar(),y=Fo(La(fn(2).mul(h).sub(p),n)).toVar(),b=gx(e,n,r).toVar(),x=g.lessThan(m).select(b.sub(gx(e.sub(Tn(fn(1).div(s.x),0)),o,r)),b.negate().add(gx(e.add(Tn(fn(1).div(s.x),0)),u,r))),T=f.lessThan(y).select(b.sub(gx(e.add(Tn(0,fn(1).div(s.y))),c,r)),b.negate().add(gx(e.sub(Tn(0,fn(1).div(s.y))),h,r)));return So(Jo(x,T))}),yx=dn(([e])=>Ro(fn(52.9829189).mul(Ro(Zo(e,Tn(.06711056,.00583715)))))).setLayout({name:"interleavedGradientNoise",type:"float",inputs:[{name:"position",type:"vec2"}]}),bx=dn(([e,t,r])=>{const s=fn(2.399963229728653),i=To(fn(e).add(.5).div(fn(t))),n=fn(e).mul(s).add(r);return Tn(Ao(n),Eo(n)).mul(i)}).setLayout({name:"vogelDiskSample",type:"vec2",inputs:[{name:"sampleIndex",type:"int"},{name:"samplesCount",type:"int"},{name:"phi",type:"float"}]});class xx extends di{static get type(){return"SampleNode"}constructor(e,t=null){super(),this.callback=e,this.uvNode=t,this.isSampleNode=!0}setup(){return this.sample(Al())}sample(e){return this.callback(e)}}class Tx extends di{static get type(){return"EventNode"}constructor(e,t){super("void"),this.eventType=e,this.callback=t,e===Tx.OBJECT?this.updateType=ti.OBJECT:e===Tx.MATERIAL?this.updateType=ti.RENDER:e===Tx.BEFORE_OBJECT?this.updateBeforeType=ti.OBJECT:e===Tx.BEFORE_MATERIAL&&(this.updateBeforeType=ti.RENDER)}update(e){this.callback(e)}updateBefore(e){this.callback(e)}}Tx.OBJECT="object",Tx.MATERIAL="material",Tx.BEFORE_OBJECT="beforeObject",Tx.BEFORE_MATERIAL="beforeMaterial";const _x=(e,t)=>new Tx(e,t).toStack();class vx extends j{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageInstancedBufferAttribute=!0}}class Nx extends Ce{constructor(e,t,r=Float32Array){super(ArrayBuffer.isView(e)?e:new r(e*t),t),this.isStorageBufferAttribute=!0}}class Sx extends di{static get type(){return"PointUVNode"}constructor(){super("vec2"),this.isPointUVNode=!0}generate(){return"vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y )"}}const Rx=an(Sx),Ex=new D,Ax=new a,wx=Na(0).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundBlurriness),Cx=Na(1).setGroup(Ta).onRenderUpdate(({scene:e})=>e.backgroundIntensity),Mx=Na(new a).setGroup(Ta).onRenderUpdate(({scene:e})=>{const t=e.background;return null!==t&&t.isTexture&&t.mapping!==Ze?(Ex.copy(e.backgroundRotation),Ex.x*=-1,Ex.y*=-1,Ex.z*=-1,Ax.makeRotationFromEuler(Ex)):Ax.identity(),Ax});class Bx extends Pl{static get type(){return"StorageTextureNode"}constructor(e,t,r=null){super(e,t),this.storeNode=r,this.mipLevel=0,this.isStorageTextureNode=!0,this.access=si.WRITE_ONLY}getInputType(){return"storageTexture"}setup(e){super.setup(e);const t=e.getNodeProperties(this);return t.storeNode=this.storeNode,t}setAccess(e){return this.access=e,this}setMipLevel(e){return this.mipLevel=e,this}generate(e,t){let r;return r=null!==this.storeNode?this.generateStore(e):super.generate(e,t),r}generateSnippet(e,t,r,s,i,n,a,o,u){const l=this.value;return e.generateStorageTextureLoad(l,t,r,s,n,u)}toReadWrite(){return this.setAccess(si.READ_WRITE)}toReadOnly(){return this.setAccess(si.READ_ONLY)}toWriteOnly(){return this.setAccess(si.WRITE_ONLY)}generateStore(e){const t=e.getNodeProperties(this),{uvNode:r,storeNode:s,depthNode:i}=t,n=super.generate(e,"property"),a=r.build(e,!0===this.value.is3DTexture?"uvec3":"uvec2"),o=s.build(e,"vec4"),u=i?i.build(e,"int"):null,l=e.generateTextureStore(e,n,a,u,o);e.addLineFlowCode(l,this)}clone(){const e=super.clone();return e.storeNode=this.storeNode,e.mipLevel=this.mipLevel,e.access=this.access,e}}const Fx=nn(Bx).setParameterLength(1,3),Lx=dn(({texture:e,uv:t})=>{const r=1e-4,s=Sn().toVar();return pn(t.x.lessThan(r),()=>{s.assign(Sn(1,0,0))}).ElseIf(t.y.lessThan(r),()=>{s.assign(Sn(0,1,0))}).ElseIf(t.z.lessThan(r),()=>{s.assign(Sn(0,0,1))}).ElseIf(t.x.greaterThan(.9999),()=>{s.assign(Sn(-1,0,0))}).ElseIf(t.y.greaterThan(.9999),()=>{s.assign(Sn(0,-1,0))}).ElseIf(t.z.greaterThan(.9999),()=>{s.assign(Sn(0,0,-1))}).Else(()=>{const r=.01,i=e.sample(t.add(Sn(-.01,0,0))).r.sub(e.sample(t.add(Sn(r,0,0))).r),n=e.sample(t.add(Sn(0,-.01,0))).r.sub(e.sample(t.add(Sn(0,r,0))).r),a=e.sample(t.add(Sn(0,0,-.01))).r.sub(e.sample(t.add(Sn(0,0,r))).r);s.assign(Sn(i,n,a))}),s.normalize()});class Px extends Pl{static get type(){return"Texture3DNode"}constructor(e,t=null,r=null){super(e,t,r),this.isTexture3DNode=!0}getInputType(){return"texture3D"}getDefaultUV(){return Sn(.5,.5,.5)}setUpdateMatrix(){}generateUV(e,t){return t.build(e,!0===this.sampler?"vec3":"ivec3")}generateOffset(e,t){return t.build(e,"ivec3")}normal(e){return Lx({texture:this,uv:e})}}const Dx=nn(Px).setParameterLength(1,3);class Ux extends Lc{static get type(){return"UserDataNode"}constructor(e,t,r=null){super(e,t,r),this.userData=r}updateReference(e){return this.reference=null!==this.userData?this.userData:e.object.userData,this.reference}}const Ix=new WeakMap;class Ox extends pi{static get type(){return"VelocityNode"}constructor(){super("vec2"),this.projectionMatrix=null,this.updateType=ti.OBJECT,this.updateAfterType=ti.OBJECT,this.previousModelWorldMatrix=Na(new a),this.previousProjectionMatrix=Na(new a).setGroup(Ta),this.previousCameraViewMatrix=Na(new a)}setProjectionMatrix(e){this.projectionMatrix=e}update({frameId:e,camera:t,object:r}){const s=kx(r);this.previousModelWorldMatrix.value.copy(s);const i=Vx(t);i.frameId!==e&&(i.frameId=e,void 0===i.previousProjectionMatrix?(i.previousProjectionMatrix=new a,i.previousCameraViewMatrix=new a,i.currentProjectionMatrix=new a,i.currentCameraViewMatrix=new a,i.previousProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.previousCameraViewMatrix.copy(t.matrixWorldInverse)):(i.previousProjectionMatrix.copy(i.currentProjectionMatrix),i.previousCameraViewMatrix.copy(i.currentCameraViewMatrix)),i.currentProjectionMatrix.copy(this.projectionMatrix||t.projectionMatrix),i.currentCameraViewMatrix.copy(t.matrixWorldInverse),this.previousProjectionMatrix.value.copy(i.previousProjectionMatrix),this.previousCameraViewMatrix.value.copy(i.previousCameraViewMatrix))}updateAfter({object:e}){kx(e).copy(e.matrixWorld)}setup(){const e=null===this.projectionMatrix?Td:Na(this.projectionMatrix),t=this.previousCameraViewMatrix.mul(this.previousModelWorldMatrix),r=e.mul(Wd).mul(Qd),s=this.previousProjectionMatrix.mul(t).mul(Yd),i=r.xy.div(r.w),n=s.xy.div(s.w);return La(i,n)}}function Vx(e){let t=Ix.get(e);return void 0===t&&(t={},Ix.set(e,t)),t}function kx(e,t=0){const r=Vx(e);let s=r[t];return void 0===s&&(r[t]=s=new a,r[t].copy(e.matrixWorld)),s}const Gx=an(Ox),$x=dn(([e])=>qx(e.rgb)),zx=dn(([e,t=fn(1)])=>t.mix(qx(e.rgb),e.rgb)),Wx=dn(([e,t=fn(1)])=>{const r=Fa(e.r,e.g,e.b).div(3),s=e.r.max(e.g.max(e.b)),i=s.sub(r).mul(t).mul(-3);return ou(e.rgb,s,i)}),Hx=dn(([e,t=fn(1)])=>{const r=Sn(.57735,.57735,.57735),s=t.cos();return Sn(e.rgb.mul(s).add(r.cross(e.rgb).mul(t.sin()).add(r.mul(Zo(r,e.rgb).mul(s.oneMinus())))))}),qx=(e,t=Sn(p.getLuminanceCoefficients(new r)))=>Zo(e,t),jx=dn(([e,t=Sn(1),s=Sn(0),i=Sn(1),n=fn(1),a=Sn(p.getLuminanceCoefficients(new r,Ee))])=>{const o=e.rgb.dot(Sn(a)),u=jo(e.rgb.mul(t).add(s),0).toVar(),l=u.pow(i).toVar();return pn(u.r.greaterThan(0),()=>{u.r.assign(l.r)}),pn(u.g.greaterThan(0),()=>{u.g.assign(l.g)}),pn(u.b.greaterThan(0),()=>{u.b.assign(l.b)}),u.assign(o.add(u.sub(o).mul(n))),wn(u.rgb,e.a)}),Xx=dn(([e,t])=>e.mul(t).floor().div(t));let Kx=null;class Qx extends Vp{static get type(){return"ViewportSharedTextureNode"}constructor(e=Kl,t=null){null===Kx&&(Kx=new Y),super(e,t,Kx)}getTextureForReference(){return Kx}updateReference(){return this}}const Yx=nn(Qx).setParameterLength(0,2),Zx=new t;class Jx extends Pl{static get type(){return"PassTextureNode"}constructor(e,t){super(t),this.passNode=e,this.isPassTextureNode=!0,this.setUpdateMatrix(!1)}setup(e){return e.getNodeProperties(this).passNode=this.passNode,super.setup(e)}clone(){return new this.constructor(this.passNode,this.value)}}class eT extends Jx{static get type(){return"PassMultipleTextureNode"}constructor(e,t,r=!1){super(e,null),this.textureName=t,this.previousTexture=r,this.isPassMultipleTextureNode=!0}updateTexture(){this.value=this.previousTexture?this.passNode.getPreviousTexture(this.textureName):this.passNode.getTexture(this.textureName)}setup(e){return this.updateTexture(),super.setup(e)}clone(){const e=new this.constructor(this.passNode,this.textureName,this.previousTexture);return e.uvNode=this.uvNode,e.levelNode=this.levelNode,e.biasNode=this.biasNode,e.sampler=this.sampler,e.depthNode=this.depthNode,e.compareNode=this.compareNode,e.gradNode=this.gradNode,e.offsetNode=this.offsetNode,e}}class tT extends pi{static get type(){return"PassNode"}constructor(e,t,r,s={}){super("vec4"),this.scope=e,this.scene=t,this.camera=r,this.options=s,this._pixelRatio=1,this._width=1,this._height=1;const i=new J;i.isRenderTargetTexture=!0,i.name="depth";const n=new ae(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:_e,...s});n.texture.name="output",n.depthTexture=i,this.renderTarget=n,this.overrideMaterial=null,this.transparent=!0,this.opaque=!0,this.contextNode=null,this._contextNodeCache=null,this._textures={output:n.texture,depth:i},this._textureNodes={},this._linearDepthNodes={},this._viewZNodes={},this._previousTextures={},this._previousTextureNodes={},this._cameraNear=Na(0),this._cameraFar=Na(0),this._mrt=null,this._layers=null,this._resolutionScale=1,this._viewport=null,this._scissor=null,this.isPassNode=!0,this.updateBeforeType=ti.FRAME,this.global=!0}setResolutionScale(e){return this._resolutionScale=e,this}getResolutionScale(){return this._resolutionScale}setResolution(e){return d("PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead."),this.setResolutionScale(e)}getResolution(){return d("PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead."),this.getResolutionScale()}setLayers(e){return this._layers=e,this}getLayers(){return this._layers}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getTexture(e){let t=this._textures[e];if(void 0===t){t=this.renderTarget.texture.clone(),t.name=e,this._textures[e]=t,this.renderTarget.textures.push(t)}return t}getPreviousTexture(e){let t=this._previousTextures[e];return void 0===t&&(t=this.getTexture(e).clone(),this._previousTextures[e]=t),t}toggleTexture(e){const t=this._previousTextures[e];if(void 0!==t){const r=this._textures[e],s=this.renderTarget.textures.indexOf(r);this.renderTarget.textures[s]=t,this._textures[e]=t,this._previousTextures[e]=r,this._textureNodes[e].updateTexture(),this._previousTextureNodes[e].updateTexture()}}getTextureNode(e="output"){let t=this._textureNodes[e];return void 0===t&&(t=new eT(this,e),t.updateTexture(),this._textureNodes[e]=t),t}getPreviousTextureNode(e="output"){let t=this._previousTextureNodes[e];return void 0===t&&(void 0===this._textureNodes[e]&&this.getTextureNode(e),t=new eT(this,e,!0),t.updateTexture(),this._previousTextureNodes[e]=t),t}getViewZNode(e="depth"){let t=this._viewZNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar;this._viewZNodes[e]=t=Zp(this.getTextureNode(e),r,s)}return t}getLinearDepthNode(e="depth"){let t=this._linearDepthNodes[e];if(void 0===t){const r=this._cameraNear,s=this._cameraFar,i=this.getViewZNode(e);this._linearDepthNodes[e]=t=Xp(i,r,s)}return t}async compileAsync(e){const t=e.getRenderTarget(),r=e.getMRT();e.setRenderTarget(this.renderTarget),e.setMRT(this._mrt),await e.compileAsync(this.scene,this.camera),e.setRenderTarget(t),e.setMRT(r)}setup({renderer:e}){return this.renderTarget.samples=void 0===this.options.samples?e.samples:this.options.samples,this.renderTarget.texture.type=e.getOutputBufferType(),this.scope===tT.COLOR?this.getTextureNode():this.getLinearDepthNode()}updateBefore(e){const{renderer:t}=e,{scene:r}=this;let s,i;const n=t.getOutputRenderTarget();n&&!0===n.isXRRenderTarget?(i=1,s=t.xr.getCamera(),t.xr.updateCamera(s),Zx.set(n.width,n.height)):(s=this.camera,i=t.getPixelRatio(),t.getSize(Zx)),this._pixelRatio=i,this.setSize(Zx.width,Zx.height);const a=t.getRenderTarget(),o=t.getMRT(),u=t.autoClear,l=t.transparent,d=t.opaque,c=s.layers.mask,h=t.contextNode,p=r.overrideMaterial;this._cameraNear.value=s.near,this._cameraFar.value=s.far,null!==this._layers&&(s.layers.mask=this._layers.mask);for(const e in this._previousTextures)this.toggleTexture(e);null!==this.overrideMaterial&&(r.overrideMaterial=this.overrideMaterial),t.setRenderTarget(this.renderTarget),t.setMRT(this._mrt),t.autoClear=!0,t.transparent=this.transparent,t.opaque=this.opaque,null!==this.contextNode&&(null!==this._contextNodeCache&&this._contextNodeCache.version===this.version||(this._contextNodeCache={version:this.version,context:vu({...t.contextNode.getFlowContextData(),...this.contextNode.getFlowContextData()})}),t.contextNode=this._contextNodeCache.context);const g=r.name;r.name=this.name?this.name:r.name,t.render(r,s),r.name=g,r.overrideMaterial=p,t.setRenderTarget(a),t.setMRT(o),t.autoClear=u,t.transparent=l,t.opaque=d,t.contextNode=h,s.layers.mask=c}setSize(e,t){this._width=e,this._height=t;const r=Math.floor(this._width*this._pixelRatio*this._resolutionScale),s=Math.floor(this._height*this._pixelRatio*this._resolutionScale);this.renderTarget.setSize(r,s),null!==this._scissor&&this.renderTarget.scissor.copy(this._scissor),null!==this._viewport&&this.renderTarget.viewport.copy(this._viewport)}setScissor(e,t,r,i){null===e?this._scissor=null:(null===this._scissor&&(this._scissor=new s),e.isVector4?this._scissor.copy(e):this._scissor.set(e,t,r,i),this._scissor.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setViewport(e,t,r,i){null===e?this._viewport=null:(null===this._viewport&&(this._viewport=new s),e.isVector4?this._viewport.copy(e):this._viewport.set(e,t,r,i),this._viewport.multiplyScalar(this._pixelRatio*this._resolutionScale).floor())}setPixelRatio(e){this._pixelRatio=e,this.setSize(this._width,this._height)}dispose(){this.renderTarget.dispose()}}tT.COLOR="color",tT.DEPTH="depth";class rT extends tT{static get type(){return"ToonOutlinePassNode"}constructor(e,t,r,s,i){super(tT.COLOR,e,t),this.colorNode=r,this.thicknessNode=s,this.alphaNode=i,this._materialCache=new WeakMap,this.name="Outline Pass"}updateBefore(e){const{renderer:t}=e,r=t.getRenderObjectFunction();t.setRenderObjectFunction((e,r,s,i,n,a,o,u)=>{if((n.isMeshToonMaterial||n.isMeshToonNodeMaterial)&&!1===n.wireframe){const l=this._getOutlineMaterial(n);t.renderObject(e,r,s,i,l,a,o,u)}t.renderObject(e,r,s,i,n,a,o,u)}),super.updateBefore(e),t.setRenderObjectFunction(r)}_createMaterial(){const e=new yg;e.isMeshToonOutlineMaterial=!0,e.name="Toon_Outline",e.side=L;const t=oc.negate(),r=Td.mul(Wd),s=fn(1),i=r.mul(wn(Qd,1)),n=r.mul(wn(Qd.add(t),1)),a=So(i.sub(n));return e.vertexNode=i.add(a.mul(this.thicknessNode).mul(i.w).mul(s)),e.colorNode=wn(this.colorNode,this.alphaNode),e}_getOutlineMaterial(e){let t=this._materialCache.get(e);return void 0===t&&(t=this._createMaterial(),this._materialCache.set(e,t)),t}}const sT=dn(([e,t])=>e.mul(t).clamp()).setLayout({name:"linearToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),iT=dn(([e,t])=>(e=e.mul(t)).div(e.add(1)).clamp()).setLayout({name:"reinhardToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),nT=dn(([e,t])=>{const r=(e=(e=e.mul(t)).sub(.004).max(0)).mul(e.mul(6.2).add(.5)),s=e.mul(e.mul(6.2).add(1.7)).add(.06);return r.div(s).pow(2.2)}).setLayout({name:"cineonToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),aT=dn(([e])=>{const t=e.mul(e.add(.0245786)).sub(90537e-9),r=e.mul(e.add(.432951).mul(.983729)).add(.238081);return t.div(r)}),oT=dn(([e,t])=>{const r=Ln(.59719,.35458,.04823,.076,.90834,.01566,.0284,.13383,.83777),s=Ln(1.60475,-.53108,-.07367,-.10208,1.10813,-.00605,-.00327,-.07276,1.07602);return e=e.mul(t).div(.6),e=r.mul(e),e=aT(e),(e=s.mul(e)).clamp()}).setLayout({name:"acesFilmicToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),uT=Ln(Sn(1.6605,-.1246,-.0182),Sn(-.5876,1.1329,-.1006),Sn(-.0728,-.0083,1.1187)),lT=Ln(Sn(.6274,.0691,.0164),Sn(.3293,.9195,.088),Sn(.0433,.0113,.8956)),dT=dn(([e])=>{const t=Sn(e).toVar(),r=Sn(t.mul(t)).toVar(),s=Sn(r.mul(r)).toVar();return fn(15.5).mul(s.mul(r)).sub(Pa(40.14,s.mul(t))).add(Pa(31.96,s).sub(Pa(6.868,r.mul(t))).add(Pa(.4298,r).add(Pa(.1191,t).sub(.00232))))}),cT=dn(([e,t])=>{const r=Sn(e).toVar(),s=Ln(Sn(.856627153315983,.137318972929847,.11189821299995),Sn(.0951212405381588,.761241990602591,.0767994186031903),Sn(.0482516061458583,.101439036467562,.811302368396859)),i=Ln(Sn(1.1271005818144368,-.1413297634984383,-.14132976349843826),Sn(-.11060664309660323,1.157823702216272,-.11060664309660294),Sn(-.016493938717834573,-.016493938717834257,1.2519364065950405)),n=fn(-12.47393),a=fn(4.026069);return r.mulAssign(t),r.assign(lT.mul(r)),r.assign(s.mul(r)),r.assign(jo(r,1e-10)),r.assign(xo(r)),r.assign(r.sub(n).div(a.sub(n))),r.assign(uu(r,0,1)),r.assign(dT(r)),r.assign(i.mul(r)),r.assign(eu(jo(Sn(0),r),Sn(2.2))),r.assign(uT.mul(r)),r.assign(uu(r,0,1)),r}).setLayout({name:"agxToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]}),hT=dn(([e,t])=>{const r=fn(.76),s=fn(.15);e=e.mul(t);const i=qo(e.r,qo(e.g,e.b)),n=Tu(i.lessThan(.08),i.sub(Pa(6.25,i.mul(i))),.04);e.subAssign(n);const a=jo(e.r,jo(e.g,e.b));pn(a.lessThan(r),()=>e);const o=La(1,r),u=La(1,o.mul(o).div(a.add(o.sub(r))));e.mulAssign(u.div(a));const l=La(1,Da(1,s.mul(a.sub(u)).add(1)));return ou(e,Sn(u),l)}).setLayout({name:"neutralToneMapping",type:"vec3",inputs:[{name:"color",type:"vec3"},{name:"exposure",type:"float"}]});class pT extends di{static get type(){return"CodeNode"}constructor(e="",t=[],r=""){super("code"),this.isCodeNode=!0,this.global=!0,this.code=e,this.includes=t,this.language=r}setIncludes(e){return this.includes=e,this}getIncludes(){return this.includes}generate(e){const t=this.getIncludes(e);for(const r of t)r.build(e);const r=e.getCodeFromNode(this,this.getNodeType(e));return r.code=this.code,r.code}serialize(e){super.serialize(e),e.code=this.code,e.language=this.language}deserialize(e){super.deserialize(e),this.code=e.code,this.language=e.language}}const gT=nn(pT).setParameterLength(1,3);class mT extends pT{static get type(){return"FunctionNode"}constructor(e="",t=[],r=""){super(e,t,r)}getNodeType(e){return this.getNodeFunction(e).type}getMemberType(e,t){const r=this.getNodeType(e);return e.getStructTypeNode(r).getMemberType(e,t)}getInputs(e){return this.getNodeFunction(e).inputs}getNodeFunction(e){const t=e.getDataFromNode(this);let r=t.nodeFunction;return void 0===r&&(r=e.parser.parseFunction(this.code),t.nodeFunction=r),r}generate(e,t){super.generate(e);const r=this.getNodeFunction(e),s=r.name,i=r.type,n=e.getCodeFromNode(this,i);""!==s&&(n.name=s);const a=e.getPropertyName(n),o=this.getNodeFunction(e).getCode(a);return n.code=o+"\n","property"===t?a:e.format(`${a}()`,i,t)}}const fT=(e,t=[],r="")=>{for(let e=0;es.call(...e);return i.functionNode=s,i};function yT(e){let t;const r=e.context.getViewZ;return void 0!==r&&(t=r(this)),(t||ec.z).negate()}const bT=dn(([e,t],r)=>{const s=yT(r);return cu(e,t,s)}),xT=dn(([e],t)=>{const r=yT(t);return e.mul(e,r,r).negate().exp().oneMinus()}),TT=dn(([e,t],r)=>{const s=yT(r),i=t.sub(Zd.y).max(0).toConst().mul(s).toConst();return e.mul(e,i,i).negate().exp().oneMinus()}),_T=dn(([e,t])=>wn(t.toFloat().mix(aa.rgb,e.toVec3()),aa.a));let vT=null,NT=null;class ST extends di{static get type(){return"RangeNode"}constructor(e=fn(),t=fn()){super(),this.minNode=e,this.maxNode=t}getVectorLength(e){const t=this.getConstNode(this.minNode),r=this.getConstNode(this.maxNode),s=e.getTypeLength(Xs(t.value)),i=e.getTypeLength(Xs(r.value));return s>i?s:i}getNodeType(e){return e.object.count>1?e.getTypeFromLength(this.getVectorLength(e)):"float"}getConstNode(e){let t=null;if(e.traverse(e=>{!0===e.isConstNode&&(t=e)}),null===t)throw new Fl('THREE.TSL: No "ConstNode" found in node graph.',this.stackTrace);return t}setup(e){const t=e.object;let r=null;if(t.count>1){const i=this.getConstNode(this.minNode),n=this.getConstNode(this.maxNode),a=i.value,o=n.value,u=e.getTypeLength(Xs(a)),d=e.getTypeLength(Xs(o));vT=vT||new s,NT=NT||new s,vT.setScalar(0),NT.setScalar(0),1===u?vT.setScalar(a):a.isColor?vT.set(a.r,a.g,a.b,1):vT.set(a.x,a.y,a.z||0,a.w||0),1===d?NT.setScalar(o):o.isColor?NT.set(o.r,o.g,o.b,1):NT.set(o.x,o.y,o.z||0,o.w||0);const c=4,h=c*t.count,p=new Float32Array(h);for(let e=0;enew ET(e,t),wT=AT("numWorkgroups","uvec3"),CT=AT("workgroupId","uvec3"),MT=AT("globalId","uvec3"),BT=AT("localId","uvec3"),FT=AT("subgroupSize","uint");class LT extends di{constructor(e){super(),this.scope=e}generate(e){const{scope:t}=this,{renderer:r}=e;!0===r.backend.isWebGLBackend?e.addFlowCode(`\t// ${t}Barrier \n`):e.addLineFlowCode(`${t}Barrier()`,this)}}const PT=nn(LT);class DT extends ci{constructor(e,t){super(e,t),this.isWorkgroupInfoElementNode=!0}generate(e,t){let r;const s=e.context.assign;if(r=super.generate(e),!0!==s){const s=this.getNodeType(e);r=e.format(r,s,t)}return r}}class UT extends di{constructor(e,t,r=0){super(t),this.bufferType=t,this.bufferCount=r,this.isWorkgroupInfoNode=!0,this.elementType=t,this.scope=e,this.name=""}setName(e){return this.name=e,this}label(e){return d('TSL: "label()" has been deprecated. Use "setName()" instead.',new Us),this.setName(e)}setScope(e){return this.scope=e,this}getElementType(){return this.elementType}getInputType(){return`${this.scope}Array`}element(e){return new DT(this,e)}generate(e){const t=""!==this.name?this.name:`${this.scope}Array_${this.id}`;return e.getScopedArray(t,this.scope.toLowerCase(),this.bufferType,this.bufferCount)}}class IT extends di{static get type(){return"AtomicFunctionNode"}constructor(e,t,r){super("uint"),this.method=e,this.pointerNode=t,this.valueNode=r,this.parents=!0}getInputType(e){return this.pointerNode.getNodeType(e)}getNodeType(e){return this.getInputType(e)}generate(e){const t=e.getNodeProperties(this),r=t.parents,s=this.method,i=this.getNodeType(e),n=this.getInputType(e),a=this.pointerNode,o=this.valueNode,u=[];u.push(`&${a.build(e,n)}`),null!==o&&u.push(o.build(e,n));const l=`${e.getMethod(s,i)}( ${u.join(", ")} )`;if(!(!!r&&(1===r.length&&!0===r[0].isStackNode)))return void 0===t.constNode&&(t.constNode=fl(l,i).toConst()),t.constNode.build(e);e.addLineFlowCode(l,this)}}IT.ATOMIC_LOAD="atomicLoad",IT.ATOMIC_STORE="atomicStore",IT.ATOMIC_ADD="atomicAdd",IT.ATOMIC_SUB="atomicSub",IT.ATOMIC_MAX="atomicMax",IT.ATOMIC_MIN="atomicMin",IT.ATOMIC_AND="atomicAnd",IT.ATOMIC_OR="atomicOr",IT.ATOMIC_XOR="atomicXor";const OT=nn(IT),VT=(e,t,r)=>OT(e,t,r).toStack();class kT extends pi{static get type(){return"SubgroupFunctionNode"}constructor(e,t=null,r=null){super(),this.method=e,this.aNode=t,this.bNode=r}getInputType(e){const t=this.aNode?this.aNode.getNodeType(e):null,r=this.bNode?this.bNode.getNodeType(e):null;return(e.isMatrix(t)?0:e.getTypeLength(t))>(e.isMatrix(r)?0:e.getTypeLength(r))?t:r}getNodeType(e){const t=this.method;return t===kT.SUBGROUP_ELECT?"bool":t===kT.SUBGROUP_BALLOT?"uvec4":this.getInputType(e)}generate(e,t){const r=this.method,s=this.getNodeType(e),i=this.getInputType(e),n=this.aNode,a=this.bNode,o=[];if(r===kT.SUBGROUP_BROADCAST||r===kT.SUBGROUP_SHUFFLE||r===kT.QUAD_BROADCAST){const t=a.getNodeType(e);o.push(n.build(e,s),a.build(e,"float"===t?"int":s))}else r===kT.SUBGROUP_SHUFFLE_XOR||r===kT.SUBGROUP_SHUFFLE_DOWN||r===kT.SUBGROUP_SHUFFLE_UP?o.push(n.build(e,s),a.build(e,"uint")):(null!==n&&o.push(n.build(e,i)),null!==a&&o.push(a.build(e,i)));const u=0===o.length?"()":`( ${o.join(", ")} )`;return e.format(`${e.getMethod(r,s)}${u}`,s,t)}serialize(e){super.serialize(e),e.method=this.method}deserialize(e){super.deserialize(e),this.method=e.method}}kT.SUBGROUP_ELECT="subgroupElect",kT.SUBGROUP_BALLOT="subgroupBallot",kT.SUBGROUP_ADD="subgroupAdd",kT.SUBGROUP_INCLUSIVE_ADD="subgroupInclusiveAdd",kT.SUBGROUP_EXCLUSIVE_AND="subgroupExclusiveAdd",kT.SUBGROUP_MUL="subgroupMul",kT.SUBGROUP_INCLUSIVE_MUL="subgroupInclusiveMul",kT.SUBGROUP_EXCLUSIVE_MUL="subgroupExclusiveMul",kT.SUBGROUP_AND="subgroupAnd",kT.SUBGROUP_OR="subgroupOr",kT.SUBGROUP_XOR="subgroupXor",kT.SUBGROUP_MIN="subgroupMin",kT.SUBGROUP_MAX="subgroupMax",kT.SUBGROUP_ALL="subgroupAll",kT.SUBGROUP_ANY="subgroupAny",kT.SUBGROUP_BROADCAST_FIRST="subgroupBroadcastFirst",kT.QUAD_SWAP_X="quadSwapX",kT.QUAD_SWAP_Y="quadSwapY",kT.QUAD_SWAP_DIAGONAL="quadSwapDiagonal",kT.SUBGROUP_BROADCAST="subgroupBroadcast",kT.SUBGROUP_SHUFFLE="subgroupShuffle",kT.SUBGROUP_SHUFFLE_XOR="subgroupShuffleXor",kT.SUBGROUP_SHUFFLE_UP="subgroupShuffleUp",kT.SUBGROUP_SHUFFLE_DOWN="subgroupShuffleDown",kT.QUAD_BROADCAST="quadBroadcast";const GT=on(kT,kT.SUBGROUP_ELECT).setParameterLength(0),$T=on(kT,kT.SUBGROUP_BALLOT).setParameterLength(1),zT=on(kT,kT.SUBGROUP_ADD).setParameterLength(1),WT=on(kT,kT.SUBGROUP_INCLUSIVE_ADD).setParameterLength(1),HT=on(kT,kT.SUBGROUP_EXCLUSIVE_AND).setParameterLength(1),qT=on(kT,kT.SUBGROUP_MUL).setParameterLength(1),jT=on(kT,kT.SUBGROUP_INCLUSIVE_MUL).setParameterLength(1),XT=on(kT,kT.SUBGROUP_EXCLUSIVE_MUL).setParameterLength(1),KT=on(kT,kT.SUBGROUP_AND).setParameterLength(1),QT=on(kT,kT.SUBGROUP_OR).setParameterLength(1),YT=on(kT,kT.SUBGROUP_XOR).setParameterLength(1),ZT=on(kT,kT.SUBGROUP_MIN).setParameterLength(1),JT=on(kT,kT.SUBGROUP_MAX).setParameterLength(1),e_=on(kT,kT.SUBGROUP_ALL).setParameterLength(0),t_=on(kT,kT.SUBGROUP_ANY).setParameterLength(0),r_=on(kT,kT.SUBGROUP_BROADCAST_FIRST).setParameterLength(2),s_=on(kT,kT.QUAD_SWAP_X).setParameterLength(1),i_=on(kT,kT.QUAD_SWAP_Y).setParameterLength(1),n_=on(kT,kT.QUAD_SWAP_DIAGONAL).setParameterLength(1),a_=on(kT,kT.SUBGROUP_BROADCAST).setParameterLength(2),o_=on(kT,kT.SUBGROUP_SHUFFLE).setParameterLength(2),u_=on(kT,kT.SUBGROUP_SHUFFLE_XOR).setParameterLength(2),l_=on(kT,kT.SUBGROUP_SHUFFLE_UP).setParameterLength(2),d_=on(kT,kT.SUBGROUP_SHUFFLE_DOWN).setParameterLength(2),c_=on(kT,kT.QUAD_BROADCAST).setParameterLength(1);let h_;function p_(e){h_=h_||new WeakMap;let t=h_.get(e);return void 0===t&&h_.set(e,t={}),t}function g_(e){const t=p_(e);return t.shadowMatrix||(t.shadowMatrix=Na("mat4").setGroup(Ta).onRenderUpdate(t=>(!0===e.castShadow&&!1!==t.renderer.shadowMap.enabled||(e.shadow.camera.coordinateSystem!==t.camera.coordinateSystem&&(e.shadow.camera.coordinateSystem=t.camera.coordinateSystem,e.shadow.camera.updateProjectionMatrix()),e.shadow.updateMatrices(e)),e.shadow.matrix)))}function m_(e,t=Zd){const r=g_(e).mul(t);return r.xyz.div(r.w)}function f_(e){const t=p_(e);return t.position||(t.position=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.matrixWorld)))}function y_(e){const t=p_(e);return t.targetPosition||(t.targetPosition=Na(new r).setGroup(Ta).onRenderUpdate((t,r)=>r.value.setFromMatrixPosition(e.target.matrixWorld)))}function b_(e){const t=p_(e);return t.viewPosition||(t.viewPosition=Na(new r).setGroup(Ta).onRenderUpdate(({camera:t},s)=>{s.value=s.value||new r,s.value.setFromMatrixPosition(e.matrixWorld),s.value.applyMatrix4(t.matrixWorldInverse)}))}const x_=e=>vd.transformDirection(f_(e).sub(y_(e))),T_=(e,t)=>{for(const r of t)if(r.isAnalyticLightNode&&r.light.id===e)return r;return null},__=new WeakMap,v_=[];class N_ extends di{static get type(){return"LightsNode"}constructor(){super("vec3"),this.totalDiffuseNode=On("vec3","totalDiffuse"),this.totalSpecularNode=On("vec3","totalSpecular"),this.outgoingLightNode=On("vec3","outgoingLight"),this._lights=[],this._lightNodes=null,this._lightNodesHash=null,this.global=!0}customCacheKey(){const e=this._lights;for(let t=0;te.sort((e,t)=>e.id-t.id))(this._lights),i=e.renderer.library;for(const e of s)if(e.isNode)t.push(en(e));else{let s=null;if(null!==r&&(s=T_(e.id,r)),null===s){const r=i.getLightNodeClass(e.constructor);if(null===r){d(`LightsNode.setupNodeLights: Light node not found for ${e.constructor.name}`);continue}let s=null;__.has(e)?s=__.get(e):(s=new r(e),__.set(e,s)),t.push(s)}}this._lightNodes=t}setupDirectLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.direct({...r,lightNode:t,reflectedLight:i},e)}setupDirectRectAreaLight(e,t,r){const{lightingModel:s,reflectedLight:i}=e.context;s.directRectArea({...r,lightNode:t,reflectedLight:i},e)}setupLights(e,t){for(const r of t)r.build(e)}getLightNodes(e){return null===this._lightNodes&&this.setupLightsNode(e),this._lightNodes}setup(e){const t=e.lightsNode;e.lightsNode=this;let r=this.outgoingLightNode;const s=e.context,i=s.lightingModel,n=e.getNodeProperties(this);if(i){const{totalDiffuseNode:t,totalSpecularNode:a}=this;s.outgoingLight=r;const o=e.addStack();n.nodes=o.nodes,i.start(e);const{backdrop:u,backdropAlpha:l}=s,{directDiffuse:d,directSpecular:c,indirectDiffuse:h,indirectSpecular:p}=s.reflectedLight;let g=d.add(h);null!==u&&(g=Sn(null!==l?l.mix(g,u):u)),t.assign(g),a.assign(c.add(p)),r.assign(t.add(a)),i.finish(e),r=r.bypass(e.removeStack())}else n.nodes=[];return e.lightsNode=t,r}setLights(e){return this._lights=e,this._lightNodes=null,this._lightNodesHash=null,this}getLights(){return this._lights}get hasLights(){return this._lights.length>0}}class S_ extends di{static get type(){return"ShadowBaseNode"}constructor(e){super(),this.light=e,this.updateBeforeType=ti.RENDER,this.isShadowBaseNode=!0}setupShadowPosition({context:e,material:t}){R_.assign(t.receivedShadowPositionNode||e.shadowPositionWorld||Zd)}}const R_=On("vec3","shadowPositionWorld");function E_(t,r={}){return r.toneMapping=t.toneMapping,r.toneMappingExposure=t.toneMappingExposure,r.outputColorSpace=t.outputColorSpace,r.renderTarget=t.getRenderTarget(),r.activeCubeFace=t.getActiveCubeFace(),r.activeMipmapLevel=t.getActiveMipmapLevel(),r.renderObjectFunction=t.getRenderObjectFunction(),r.pixelRatio=t.getPixelRatio(),r.mrt=t.getMRT(),r.clearColor=t.getClearColor(r.clearColor||new e),r.clearAlpha=t.getClearAlpha(),r.autoClear=t.autoClear,r.scissorTest=t.getScissorTest(),r}function A_(e,t){return t=E_(e,t),e.setMRT(null),e.setRenderObjectFunction(null),e.setClearColor(0,1),e.autoClear=!0,t}function w_(e,t){e.toneMapping=t.toneMapping,e.toneMappingExposure=t.toneMappingExposure,e.outputColorSpace=t.outputColorSpace,e.setRenderTarget(t.renderTarget,t.activeCubeFace,t.activeMipmapLevel),e.setRenderObjectFunction(t.renderObjectFunction),e.setPixelRatio(t.pixelRatio),e.setMRT(t.mrt),e.setClearColor(t.clearColor,t.clearAlpha),e.autoClear=t.autoClear,e.setScissorTest(t.scissorTest)}function C_(e,t={}){return t.background=e.background,t.backgroundNode=e.backgroundNode,t.overrideMaterial=e.overrideMaterial,t}function M_(e,t){return t=C_(e,t),e.background=null,e.backgroundNode=null,e.overrideMaterial=null,t}function B_(e,t){e.background=t.background,e.backgroundNode=t.backgroundNode,e.overrideMaterial=t.overrideMaterial}function F_(e,t,r){return r=M_(t,r=A_(e,r))}function L_(e,t,r){w_(e,r),B_(t,r)}var P_=Object.freeze({__proto__:null,resetRendererAndSceneState:F_,resetRendererState:A_,resetSceneState:M_,restoreRendererAndSceneState:L_,restoreRendererState:w_,restoreSceneState:B_,saveRendererAndSceneState:function(e,t,r={}){return r=C_(t,r=E_(e,r))},saveRendererState:E_,saveSceneState:C_});const D_=new WeakMap,U_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r})=>{let s=Ul(e,t.xy).setName("t_basic");return e.isArrayTexture&&(s=s.depth(r)),s.compare(t.z)}),I_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Pc("radius","float",r).setGroup(Ta),o=Tn(1).div(n),u=a.mul(o.x),l=yx(Yl.xy).mul(6.28318530718);return Fa(i(t.xy.add(bx(0,5,l).mul(u)),t.z),i(t.xy.add(bx(1,5,l).mul(u)),t.z),i(t.xy.add(bx(2,5,l).mul(u)),t.z),i(t.xy.add(bx(3,5,l).mul(u)),t.z),i(t.xy.add(bx(4,5,l).mul(u)),t.z)).mul(.2)}),O_=dn(({depthTexture:e,shadowCoord:t,shadow:r,depthLayer:s})=>{const i=(t,r)=>{let i=Ul(e,t);return e.isArrayTexture&&(i=i.depth(s)),i.compare(r)},n=Pc("mapSize","vec2",r).setGroup(Ta),a=Tn(1).div(n),o=a.x,u=a.y,l=t.xy,d=Ro(l.mul(n).add(.5));return l.subAssign(d.mul(a)),Fa(i(l,t.z),i(l.add(Tn(o,0)),t.z),i(l.add(Tn(0,u)),t.z),i(l.add(a),t.z),ou(i(l.add(Tn(o.negate(),0)),t.z),i(l.add(Tn(o.mul(2),0)),t.z),d.x),ou(i(l.add(Tn(o.negate(),u)),t.z),i(l.add(Tn(o.mul(2),u)),t.z),d.x),ou(i(l.add(Tn(0,u.negate())),t.z),i(l.add(Tn(0,u.mul(2))),t.z),d.y),ou(i(l.add(Tn(o,u.negate())),t.z),i(l.add(Tn(o,u.mul(2))),t.z),d.y),ou(ou(i(l.add(Tn(o.negate(),u.negate())),t.z),i(l.add(Tn(o.mul(2),u.negate())),t.z),d.x),ou(i(l.add(Tn(o.negate(),u.mul(2))),t.z),i(l.add(Tn(o.mul(2),u.mul(2))),t.z),d.x),d.y)).mul(1/9)}),V_=dn(({depthTexture:e,shadowCoord:t,depthLayer:r},s)=>{let i=Ul(e).sample(t.xy);e.isArrayTexture&&(i=i.depth(r)),i=i.rg;const n=i.x,a=jo(1e-7,i.y.mul(i.y)),o=s.renderer.reversedDepthBuffer?Xo(n,t.z):Xo(t.z,n),u=fn(1).toVar();return pn(o.notEqual(1),()=>{const e=t.z.sub(n);let r=a.div(a.add(e.mul(e)));r=uu(La(r,.3).div(.65)),u.assign(jo(o,r))}),u}),k_=e=>{let t=D_.get(e);return void 0===t&&(t=new yg,t.colorNode=wn(0,0,0,1),t.isShadowPassMaterial=!0,t.name="ShadowMaterial",t.blending=se,t.fog=!1,D_.set(e,t)),t},G_=e=>{const t=D_.get(e);void 0!==t&&(t.dispose(),D_.delete(e))},$_=new fy,z_=[],W_=(e,t,r,s)=>{z_[0]=e,z_[1]=t;let i=$_.get(z_);return void 0!==i&&i.shadowType===r&&i.useVelocity===s||(i=(i,n,a,o,u,l,...d)=>{(!0===i.castShadow||i.receiveShadow&&r===tt)&&(s&&(Qs(i).useVelocity=!0),i.onBeforeShadow(e,i,a,t.camera,o,n.overrideMaterial,l),e.renderObject(i,n,a,o,u,l,...d),i.onAfterShadow(e,i,a,t.camera,o,n.overrideMaterial,l))},i.shadowType=r,i.useVelocity=s,$_.set(z_,i)),z_[0]=null,z_[1]=null,i},H_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanVertical"),a=fn(0).toVar("squareMeanVertical"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(0,l).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),d=d.x,n.addAssign(d),a.addAssign(d.mul(d))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),q_=dn(({samples:e,radius:t,size:r,shadowPass:s,depthLayer:i})=>{const n=fn(0).toVar("meanHorizontal"),a=fn(0).toVar("squareMeanHorizontal"),o=e.lessThanEqual(fn(1)).select(fn(0),fn(2).div(e.sub(1))),u=e.lessThanEqual(fn(1)).select(fn(0),fn(-1));Ep({start:yn(0),end:yn(e),type:"int",condition:"<"},({i:e})=>{const l=u.add(fn(e).mul(o));let d=s.sample(Fa(Yl.xy,Tn(l,0).mul(t)).div(r));s.value.isArrayTexture&&(d=d.depth(i)),n.addAssign(d.x),a.addAssign(Fa(d.y.mul(d.y),d.x.mul(d.x)))}),n.divAssign(e),a.divAssign(e);const l=To(a.sub(n.mul(n)).max(0));return Tn(n,l)}),j_=[U_,I_,O_,V_];let X_;const K_=new dx;class Q_ extends S_{static get type(){return"ShadowNode"}constructor(e,t=null){super(e),this.shadow=t||e.shadow,this.shadowMap=null,this.vsmShadowMapVertical=null,this.vsmShadowMapHorizontal=null,this.vsmMaterialVertical=null,this.vsmMaterialHorizontal=null,this._node=null,this._currentShadowType=null,this._cameraFrameId=new WeakMap,this.isShadowNode=!0,this.depthLayer=0}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n}){const a=s.x.greaterThanEqual(0).and(s.x.lessThanEqual(1)).and(s.y.greaterThanEqual(0)).and(s.y.lessThanEqual(1)).and(s.z.lessThanEqual(1)),o=t({depthTexture:r,shadowCoord:s,shadow:i,depthLayer:n});return a.select(o,fn(1))}setupShadowCoord(e,t){const{shadow:r}=this,{renderer:s}=e,i=r.biasNode||Pc("bias","float",r).setGroup(Ta);let n,a=t;if(r.camera.isOrthographicCamera||!0!==s.logarithmicDepthBuffer)a=a.xyz.div(a.w),n=a.z;else{const e=a.w;a=a.xy.div(e);const t=Pc("near","float",r.camera).setGroup(Ta),s=Pc("far","float",r.camera).setGroup(Ta);n=Jp(e.negate(),t,s)}return a=Sn(a.x,a.y.oneMinus(),s.reversedDepthBuffer?n.sub(i):n.add(i)),a}getShadowFilterFn(e){return j_[e]}setupRenderTarget(e,t){const r=new J(e.mapSize.width,e.mapSize.height);r.name="ShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createRenderTarget(e.mapSize.width,e.mapSize.height);return s.texture.name="ShadowMap",s.texture.type=e.mapType,s.depthTexture=r,{shadowMap:s,depthTexture:r}}setupShadow(e){const{renderer:t,camera:r}=e,{light:s,shadow:i}=this,{depthTexture:n,shadowMap:a}=this.setupRenderTarget(i,e),o=t.shadowMap.type,u=t.hasCompatibility(E.TEXTURE_COMPARE);if(o!==Je&&o!==et||!u?(n.minFilter=B,n.magFilter=B):(n.minFilter=de,n.magFilter=de),i.camera.coordinateSystem=r.coordinateSystem,i.camera.updateProjectionMatrix(),o===tt&&!0!==i.isPointLightShadow){n.compareFunction=null,a.depth>1?(a._vsmShadowMapVertical||(a._vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapVertical.texture.name="VSMVertical"),this.vsmShadowMapVertical=a._vsmShadowMapVertical,a._vsmShadowMapHorizontal||(a._vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depth:a.depth,depthBuffer:!1}),a._vsmShadowMapHorizontal.texture.name="VSMHorizontal"),this.vsmShadowMapHorizontal=a._vsmShadowMapHorizontal):(this.vsmShadowMapVertical=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}),this.vsmShadowMapHorizontal=e.createRenderTarget(i.mapSize.width,i.mapSize.height,{format:W,type:_e,depthBuffer:!1}));let t=Ul(n);n.isArrayTexture&&(t=t.depth(this.depthLayer));let r=Ul(this.vsmShadowMapVertical.texture);n.isArrayTexture&&(r=r.depth(this.depthLayer));const s=Pc("blurSamples","float",i).setGroup(Ta),o=Pc("radius","float",i).setGroup(Ta),u=Pc("mapSize","vec2",i).setGroup(Ta);let l=this.vsmMaterialVertical||(this.vsmMaterialVertical=new yg);l.fragmentNode=H_({samples:s,radius:o,size:u,shadowPass:t,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMVertical",l=this.vsmMaterialHorizontal||(this.vsmMaterialHorizontal=new yg),l.fragmentNode=q_({samples:s,radius:o,size:u,shadowPass:r,depthLayer:this.depthLayer}).context(e.getSharedContext()),l.name="VSMHorizontal"}const l=Pc("intensity","float",i).setGroup(Ta),d=Pc("normalBias","float",i).setGroup(Ta),c=g_(s).mul(R_.add(hc.mul(d))),h=this.setupShadowCoord(e,c),p=i.filterNode||this.getShadowFilterFn(t.shadowMap.type)||null;if(null===p)throw new Error("THREE.WebGPURenderer: Shadow map type not supported yet.");const g=o===tt&&!0!==i.isPointLightShadow?this.vsmShadowMapHorizontal.texture:n,m=this.setupShadowFilter(e,{filterFn:p,shadowTexture:a.texture,depthTexture:g,shadowCoord:h,shadow:i,depthLayer:this.depthLayer});let f,y;!0===t.shadowMap.transmitted&&(a.texture.isCubeTexture?f=Bc(a.texture,h.xyz):(f=Ul(a.texture,h),n.isArrayTexture&&(f=f.depth(this.depthLayer)))),y=f?ou(1,m.rgb.mix(f,1),l.mul(f.a)).toVar():ou(1,m,l).toVar(),this.shadowMap=a,this.shadow.map=a;const b=`${this.light.type} Shadow [ ${this.light.name||"ID: "+this.light.id} ]`;return f&&y.toInspector(`${b} / Color`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture):Ul(this.shadowMap.texture)),y.toInspector(`${b} / Depth`,()=>this.shadowMap.texture.isCubeTexture?Bc(this.shadowMap.texture).r.oneMinus():Il(this.shadowMap.depthTexture,Al().mul(Cl(Ul(this.shadowMap.depthTexture)))).r.oneMinus())}setup(e){if(!1!==e.renderer.shadowMap.enabled)return dn(()=>{const t=e.renderer.shadowMap.type;this._currentShadowType!==t&&(this._reset(),this._node=null);let r=this._node;return this.setupShadowPosition(e),null===r&&(this._node=r=this.setupShadow(e),this._currentShadowType=t),e.material.receivedShadowNode&&(r=e.material.receivedShadowNode(r)),r})()}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e;t.updateMatrices(s),r.setSize(t.mapSize.width,t.mapSize.height,r.depth);const a=n.name;n.name=`Shadow Map [ ${s.name||"ID: "+s.id} ]`,i.render(n,t.camera),n.name=a}updateShadow(e){const{shadowMap:t,light:r,shadow:s}=this,{renderer:i,scene:n,camera:a}=e,o=i.shadowMap.type,u=t.depthTexture.version;this._depthVersionCached=u;const l=s.camera.layers.mask;4294967294&s.camera.layers.mask||(s.camera.layers.mask=a.layers.mask);const d=i.getRenderObjectFunction(),c=i.getMRT(),h=!!c&&c.has("velocity");X_=F_(i,n,X_),n.overrideMaterial=k_(r),i.setRenderObjectFunction(W_(i,s,o,h)),i.setClearColor(0,0),i.setRenderTarget(t),this.renderShadow(e),i.setRenderObjectFunction(d),o===tt&&!0!==s.isPointLightShadow&&this.vsmPass(i),s.camera.layers.mask=l,L_(i,n,X_)}vsmPass(e){const{shadow:t}=this,r=this.shadowMap.depth;this.vsmShadowMapVertical.setSize(t.mapSize.width,t.mapSize.height,r),this.vsmShadowMapHorizontal.setSize(t.mapSize.width,t.mapSize.height,r),e.setRenderTarget(this.vsmShadowMapVertical),K_.material=this.vsmMaterialVertical,K_.render(e),e.setRenderTarget(this.vsmShadowMapHorizontal),K_.material=this.vsmMaterialHorizontal,K_.render(e)}dispose(){this._reset(),super.dispose()}_reset(){this._currentShadowType=null,G_(this.light),this.shadowMap&&(this.shadowMap.dispose(),this.shadowMap=null),null!==this.vsmShadowMapVertical&&(this.vsmShadowMapVertical.dispose(),this.vsmShadowMapVertical=null,this.vsmMaterialVertical.dispose(),this.vsmMaterialVertical=null),null!==this.vsmShadowMapHorizontal&&(this.vsmShadowMapHorizontal.dispose(),this.vsmShadowMapHorizontal=null,this.vsmMaterialHorizontal.dispose(),this.vsmMaterialHorizontal=null)}updateBefore(e){const{shadow:t}=this;let r=t.needsUpdate||t.autoUpdate;r&&(this._cameraFrameId[e.camera]===e.frameId&&(r=!1),this._cameraFrameId[e.camera]=e.frameId),r&&(this.updateShadow(e),this.shadowMap.depthTexture.version===this._depthVersionCached&&(t.needsUpdate=!1))}}const Y_=(e,t)=>new Q_(e,t),Z_=new e,J_=new a,ev=new r,tv=new r,rv=[new r(1,0,0),new r(-1,0,0),new r(0,-1,0),new r(0,1,0),new r(0,0,1),new r(0,0,-1)],sv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,-1),new r(0,0,1),new r(0,-1,0),new r(0,-1,0)],iv=[new r(1,0,0),new r(-1,0,0),new r(0,1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1)],nv=[new r(0,-1,0),new r(0,-1,0),new r(0,0,1),new r(0,0,-1),new r(0,-1,0),new r(0,-1,0)],av=dn(({depthTexture:e,bd3D:t,dp:r})=>Bc(e,t).compare(r)),ov=dn(({depthTexture:e,bd3D:t,dp:r,shadow:s})=>{const i=Pc("radius","float",s).setGroup(Ta),n=Pc("mapSize","vec2",s).setGroup(Ta),a=i.div(n.x),o=Fo(t),u=So(Jo(t,o.x.greaterThan(o.z).select(Sn(0,1,0),Sn(1,0,0)))),l=Jo(t,u),d=yx(Yl.xy).mul(6.28318530718),c=bx(0,5,d),h=bx(1,5,d),p=bx(2,5,d),g=bx(3,5,d),m=bx(4,5,d);return Bc(e,t.add(u.mul(c.x).add(l.mul(c.y)).mul(a))).compare(r).add(Bc(e,t.add(u.mul(h.x).add(l.mul(h.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(p.x).add(l.mul(p.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(g.x).add(l.mul(g.y)).mul(a))).compare(r)).add(Bc(e,t.add(u.mul(m.x).add(l.mul(m.y)).mul(a))).compare(r)).mul(.2)}),uv=dn(({filterFn:e,depthTexture:t,shadowCoord:r,shadow:s},i)=>{const n=r.xyz.toConst(),a=n.abs().toConst(),o=a.x.max(a.y).max(a.z),u=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.near),l=Na("float").setGroup(Ta).onRenderUpdate(()=>s.camera.far),d=Pc("bias","float",s).setGroup(Ta),c=fn(1).toVar();return pn(o.sub(l).lessThanEqual(0).and(o.sub(u).greaterThanEqual(0)),()=>{let r;i.renderer.reversedDepthBuffer?(r=Yp(o.negate(),u,l),r.subAssign(d)):(r=Qp(o.negate(),u,l),r.addAssign(d));const a=n.normalize();c.assign(e({depthTexture:t,bd3D:a,dp:r,shadow:s}))}),c});class lv extends Q_{static get type(){return"PointShadowNode"}constructor(e,t=null){super(e,t)}getShadowFilterFn(e){return e===rt?av:ov}setupShadowCoord(e,t){return t}setupShadowFilter(e,{filterFn:t,depthTexture:r,shadowCoord:s,shadow:i}){return uv({filterFn:t,depthTexture:r,shadowCoord:s,shadow:i})}setupRenderTarget(e,t){const r=new st(e.mapSize.width);r.name="PointShadowDepthTexture",r.compareFunction=t.renderer.reversedDepthBuffer?M:w;const s=t.createCubeRenderTarget(e.mapSize.width);return s.texture.name="PointShadowMap",s.depthTexture=r,{shadowMap:s,depthTexture:r}}renderShadow(e){const{shadow:t,shadowMap:r,light:s}=this,{renderer:i,scene:n}=e,a=t.camera,o=t.matrix,u=i.coordinateSystem===h,l=u?rv:iv,d=u?sv:nv;r.setSize(t.mapSize.width,t.mapSize.width);const c=i.autoClear,p=i.getClearColor(Z_),g=i.getClearAlpha();i.autoClear=!1,i.setClearColor(t.clearColor,t.clearAlpha);for(let e=0;e<6;e++){i.setRenderTarget(r,e),i.clear();const u=s.distance||a.far;u!==a.far&&(a.far=u,a.updateProjectionMatrix()),ev.setFromMatrixPosition(s.matrixWorld),a.position.copy(ev),tv.copy(a.position),tv.add(l[e]),a.up.copy(d[e]),a.lookAt(tv),a.updateMatrixWorld(),o.makeTranslation(-ev.x,-ev.y,-ev.z),J_.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),t._frustum.setFromProjectionMatrix(J_,a.coordinateSystem,a.reversedDepth);const c=n.name;n.name=`Point Light Shadow [ ${s.name||"ID: "+s.id} ] - Face ${e+1}`,i.render(n,a),n.name=c}i.autoClear=c,i.setClearColor(p,g)}}const dv=(e,t)=>new lv(e,t);class cv extends Lp{static get type(){return"AnalyticLightNode"}constructor(t=null){super(),this.light=t,this.color=new e,this.colorNode=t&&t.colorNode||Na(this.color).setGroup(Ta),this.baseColorNode=null,this.shadowNode=null,this.shadowColorNode=null,this.isAnalyticLightNode=!0,this.updateType=ti.FRAME,t&&t.shadow&&(this._shadowDisposeListener=()=>{this.disposeShadow()},t.addEventListener("dispose",this._shadowDisposeListener))}dispose(){this._shadowDisposeListener&&this.light.removeEventListener("dispose",this._shadowDisposeListener),super.dispose()}disposeShadow(){null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null),this.shadowColorNode=null,null!==this.baseColorNode&&(this.colorNode=this.baseColorNode,this.baseColorNode=null)}getHash(){return this.light.uuid}getLightVector(e){return b_(this.light).sub(e.context.positionView||ec)}setupDirect(){}setupDirectRectArea(){}setupShadowNode(){return Y_(this.light)}setupShadow(e){const{renderer:t}=e;if(!1===t.shadowMap.enabled)return;let r=this.shadowColorNode;if(null===r){const e=this.light.shadow.shadowNode;let t;t=void 0!==e?en(e):this.setupShadowNode(),this.shadowNode=t,this.shadowColorNode=r=this.colorNode.mul(t),this.baseColorNode=this.colorNode}e.context.getShadow&&(r=e.context.getShadow(this,e)),this.colorNode=r}setup(e){this.colorNode=this.baseColorNode||this.colorNode,this.light.castShadow?e.object.receiveShadow&&this.setupShadow(e):null!==this.shadowNode&&(this.shadowNode.dispose(),this.shadowNode=null,this.shadowColorNode=null);const t=this.setupDirect(e),r=this.setupDirectRectArea(e);t&&e.lightsNode.setupDirectLight(e,this,t),r&&e.lightsNode.setupDirectRectAreaLight(e,this,r)}update(){const{light:e}=this;this.color.copy(e.color).multiplyScalar(e.intensity)}}const hv=dn(({lightDistance:e,cutoffDistance:t,decayExponent:r})=>{const s=e.pow(r).max(.01).reciprocal();return t.greaterThan(0).select(s.mul(e.div(t).pow4().oneMinus().clamp().pow2()),s)}),pv=({color:e,lightVector:t,cutoffDistance:r,decayExponent:s})=>{const i=t.normalize(),n=t.length(),a=hv({lightDistance:n,cutoffDistance:r,decayExponent:s});return{lightDirection:i,lightColor:e.mul(a)}};class gv extends cv{static get type(){return"PointLightNode"}constructor(e=null){super(e),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(2).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}setupShadowNode(){return dv(this.light)}setupDirect(e){return pv({color:this.colorNode,lightVector:this.getLightVector(e),cutoffDistance:this.cutoffDistanceNode,decayExponent:this.decayExponentNode})}}const mv=dn(([e=Al()])=>{const t=e.mul(2),r=t.x.floor(),s=t.y.floor();return r.add(s).mod(2).sign()}),fv=dn(([e=Al()],{renderer:t,material:r})=>{const s=au(e.mul(2).sub(1));let i;if(r.alphaToCoverage&&t.currentSamples>0){const e=fn(s.fwidth()).toVar();i=cu(e.oneMinus(),e.add(1),s).oneMinus()}else i=Tu(s.greaterThan(1),0,1);return i}),yv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=xn(e).toVar();return Tu(n,i,s)}).setLayout({name:"mx_select",type:"float",inputs:[{name:"b",type:"bool"},{name:"t",type:"float"},{name:"f",type:"float"}]}),bv=dn(([e,t])=>{const r=xn(t).toVar(),s=fn(e).toVar();return Tu(r,s.negate(),s)}).setLayout({name:"mx_negate_if",type:"float",inputs:[{name:"val",type:"float"},{name:"b",type:"bool"}]}),xv=dn(([e])=>{const t=fn(e).toVar();return yn(vo(t))}).setLayout({name:"mx_floor",type:"int",inputs:[{name:"x",type:"float"}]}),Tv=dn(([e,t])=>{const r=fn(e).toVar();return t.assign(xv(r)),r.sub(fn(t))}),_v=Db([dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=fn(s).toVar(),l=fn(r).toVar(),d=fn(t).toVar(),c=fn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"}]}),dn(([e,t,r,s,i,n])=>{const a=fn(n).toVar(),o=fn(i).toVar(),u=Sn(s).toVar(),l=Sn(r).toVar(),d=Sn(t).toVar(),c=Sn(e).toVar(),h=fn(La(1,o)).toVar();return La(1,a).mul(c.mul(h).add(d.mul(o))).add(a.mul(l.mul(h).add(u.mul(o))))}).setLayout({name:"mx_bilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"}]})]),vv=Db([dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=fn(o).toVar(),m=fn(a).toVar(),f=fn(n).toVar(),y=fn(i).toVar(),b=fn(s).toVar(),x=fn(r).toVar(),T=fn(t).toVar(),_=fn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_0",type:"float",inputs:[{name:"v0",type:"float"},{name:"v1",type:"float"},{name:"v2",type:"float"},{name:"v3",type:"float"},{name:"v4",type:"float"},{name:"v5",type:"float"},{name:"v6",type:"float"},{name:"v7",type:"float"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]}),dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=fn(d).toVar(),h=fn(l).toVar(),p=fn(u).toVar(),g=Sn(o).toVar(),m=Sn(a).toVar(),f=Sn(n).toVar(),y=Sn(i).toVar(),b=Sn(s).toVar(),x=Sn(r).toVar(),T=Sn(t).toVar(),_=Sn(e).toVar(),v=fn(La(1,p)).toVar(),N=fn(La(1,h)).toVar();return fn(La(1,c)).toVar().mul(N.mul(_.mul(v).add(T.mul(p))).add(h.mul(x.mul(v).add(b.mul(p))))).add(c.mul(N.mul(y.mul(v).add(f.mul(p))).add(h.mul(m.mul(v).add(g.mul(p))))))}).setLayout({name:"mx_trilerp_1",type:"vec3",inputs:[{name:"v0",type:"vec3"},{name:"v1",type:"vec3"},{name:"v2",type:"vec3"},{name:"v3",type:"vec3"},{name:"v4",type:"vec3"},{name:"v5",type:"vec3"},{name:"v6",type:"vec3"},{name:"v7",type:"vec3"},{name:"s",type:"float"},{name:"t",type:"float"},{name:"r",type:"float"}]})]),Nv=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=bn(e).toVar(),a=bn(n.bitAnd(bn(7))).toVar(),o=fn(yv(a.lessThan(bn(4)),i,s)).toVar(),u=fn(Pa(2,yv(a.lessThan(bn(4)),s,i))).toVar();return bv(o,xn(a.bitAnd(bn(1)))).add(bv(u,xn(a.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_0",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Sv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=bn(e).toVar(),u=bn(o.bitAnd(bn(15))).toVar(),l=fn(yv(u.lessThan(bn(8)),a,n)).toVar(),d=fn(yv(u.lessThan(bn(4)),n,yv(u.equal(bn(12)).or(u.equal(bn(14))),a,i))).toVar();return bv(l,xn(u.bitAnd(bn(1)))).add(bv(d,xn(u.bitAnd(bn(2)))))}).setLayout({name:"mx_gradient_float_1",type:"float",inputs:[{name:"hash",type:"uint"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),Rv=Db([Nv,Sv]),Ev=dn(([e,t,r])=>{const s=fn(r).toVar(),i=fn(t).toVar(),n=En(e).toVar();return Sn(Rv(n.x,i,s),Rv(n.y,i,s),Rv(n.z,i,s))}).setLayout({name:"mx_gradient_vec3_0",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"}]}),Av=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=fn(t).toVar(),o=En(e).toVar();return Sn(Rv(o.x,a,n,i),Rv(o.y,a,n,i),Rv(o.z,a,n,i))}).setLayout({name:"mx_gradient_vec3_1",type:"vec3",inputs:[{name:"hash",type:"uvec3"},{name:"x",type:"float"},{name:"y",type:"float"},{name:"z",type:"float"}]}),wv=Db([Ev,Av]),Cv=dn(([e])=>{const t=fn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Mv=dn(([e])=>{const t=fn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_0",type:"float",inputs:[{name:"v",type:"float"}]}),Bv=Db([Cv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.6616,t)}).setLayout({name:"mx_gradient_scale2d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Fv=Db([Mv,dn(([e])=>{const t=Sn(e).toVar();return Pa(.982,t)}).setLayout({name:"mx_gradient_scale3d_1",type:"vec3",inputs:[{name:"v",type:"vec3"}]})]),Lv=dn(([e,t])=>{const r=yn(t).toVar(),s=bn(e).toVar();return s.shiftLeft(r).bitOr(s.shiftRight(yn(32).sub(r)))}).setLayout({name:"mx_rotl32",type:"uint",inputs:[{name:"x",type:"uint"},{name:"k",type:"int"}]}),Pv=dn(([e,t,r])=>{e.subAssign(r),e.bitXorAssign(Lv(r,yn(4))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(6))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(8))),t.addAssign(e),e.subAssign(r),e.bitXorAssign(Lv(r,yn(16))),r.addAssign(t),t.subAssign(e),t.bitXorAssign(Lv(e,yn(19))),e.addAssign(r),r.subAssign(t),r.bitXorAssign(Lv(t,yn(4))),t.addAssign(e)}),Dv=dn(([e,t,r])=>{const s=bn(r).toVar(),i=bn(t).toVar(),n=bn(e).toVar();return s.bitXorAssign(i),s.subAssign(Lv(i,yn(14))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(11))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(25))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(16))),n.bitXorAssign(s),n.subAssign(Lv(s,yn(4))),i.bitXorAssign(n),i.subAssign(Lv(n,yn(14))),s.bitXorAssign(i),s.subAssign(Lv(i,yn(24))),s}).setLayout({name:"mx_bjfinal",type:"uint",inputs:[{name:"a",type:"uint"},{name:"b",type:"uint"},{name:"c",type:"uint"}]}),Uv=dn(([e])=>{const t=bn(e).toVar();return fn(t).div(fn(bn(yn(4294967295))))}).setLayout({name:"mx_bits_to_01",type:"float",inputs:[{name:"bits",type:"uint"}]}),Iv=dn(([e])=>{const t=fn(e).toVar();return t.mul(t).mul(t).mul(t.mul(t.mul(6).sub(15)).add(10))}).setLayout({name:"mx_fade",type:"float",inputs:[{name:"t",type:"float"}]}),Ov=Db([dn(([e])=>{const t=yn(e).toVar(),r=bn(bn(1)).toVar(),s=bn(bn(yn(3735928559)).add(r.shiftLeft(bn(2))).add(bn(13))).toVar();return Dv(s.add(bn(t)),s,s)}).setLayout({name:"mx_hash_int_0",type:"uint",inputs:[{name:"x",type:"int"}]}),dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(bn(2)).toVar(),n=bn().toVar(),a=bn().toVar(),o=bn().toVar();return n.assign(a.assign(o.assign(bn(yn(3735928559)).add(i.shiftLeft(bn(2))).add(bn(13))))),n.addAssign(bn(s)),a.addAssign(bn(r)),Dv(n,a,o)}).setLayout({name:"mx_hash_int_1",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(bn(3)).toVar(),o=bn().toVar(),u=bn().toVar(),l=bn().toVar();return o.assign(u.assign(l.assign(bn(yn(3735928559)).add(a.shiftLeft(bn(2))).add(bn(13))))),o.addAssign(bn(n)),u.addAssign(bn(i)),l.addAssign(bn(s)),Dv(o,u,l)}).setLayout({name:"mx_hash_int_2",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]}),dn(([e,t,r,s])=>{const i=yn(s).toVar(),n=yn(r).toVar(),a=yn(t).toVar(),o=yn(e).toVar(),u=bn(bn(4)).toVar(),l=bn().toVar(),d=bn().toVar(),c=bn().toVar();return l.assign(d.assign(c.assign(bn(yn(3735928559)).add(u.shiftLeft(bn(2))).add(bn(13))))),l.addAssign(bn(o)),d.addAssign(bn(a)),c.addAssign(bn(n)),Pv(l,d,c),l.addAssign(bn(i)),Dv(l,d,c)}).setLayout({name:"mx_hash_int_3",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"}]}),dn(([e,t,r,s,i])=>{const n=yn(i).toVar(),a=yn(s).toVar(),o=yn(r).toVar(),u=yn(t).toVar(),l=yn(e).toVar(),d=bn(bn(5)).toVar(),c=bn().toVar(),h=bn().toVar(),p=bn().toVar();return c.assign(h.assign(p.assign(bn(yn(3735928559)).add(d.shiftLeft(bn(2))).add(bn(13))))),c.addAssign(bn(l)),h.addAssign(bn(u)),p.addAssign(bn(o)),Pv(c,h,p),c.addAssign(bn(a)),h.addAssign(bn(n)),Dv(c,h,p)}).setLayout({name:"mx_hash_int_4",type:"uint",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xx",type:"int"},{name:"yy",type:"int"}]})]),Vv=Db([dn(([e,t])=>{const r=yn(t).toVar(),s=yn(e).toVar(),i=bn(Ov(s,r)).toVar(),n=En().toVar();return n.x.assign(i.bitAnd(yn(255))),n.y.assign(i.shiftRight(yn(8)).bitAnd(yn(255))),n.z.assign(i.shiftRight(yn(16)).bitAnd(yn(255))),n}).setLayout({name:"mx_hash_vec3_0",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"}]}),dn(([e,t,r])=>{const s=yn(r).toVar(),i=yn(t).toVar(),n=yn(e).toVar(),a=bn(Ov(n,i,s)).toVar(),o=En().toVar();return o.x.assign(a.bitAnd(yn(255))),o.y.assign(a.shiftRight(yn(8)).bitAnd(yn(255))),o.z.assign(a.shiftRight(yn(16)).bitAnd(yn(255))),o}).setLayout({name:"mx_hash_vec3_1",type:"uvec3",inputs:[{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"}]})]),kv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=fn(_v(Rv(Ov(r,s),i,n),Rv(Ov(r.add(yn(1)),s),i.sub(1),n),Rv(Ov(r,s.add(yn(1))),i,n.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=fn(vv(Rv(Ov(r,s,i),n,a,o),Rv(Ov(r.add(yn(1)),s,i),n.sub(1),a,o),Rv(Ov(r,s.add(yn(1)),i),n,a.sub(1),o),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),Rv(Ov(r,s,i.add(yn(1))),n,a,o.sub(1)),Rv(Ov(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),Rv(Ov(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),Rv(Ov(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"}]})]),Gv=Db([dn(([e])=>{const t=Tn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=fn(Tv(t.x,r)).toVar(),n=fn(Tv(t.y,s)).toVar(),a=fn(Iv(i)).toVar(),o=fn(Iv(n)).toVar(),u=Sn(_v(wv(Vv(r,s),i,n),wv(Vv(r.add(yn(1)),s),i.sub(1),n),wv(Vv(r,s.add(yn(1))),i,n.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1))),i.sub(1),n.sub(1)),a,o)).toVar();return Bv(u)}).setLayout({name:"mx_perlin_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn().toVar(),s=yn().toVar(),i=yn().toVar(),n=fn(Tv(t.x,r)).toVar(),a=fn(Tv(t.y,s)).toVar(),o=fn(Tv(t.z,i)).toVar(),u=fn(Iv(n)).toVar(),l=fn(Iv(a)).toVar(),d=fn(Iv(o)).toVar(),c=Sn(vv(wv(Vv(r,s,i),n,a,o),wv(Vv(r.add(yn(1)),s,i),n.sub(1),a,o),wv(Vv(r,s.add(yn(1)),i),n,a.sub(1),o),wv(Vv(r.add(yn(1)),s.add(yn(1)),i),n.sub(1),a.sub(1),o),wv(Vv(r,s,i.add(yn(1))),n,a,o.sub(1)),wv(Vv(r.add(yn(1)),s,i.add(yn(1))),n.sub(1),a,o.sub(1)),wv(Vv(r,s.add(yn(1)),i.add(yn(1))),n,a.sub(1),o.sub(1)),wv(Vv(r.add(yn(1)),s.add(yn(1)),i.add(yn(1))),n.sub(1),a.sub(1),o.sub(1)),u,l,d)).toVar();return Fv(c)}).setLayout({name:"mx_perlin_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"}]})]),$v=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Uv(Ov(r))}).setLayout({name:"mx_cell_noise_float_0",type:"float",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Uv(Ov(r,s))}).setLayout({name:"mx_cell_noise_float_1",type:"float",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Uv(Ov(r,s,i))}).setLayout({name:"mx_cell_noise_float_2",type:"float",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Uv(Ov(r,s,i,n))}).setLayout({name:"mx_cell_noise_float_3",type:"float",inputs:[{name:"p",type:"vec4"}]})]),zv=Db([dn(([e])=>{const t=fn(e).toVar(),r=yn(xv(t)).toVar();return Sn(Uv(Ov(r,yn(0))),Uv(Ov(r,yn(1))),Uv(Ov(r,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"float"}]}),dn(([e])=>{const t=Tn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar();return Sn(Uv(Ov(r,s,yn(0))),Uv(Ov(r,s,yn(1))),Uv(Ov(r,s,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec2"}]}),dn(([e])=>{const t=Sn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar();return Sn(Uv(Ov(r,s,i,yn(0))),Uv(Ov(r,s,i,yn(1))),Uv(Ov(r,s,i,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_2",type:"vec3",inputs:[{name:"p",type:"vec3"}]}),dn(([e])=>{const t=wn(e).toVar(),r=yn(xv(t.x)).toVar(),s=yn(xv(t.y)).toVar(),i=yn(xv(t.z)).toVar(),n=yn(xv(t.w)).toVar();return Sn(Uv(Ov(r,s,i,n,yn(0))),Uv(Ov(r,s,i,n,yn(1))),Uv(Ov(r,s,i,n,yn(2))))}).setLayout({name:"mx_cell_noise_vec3_3",type:"vec3",inputs:[{name:"p",type:"vec4"}]})]),Wv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=fn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(kv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_float",type:"float",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Hv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(0).toVar(),l=fn(1).toVar();return Ep(a,()=>{u.addAssign(l.mul(Gv(o))),l.mulAssign(i),o.mulAssign(n)}),u}).setLayout({name:"mx_fractal_noise_vec3",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),qv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar();return Tn(Wv(o,a,n,i),Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i))}).setLayout({name:"mx_fractal_noise_vec2",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),jv=dn(([e,t,r,s])=>{const i=fn(s).toVar(),n=fn(r).toVar(),a=yn(t).toVar(),o=Sn(e).toVar(),u=Sn(Hv(o,a,n,i)).toVar(),l=fn(Wv(o.add(Sn(yn(19),yn(193),yn(17))),a,n,i)).toVar();return wn(u,l)}).setLayout({name:"mx_fractal_noise_vec4",type:"vec4",inputs:[{name:"p",type:"vec3"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),Xv=Db([dn(([e,t,r,s,i,n,a])=>{const o=yn(a).toVar(),u=fn(n).toVar(),l=yn(i).toVar(),d=yn(s).toVar(),c=yn(r).toVar(),h=yn(t).toVar(),p=Tn(e).toVar(),g=Sn(zv(Tn(h.add(d),c.add(l)))).toVar(),m=Tn(g.x,g.y).toVar();m.subAssign(.5),m.mulAssign(u),m.addAssign(.5);const f=Tn(Tn(fn(h),fn(c)).add(m)).toVar(),y=Tn(f.sub(p)).toVar();return pn(o.equal(yn(2)),()=>Fo(y.x).add(Fo(y.y))),pn(o.equal(yn(3)),()=>jo(Fo(y.x),Fo(y.y))),Zo(y,y)}).setLayout({name:"mx_worley_distance_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),dn(([e,t,r,s,i,n,a,o,u])=>{const l=yn(u).toVar(),d=fn(o).toVar(),c=yn(a).toVar(),h=yn(n).toVar(),p=yn(i).toVar(),g=yn(s).toVar(),m=yn(r).toVar(),f=yn(t).toVar(),y=Sn(e).toVar(),b=Sn(zv(Sn(f.add(p),m.add(h),g.add(c)))).toVar();b.subAssign(.5),b.mulAssign(d),b.addAssign(.5);const x=Sn(Sn(fn(f),fn(m),fn(g)).add(b)).toVar(),T=Sn(x.sub(y)).toVar();return pn(l.equal(yn(2)),()=>Fo(T.x).add(Fo(T.y)).add(Fo(T.z))),pn(l.equal(yn(3)),()=>jo(Fo(T.x),Fo(T.y),Fo(T.z))),Zo(T,T)}).setLayout({name:"mx_worley_distance_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"x",type:"int"},{name:"y",type:"int"},{name:"z",type:"int"},{name:"xoff",type:"int"},{name:"yoff",type:"int"},{name:"zoff",type:"int"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Kv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();l.assign(qo(l,r))})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_float_0",type:"float",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Qv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.y.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec2_0",type:"vec2",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Yv=dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Tn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=Tn(Tv(n.x,a),Tv(n.y,o)).toVar(),l=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{const r=fn(Xv(u,e,t,a,o,i,s)).toVar();pn(r.lessThan(l.x),()=>{l.z.assign(l.y),l.y.assign(l.x),l.x.assign(r)}).ElseIf(r.lessThan(l.y),()=>{l.z.assign(l.y),l.y.assign(r)}).ElseIf(r.lessThan(l.z),()=>{l.z.assign(r)})})}),pn(s.equal(yn(0)),()=>{l.assign(To(l))}),l}).setLayout({name:"mx_worley_noise_vec3_0",type:"vec3",inputs:[{name:"p",type:"vec2"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]}),Zv=Db([Kv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=fn(1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();d.assign(qo(d,n))})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_float_1",type:"float",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),Jv=Db([Qv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Tn(1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.y.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec2_1",type:"vec2",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),eN=Db([Yv,dn(([e,t,r])=>{const s=yn(r).toVar(),i=fn(t).toVar(),n=Sn(e).toVar(),a=yn().toVar(),o=yn().toVar(),u=yn().toVar(),l=Sn(Tv(n.x,a),Tv(n.y,o),Tv(n.z,u)).toVar(),d=Sn(1e6,1e6,1e6).toVar();return Ep({start:-1,end:yn(1),name:"x",condition:"<="},({x:e})=>{Ep({start:-1,end:yn(1),name:"y",condition:"<="},({y:t})=>{Ep({start:-1,end:yn(1),name:"z",condition:"<="},({z:r})=>{const n=fn(Xv(l,e,t,r,a,o,u,i,s)).toVar();pn(n.lessThan(d.x),()=>{d.z.assign(d.y),d.y.assign(d.x),d.x.assign(n)}).ElseIf(n.lessThan(d.y),()=>{d.z.assign(d.y),d.y.assign(n)}).ElseIf(n.lessThan(d.z),()=>{d.z.assign(n)})})})}),pn(s.equal(yn(0)),()=>{d.assign(To(d))}),d}).setLayout({name:"mx_worley_noise_vec3_1",type:"vec3",inputs:[{name:"p",type:"vec3"},{name:"jitter",type:"float"},{name:"metric",type:"int"}]})]),tN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Tn(t).toVar(),p=Tn(r).toVar(),g=Tn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(Sn(v,0),x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise2d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"texcoord",type:"vec2"},{name:"freq",type:"vec2"},{name:"offset",type:"vec2"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),rN=dn(([e,t,r,s,i,n,a,o,u,l,d])=>{const c=yn(e).toVar(),h=Sn(t).toVar(),p=Sn(r).toVar(),g=Sn(s).toVar(),m=fn(i).toVar(),f=fn(n).toVar(),y=fn(a).toVar(),b=xn(o).toVar(),x=yn(u).toVar(),T=fn(l).toVar(),_=fn(d).toVar(),v=h.mul(p).add(g),N=fn(0).toVar();return pn(c.equal(yn(0)),()=>{N.assign(Gv(v))}),pn(c.equal(yn(1)),()=>{N.assign(zv(v))}),pn(c.equal(yn(2)),()=>{N.assign(eN(v,m,yn(0)))}),pn(c.equal(yn(3)),()=>{N.assign(Hv(v,x,T,_))}),N.assign(N.mul(y.sub(f)).add(f)),pn(b,()=>{N.assign(uu(N,f,y))}),N}).setLayout({name:"mx_unifiednoise3d",type:"float",inputs:[{name:"noiseType",type:"int"},{name:"position",type:"vec3"},{name:"freq",type:"vec3"},{name:"offset",type:"vec3"},{name:"jitter",type:"float"},{name:"outmin",type:"float"},{name:"outmax",type:"float"},{name:"clampoutput",type:"bool"},{name:"octaves",type:"int"},{name:"lacunarity",type:"float"},{name:"diminish",type:"float"}]}),sN=dn(([e])=>{const t=e.y,r=e.z,s=Sn().toVar();return pn(t.lessThan(1e-4),()=>{s.assign(Sn(r,r,r))}).Else(()=>{let i=e.x;i=i.sub(vo(i)).mul(6).toVar();const n=yn(Go(i)),a=i.sub(fn(n)),o=r.mul(t.oneMinus()),u=r.mul(t.mul(a).oneMinus()),l=r.mul(t.mul(a.oneMinus()).oneMinus());pn(n.equal(yn(0)),()=>{s.assign(Sn(r,l,o))}).ElseIf(n.equal(yn(1)),()=>{s.assign(Sn(u,r,o))}).ElseIf(n.equal(yn(2)),()=>{s.assign(Sn(o,r,l))}).ElseIf(n.equal(yn(3)),()=>{s.assign(Sn(o,u,r))}).ElseIf(n.equal(yn(4)),()=>{s.assign(Sn(l,o,r))}).Else(()=>{s.assign(Sn(r,o,u))})}),s}).setLayout({name:"mx_hsvtorgb",type:"vec3",inputs:[{name:"hsv",type:"vec3"}]}),iN=dn(([e])=>{const t=Sn(e).toVar(),r=fn(t.x).toVar(),s=fn(t.y).toVar(),i=fn(t.z).toVar(),n=fn(qo(r,qo(s,i))).toVar(),a=fn(jo(r,jo(s,i))).toVar(),o=fn(a.sub(n)).toVar(),u=fn().toVar(),l=fn().toVar(),d=fn().toVar();return d.assign(a),pn(a.greaterThan(0),()=>{l.assign(o.div(a))}).Else(()=>{l.assign(0)}),pn(l.lessThanEqual(0),()=>{u.assign(0)}).Else(()=>{pn(r.greaterThanEqual(a),()=>{u.assign(s.sub(i).div(o))}).ElseIf(s.greaterThanEqual(a),()=>{u.assign(Fa(2,i.sub(r).div(o)))}).Else(()=>{u.assign(Fa(4,r.sub(s).div(o)))}),u.mulAssign(1/6),pn(u.lessThan(0),()=>{u.addAssign(1)})}),Sn(u,l,d)}).setLayout({name:"mx_rgbtohsv",type:"vec3",inputs:[{name:"c",type:"vec3"}]}),nN=dn(([e])=>{const t=Sn(e).toVar(),r=An(ka(t,Sn(.04045))).toVar(),s=Sn(t.div(12.92)).toVar(),i=Sn(eu(jo(t.add(Sn(.055)),Sn(0)).div(1.055),Sn(2.4))).toVar();return ou(s,i,r)}).setLayout({name:"mx_srgb_texture_to_lin_rec709",type:"vec3",inputs:[{name:"color",type:"vec3"}]}),aN=(e,t)=>{e=fn(e),t=fn(t);const r=Tn(t.dFdx(),t.dFdy()).length().mul(.7071067811865476);return cu(e.sub(r),e.add(r),t)},oN=(e,t,r,s)=>ou(e,t,r[s].clamp()),uN=(e,t,r,s,i)=>ou(e,t,aN(r,s[i])),lN=dn(([e,t,r])=>{const s=So(e).toVar(),i=La(fn(.5).mul(t.sub(r)),Zd).div(s).toVar(),n=La(fn(-.5).mul(t.sub(r)),Zd).div(s).toVar(),a=Sn().toVar();a.x=s.x.greaterThan(fn(0)).select(i.x,n.x),a.y=s.y.greaterThan(fn(0)).select(i.y,n.y),a.z=s.z.greaterThan(fn(0)).select(i.z,n.z);const o=qo(a.x,a.y,a.z).toVar();return Zd.add(s.mul(o)).toVar().sub(r)}),dN=dn(([e,t])=>{const r=e.x,s=e.y,i=e.z;let n=t.element(0).mul(.886227);return n=n.add(t.element(1).mul(1.023328).mul(s)),n=n.add(t.element(2).mul(1.023328).mul(i)),n=n.add(t.element(3).mul(1.023328).mul(r)),n=n.add(t.element(4).mul(.858086).mul(r).mul(s)),n=n.add(t.element(5).mul(.858086).mul(s).mul(i)),n=n.add(t.element(6).mul(i.mul(i).mul(.743125).sub(.247708))),n=n.add(t.element(7).mul(.858086).mul(r).mul(i)),n=n.add(t.element(8).mul(.429043).mul(Pa(r,r).sub(Pa(s,s)))),n});var cN=Object.freeze({__proto__:null,BRDF_GGX:tm,BRDF_Lambert:kg,BasicPointShadowFilter:av,BasicShadowFilter:U_,Break:Ap,Const:Bu,Continue:()=>fl("continue").toStack(),DFGLUT:im,D_GGX:Zg,Discard:yl,EPSILON:no,F_Schlick:Vg,Fn:dn,HALF_PI:co,INFINITY:ao,If:pn,Loop:Ep,NodeAccess:si,NodeShaderStage:ei,NodeType:ri,NodeUpdateType:ti,OnBeforeMaterialUpdate:e=>_x(Tx.BEFORE_MATERIAL,e),OnBeforeObjectUpdate:e=>_x(Tx.BEFORE_OBJECT,e),OnMaterialUpdate:e=>_x(Tx.MATERIAL,e),OnObjectUpdate:e=>_x(Tx.OBJECT,e),PCFShadowFilter:I_,PCFSoftShadowFilter:O_,PI:oo,PI2:uo,PointShadowFilter:ov,Return:()=>fl("return").toStack(),Schlick_to_F0:om,ShaderNode:Ji,Stack:gn,Switch:(...e)=>Ni.Switch(...e),TBNViewMatrix:oh,TWO_PI:lo,VSMShadowFilter:V_,V_GGX_SmithCorrelated:Qg,Var:Mu,VarIntent:Fu,abs:Fo,acesFilmicToneMapping:oT,acos:Mo,add:Fa,addMethodChaining:Ri,addNodeElement:function(e){d("TSL: AddNodeElement has been removed in favor of tree-shaking. Trying add",e)},agxToneMapping:cT,all:ho,alphaT:Zn,and:za,anisotropy:Jn,anisotropyB:ta,anisotropyT:ea,any:po,append:e=>(d("TSL: append() has been renamed to Stack().",new Us),gn(e)),array:Ra,arrayBuffer:e=>new _i(e,"ArrayBuffer"),asin:Co,assign:Aa,atan:Bo,atomicAdd:(e,t)=>VT(IT.ATOMIC_ADD,e,t),atomicAnd:(e,t)=>VT(IT.ATOMIC_AND,e,t),atomicFunc:VT,atomicLoad:e=>VT(IT.ATOMIC_LOAD,e,null),atomicMax:(e,t)=>VT(IT.ATOMIC_MAX,e,t),atomicMin:(e,t)=>VT(IT.ATOMIC_MIN,e,t),atomicOr:(e,t)=>VT(IT.ATOMIC_OR,e,t),atomicStore:(e,t)=>VT(IT.ATOMIC_STORE,e,t),atomicSub:(e,t)=>VT(IT.ATOMIC_SUB,e,t),atomicXor:(e,t)=>VT(IT.ATOMIC_XOR,e,t),attenuationColor:ga,attenuationDistance:pa,attribute:El,attributeArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new Nx(e,r,s);return up(i,t,e)},backgroundBlurriness:wx,backgroundIntensity:Cx,backgroundRotation:Mx,batch:_p,bentNormalView:lh,billboarding:Gb,bitAnd:ja,bitNot:Xa,bitOr:Ka,bitXor:Qa,bitangentGeometry:sh,bitangentLocal:ih,bitangentView:nh,bitangentWorld:ah,bitcast:pb,blendBurn:dg,blendColor:gg,blendDodge:cg,blendOverlay:pg,blendScreen:hg,blur:uf,bool:xn,buffer:Vl,bufferAttribute:tl,builtin:Wl,builtinAOContext:Eu,builtinShadowContext:Ru,bumpMap:yh,bvec2:Nn,bvec3:An,bvec4:Bn,bypass:cl,cache:ll,call:Ca,cameraFar:xd,cameraIndex:yd,cameraNear:bd,cameraNormalMatrix:Sd,cameraPosition:Rd,cameraProjectionMatrix:Td,cameraProjectionMatrixInverse:_d,cameraViewMatrix:vd,cameraViewport:Ed,cameraWorldMatrix:Nd,cbrt:nu,cdl:jx,ceil:No,checker:mv,cineonToneMapping:nT,clamp:uu,clearcoat:Hn,clearcoatNormalView:pc,clearcoatRoughness:qn,clipSpace:Xd,code:gT,color:mn,colorSpaceToWorking:zu,colorToDirection:e=>en(e).mul(2).sub(1),compute:al,computeKernel:nl,computeSkinning:(e,t=null)=>{const r=new Np(e);return r.positionNode=up(new j(e.geometry.getAttribute("position").array,3),"vec3").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinIndexNode=up(new j(new Uint32Array(e.geometry.getAttribute("skinIndex").array),4),"uvec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.skinWeightNode=up(new j(e.geometry.getAttribute("skinWeight").array,4),"vec4").setPBO(!0).toReadOnly().element(cp).toVar(),r.bindMatrixNode=Na(e.bindMatrix,"mat4"),r.bindMatrixInverseNode=Na(e.bindMatrixInverse,"mat4"),r.boneMatricesNode=Vl(e.skeleton.boneMatrices,"mat4",e.skeleton.bones.length),r.toPositionNode=t,en(r)},context:vu,convert:Un,convertColorSpace:(e,t,r)=>new Gu(en(e),t,r),convertToTexture:(e,...t)=>e.isSampleNode||e.isTextureNode?e:e.isPassNode?e.getTextureNode():px(e,...t),cos:Ao,countLeadingZeros:bb,countOneBits:xb,countTrailingZeros:yb,cross:Jo,cubeTexture:Bc,cubeTextureBase:Mc,dFdx:Io,dFdy:Oo,dashSize:oa,debug:_l,decrement:ro,decrementBefore:eo,defaultBuildStages:ni,defaultShaderStages:ii,defined:Yi,degrees:mo,deltaTime:Ib,densityFogFactor:xT,depth:tg,depthPass:(e,t,r)=>new tT(tT.DEPTH,e,t,r),determinant:Wo,difference:Yo,diffuseColor:kn,diffuseContribution:Gn,directPointLight:pv,directionToColor:dh,directionToFaceDirection:nc,dispersion:ma,disposeShadowMaterial:G_,distance:Qo,div:Da,dot:Zo,drawIndex:mp,dynamicBufferAttribute:(e,t=null,r=0,s=0)=>el(e,t,r,s,x),element:Dn,emissive:$n,equal:Ia,equirectUV:Eg,exp:fo,exp2:yo,exponentialHeightFogFactor:TT,expression:fl,faceDirection:ic,faceForward:hu,faceforward:yu,float:fn,floatBitsToInt:e=>new hb(e,"int","float"),floatBitsToUint:gb,floor:vo,fog:_T,fract:Ro,frameGroup:xa,frameId:Ob,frontFacing:sc,fwidth:$o,gain:(e,t)=>e.lessThan(.5)?_b(e.mul(2),t).div(2):La(1,_b(Pa(La(1,e),2),t).div(2)),gapSize:ua,getConstNodeType:Zi,getCurrentStack:hn,getDirection:sf,getDistanceAttenuation:hv,getGeometryRoughness:Xg,getNormalFromDepth:fx,getParallaxCorrectNormal:lN,getRoughness:Kg,getScreenPosition:mx,getShIrradianceAt:dN,getShadowMaterial:k_,getShadowRenderObjectFunction:W_,getTextureIndex:lb,getViewPosition:gx,ggxConvolution:hf,globalId:MT,glsl:(e,t)=>gT(e,t,"glsl"),glslFn:(e,t)=>fT(e,t,"glsl"),grayscale:$x,greaterThan:ka,greaterThanEqual:$a,hash:Tb,highpModelNormalViewMatrix:jd,highpModelViewMatrix:qd,hue:Hx,increment:to,incrementBefore:Ja,inspector:Sl,instance:yp,instanceIndex:cp,instancedArray:(e,t="float")=>{let r,s;!0===t.isStruct?(r=t.layout.getLength(),s=Ws("float")):(r=Hs(t),s=Ws(t));const i=new vx(e,r,s);return up(i,t,i.count)},instancedBufferAttribute:rl,instancedDynamicBufferAttribute:sl,instancedMesh:xp,int:yn,intBitsToFloat:e=>new hb(e,"float","int"),interleavedGradientNoise:yx,inverse:Ho,inverseSqrt:_o,inversesqrt:bu,invocationLocalIndex:gp,invocationSubgroupIndex:pp,ior:da,iridescence:Kn,iridescenceIOR:Qn,iridescenceThickness:Yn,isolate:ul,ivec2:_n,ivec3:Rn,ivec4:Cn,js:(e,t)=>gT(e,t,"js"),label:Au,length:Po,lengthSq:au,lessThan:Va,lessThanEqual:Ga,lightPosition:f_,lightProjectionUV:m_,lightShadowMatrix:g_,lightTargetDirection:x_,lightTargetPosition:y_,lightViewPosition:b_,lightingContext:Up,lights:(e=[])=>(new N_).setLights(e),linearDepth:rg,linearToneMapping:sT,localId:BT,log:bo,log2:xo,logarithmicDepthToViewZ:(e,t,r)=>{const s=e.mul(bo(r.div(t)));return fn(Math.E).pow(s).mul(t).negate()},luminance:qx,mat2:Fn,mat3:Ln,mat4:Pn,matcapUV:Qf,materialAO:rp,materialAlphaTest:Th,materialAnisotropy:Vh,materialAnisotropyVector:sp,materialAttenuationColor:jh,materialAttenuationDistance:qh,materialClearcoat:Lh,materialClearcoatNormal:Dh,materialClearcoatRoughness:Ph,materialColor:_h,materialDispersion:ep,materialEmissive:Nh,materialEnvIntensity:vc,materialEnvRotation:Nc,materialIOR:Hh,materialIridescence:kh,materialIridescenceIOR:Gh,materialIridescenceThickness:$h,materialLightMap:tp,materialLineDashOffset:Zh,materialLineDashSize:Kh,materialLineGapSize:Qh,materialLineScale:Xh,materialLineWidth:Yh,materialMetalness:Bh,materialNormal:Fh,materialOpacity:Sh,materialPointSize:Jh,materialReference:Ic,materialReflectivity:Ch,materialRefractionRatio:_c,materialRotation:Uh,materialRoughness:Mh,materialSheen:Ih,materialSheenRoughness:Oh,materialShininess:vh,materialSpecular:Rh,materialSpecularColor:Ah,materialSpecularIntensity:Eh,materialSpecularStrength:wh,materialThickness:Wh,materialTransmission:zh,max:jo,maxMipLevel:Bl,mediumpModelViewMatrix:Hd,metalness:Wn,min:qo,mix:ou,mixElement:gu,mod:Ua,modInt:so,modelDirection:Ud,modelNormalMatrix:$d,modelPosition:Od,modelRadius:Gd,modelScale:Vd,modelViewMatrix:Wd,modelViewPosition:kd,modelViewProjection:ip,modelWorldMatrix:Id,modelWorldMatrixInverse:zd,morphReference:Fp,mrt:cb,mul:Pa,mx_aastep:aN,mx_add:(e,t=fn(0))=>Fa(e,t),mx_atan2:(e=fn(0),t=fn(1))=>Bo(e,t),mx_cell_noise_float:(e=Al())=>$v(e.convert("vec2|vec3")),mx_contrast:(e,t=1,r=.5)=>fn(e).sub(r).mul(t).add(r),mx_divide:(e,t=fn(1))=>Da(e,t),mx_fractal_noise_float:(e=Al(),t=3,r=2,s=.5,i=1)=>Wv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec2:(e=Al(),t=3,r=2,s=.5,i=1)=>qv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec3:(e=Al(),t=3,r=2,s=.5,i=1)=>Hv(e,yn(t),r,s).mul(i),mx_fractal_noise_vec4:(e=Al(),t=3,r=2,s=.5,i=1)=>jv(e,yn(t),r,s).mul(i),mx_frame:()=>Ob,mx_heighttonormal:(e,t)=>(e=Sn(e),t=fn(t),yh(e,t)),mx_hsvtorgb:sN,mx_ifequal:(e,t,r,s)=>e.equal(t).mix(r,s),mx_ifgreater:(e,t,r,s)=>e.greaterThan(t).mix(r,s),mx_ifgreatereq:(e,t,r,s)=>e.greaterThanEqual(t).mix(r,s),mx_invert:(e,t=fn(1))=>La(t,e),mx_modulo:(e,t=fn(1))=>Ua(e,t),mx_multiply:(e,t=fn(1))=>Pa(e,t),mx_noise_float:(e=Al(),t=1,r=0)=>kv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec3:(e=Al(),t=1,r=0)=>Gv(e.convert("vec2|vec3")).mul(t).add(r),mx_noise_vec4:(e=Al(),t=1,r=0)=>{e=e.convert("vec2|vec3");return wn(Gv(e),kv(e.add(Tn(19,73)))).mul(t).add(r)},mx_place2d:(e,t=Tn(.5,.5),r=Tn(1,1),s=fn(0),i=Tn(0,0))=>{let n=e;if(t&&(n=n.sub(t)),r&&(n=n.mul(r)),s){const e=s.mul(Math.PI/180),t=e.cos(),r=e.sin();n=Tn(n.x.mul(t).sub(n.y.mul(r)),n.x.mul(r).add(n.y.mul(t)))}return t&&(n=n.add(t)),i&&(n=n.add(i)),n},mx_power:(e,t=fn(1))=>eu(e,t),mx_ramp4:(e,t,r,s,i=Al())=>{const n=i.x.clamp(),a=i.y.clamp(),o=ou(e,t,n),u=ou(r,s,n);return ou(o,u,a)},mx_ramplr:(e,t,r=Al())=>oN(e,t,r,"x"),mx_ramptb:(e,t,r=Al())=>oN(e,t,r,"y"),mx_rgbtohsv:iN,mx_rotate2d:(e,t)=>{e=Tn(e);const r=(t=fn(t)).mul(Math.PI/180);return ey(e,r)},mx_rotate3d:(e,t,r)=>{e=Sn(e),t=fn(t),r=Sn(r);const s=t.mul(Math.PI/180),i=r.normalize(),n=s.cos(),a=s.sin(),o=fn(1).sub(n);return e.mul(n).add(i.cross(e).mul(a)).add(i.mul(i.dot(e)).mul(o))},mx_safepower:(e,t=1)=>(e=fn(e)).abs().pow(t).mul(e.sign()),mx_separate:(e,t=null)=>{if("string"==typeof t){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3},s=t.replace(/^out/,"").toLowerCase();if(void 0!==r[s])return e.element(r[s])}if("number"==typeof t)return e.element(t);if("string"==typeof t&&1===t.length){const r={x:0,r:0,y:1,g:1,z:2,b:2,w:3,a:3};if(void 0!==r[t])return e.element(r[t])}return e},mx_splitlr:(e,t,r,s=Al())=>uN(e,t,r,s,"x"),mx_splittb:(e,t,r,s=Al())=>uN(e,t,r,s,"y"),mx_srgb_texture_to_lin_rec709:nN,mx_subtract:(e,t=fn(0))=>La(e,t),mx_timer:()=>Ub,mx_transform_uv:(e=1,t=0,r=Al())=>r.mul(e).add(t),mx_unifiednoise2d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>tN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_unifiednoise3d:(e,t=Al(),r=Tn(1,1),s=Tn(0,0),i=1,n=0,a=1,o=!1,u=1,l=2,d=.5)=>rN(e,t.convert("vec2|vec3"),r,s,i,n,a,o,u,l,d),mx_worley_noise_float:(e=Al(),t=1)=>Zv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec2:(e=Al(),t=1)=>Jv(e.convert("vec2|vec3"),t,yn(1)),mx_worley_noise_vec3:(e=Al(),t=1)=>eN(e.convert("vec2|vec3"),t,yn(1)),negate:Do,neutralToneMapping:hT,nodeArray:sn,nodeImmutable:an,nodeObject:en,nodeObjectIntent:tn,nodeObjects:rn,nodeProxy:nn,nodeProxyIntent:on,normalFlat:uc,normalGeometry:ac,normalLocal:oc,normalMap:ph,normalView:cc,normalViewGeometry:lc,normalWorld:hc,normalWorldGeometry:dc,normalize:So,not:Ha,notEqual:Oa,numWorkgroups:wT,objectDirection:Cd,objectGroup:_a,objectPosition:Bd,objectRadius:Pd,objectScale:Fd,objectViewPosition:Ld,objectWorldMatrix:Md,oneMinus:Uo,or:Wa,orthographicDepthToViewZ:Kp,oscSawtooth:(e=Ub)=>e.fract(),oscSine:(e=Ub)=>e.add(.75).mul(2*Math.PI).sin().mul(.5).add(.5),oscSquare:(e=Ub)=>e.fract().round(),oscTriangle:(e=Ub)=>e.add(.5).fract().mul(2).sub(1).abs(),output:aa,outputStruct:nb,overloadingFn:Db,packHalf2x16:Rb,packSnorm2x16:Nb,packUnorm2x16:Sb,parabola:_b,parallaxDirection:uh,parallaxUV:(e,t)=>e.sub(uh.mul(t)),parameter:(e,t)=>new Jy(e,t),pass:(e,t,r)=>new tT(tT.COLOR,e,t,r),passTexture:(e,t)=>new Jx(e,t),pcurve:(e,t,r)=>eu(Da(eu(e,t),Fa(eu(e,t),eu(La(1,e),r))),1/t),perspectiveDepthToViewZ:Zp,pmremTexture:Df,pointShadow:dv,pointUV:Rx,pointWidth:la,positionGeometry:Kd,positionLocal:Qd,positionPrevious:Yd,positionView:ec,positionViewDirection:tc,positionWorld:Zd,positionWorldDirection:Jd,posterize:Xx,pow:eu,pow2:tu,pow3:ru,pow4:su,premultiplyAlpha:mg,property:On,quadBroadcast:c_,quadSwapDiagonal:n_,quadSwapX:s_,quadSwapY:i_,radians:go,rand:pu,range:RT,rangeFogFactor:bT,reciprocal:ko,reference:Pc,referenceBuffer:Dc,reflect:Ko,reflectVector:Ec,reflectView:Sc,reflector:e=>new nx(e),refract:du,refractVector:Ac,refractView:Rc,reinhardToneMapping:iT,remap:pl,remapClamp:gl,renderGroup:Ta,renderOutput:xl,rendererReference:ju,replaceDefaultUV:function(e,t=null){return vu(t,{getUV:"function"==typeof e?e:()=>e})},rotate:ey,rotateUV:Vb,roughness:zn,round:Vo,rtt:px,sRGBTransferEOTF:Ou,sRGBTransferOETF:Vu,sample:(e,t=null)=>new xx(e,en(t)),sampler:e=>(!0===e.isNode?e:Ul(e)).convert("sampler"),samplerComparison:e=>(!0===e.isNode?e:Ul(e)).convert("samplerComparison"),saturate:lu,saturation:zx,screenCoordinate:Yl,screenDPR:Xl,screenSize:Ql,screenUV:Kl,select:Tu,setCurrentStack:cn,setName:Su,shaderStages:ai,shadow:Y_,shadowPositionWorld:R_,shapeCircle:fv,sharedUniformGroup:ba,sheen:jn,sheenRoughness:Xn,shiftLeft:Ya,shiftRight:Za,shininess:na,sign:Lo,sin:Eo,sinc:(e,t)=>Eo(oo.mul(t.mul(e).sub(1))).div(oo.mul(t.mul(e).sub(1))),skinning:Sp,smoothstep:cu,smoothstepElement:mu,specularColor:ra,specularColorBlended:sa,specularF90:ia,spherizeUV:kb,split:(e,t)=>new fi(en(e),t),spritesheetUV:zb,sqrt:To,stack:tb,step:Xo,stepElement:fu,storage:up,storageBarrier:()=>PT("storage").toStack(),storageTexture:Fx,string:(e="")=>new _i(e,"string"),struct:(e,t=null)=>{const r=new rb(e,t),s=(...t)=>{let s=null;if(t.length>0)if(t[0].isNode){s={};const r=Object.keys(e);for(let e=0;eDx(e,t).level(r),texture3DLoad:(...e)=>Dx(...e).setSampler(!1),textureBarrier:()=>PT("texture").toStack(),textureBicubic:Am,textureBicubicLevel:Em,textureCubeUV:nf,textureLevel:(e,t,r)=>Ul(e,t).level(r),textureLoad:Il,textureSize:Cl,textureStore:(e,t,r)=>{let s;return!0===e.isStorageTextureNode?(s=e.clone(),s.uvNode=t,s.storeNode=r):s=Fx(e,t,r),null!==r&&s.toStack(),s},thickness:ha,time:Ub,toneMapping:Ku,toneMappingExposure:Qu,toonOutlinePass:(t,r,s=new e(0,0,0),i=.003,n=1)=>new rT(t,r,en(s),en(i),en(n)),transformDirection:iu,transformNormal:gc,transformNormalToView:mc,transformedClearcoatNormalView:bc,transformedNormalView:fc,transformedNormalWorld:yc,transmission:ca,transpose:zo,triNoise3D:Fb,triplanarTexture:(...e)=>Wb(...e),triplanarTextures:Wb,trunc:Go,uint:bn,uintBitsToFloat:e=>new hb(e,"float","uint"),uniform:Na,uniformArray:$l,uniformCubeTexture:(e=wc)=>Mc(e),uniformFlow:Nu,uniformGroup:ya,uniformTexture:(e=Ll)=>Ul(e),unpackHalf2x16:Cb,unpackNormal:ch,unpackSnorm2x16:Ab,unpackUnorm2x16:wb,unpremultiplyAlpha:fg,userData:(e,t,r)=>new Ux(e,t,r),uv:Al,uvec2:vn,uvec3:En,uvec4:Mn,varying:Uu,varyingProperty:Vn,vec2:Tn,vec3:Sn,vec4:wn,vectorComponents:oi,velocity:Gx,vertexColor:lg,vertexIndex:dp,vertexStage:Iu,vibrance:Wx,viewZToLogarithmicDepth:Jp,viewZToOrthographicDepth:Xp,viewZToPerspectiveDepth:Qp,viewZToReversedOrthographicDepth:(e,t,r)=>e.add(r).div(r.sub(t)),viewZToReversedPerspectiveDepth:Yp,viewport:Zl,viewportCoordinate:ed,viewportDepthTexture:qp,viewportLinearDepth:sg,viewportMipTexture:Gp,viewportOpaqueMipTexture:zp,viewportResolution:rd,viewportSafeUV:$b,viewportSharedTexture:Yx,viewportSize:Jl,viewportTexture:kp,viewportUV:td,vogelDiskSample:bx,wgsl:(e,t)=>gT(e,t,"wgsl"),wgslFn:(e,t)=>fT(e,t,"wgsl"),workgroupArray:(e,t)=>new UT("Workgroup",e,t),workgroupBarrier:()=>PT("workgroup").toStack(),workgroupId:CT,workingToColorSpace:$u,xor:qa});const hN=new Zy;class pN extends _y{constructor(e,t){super(),this.renderer=e,this.nodes=t}update(e,t,r){const s=this.renderer,i=this.nodes.getBackgroundNode(e)||e.background;let n=!1;if(null===i)s._clearColor.getRGB(hN),hN.a=s._clearColor.a;else if(!0===i.isColor)i.getRGB(hN),hN.a=1,n=!0;else if(!0===i.isNode){const u=this.get(e),l=i;hN.copy(s._clearColor);let d=u.backgroundMesh;if(void 0===d){const h=wn(l).mul(Cx).context({getUV:()=>Mx.mul(dc),getTextureLevel:()=>wx}),p=Td.element(3).element(3).equal(1),g=Da(1,Td.element(1).element(1)).mul(3),m=p.select(Qd.mul(g),Qd),f=Wd.mul(wn(m,0));let y=Td.mul(wn(f.xyz,1));y=y.setZ(y.w);const b=new yg;function x(){i.removeEventListener("dispose",x),d.material.dispose(),d.geometry.dispose()}b.name="Background.material",b.side=L,b.depthTest=!1,b.depthWrite=!1,b.allowOverride=!1,b.fog=!1,b.lights=!1,b.vertexNode=y,b.colorNode=h,u.backgroundMeshNode=h,u.backgroundMesh=d=new ue(new it(1,32,32),b),d.frustumCulled=!1,d.name="Background.mesh",i.addEventListener("dispose",x)}const c=l.getCacheKey();u.backgroundCacheKey!==c&&(u.backgroundMeshNode.node=wn(l).mul(Cx),u.backgroundMeshNode.needsUpdate=!0,d.material.needsUpdate=!0,u.backgroundCacheKey=c),t.unshift(d,d.geometry,d.material,0,0,null,null)}else o("Renderer: Unsupported background configuration.",i);const a=s.xr.getEnvironmentBlendMode();if("additive"===a?hN.set(0,0,0,1):"alpha-blend"===a&&hN.set(0,0,0,0),!0===s.autoClear||!0===n){const T=r.clearColorValue;T.r=hN.r,T.g=hN.g,T.b=hN.b,T.a=hN.a,!0!==s.backend.isWebGLBackend&&!0!==s.alpha||(T.r*=T.a,T.g*=T.a,T.b*=T.a),r.depthClearValue=s.getClearDepth(),r.stencilClearValue=s.getClearStencil(),r.clearColor=!0===s.autoClearColor,r.clearDepth=!0===s.autoClearDepth,r.clearStencil=!0===s.autoClearStencil}else r.clearColor=!1,r.clearDepth=!1,r.clearStencil=!1}}let gN=0;class mN{constructor(e="",t=[],r=0){this.name=e,this.bindings=t,this.index=r,this.id=gN++}}class fN{constructor(e,t,r,s,i,n,a,o,u,l=[]){this.vertexShader=e,this.fragmentShader=t,this.computeShader=r,this.transforms=l,this.nodeAttributes=s,this.bindings=i,this.updateNodes=n,this.updateBeforeNodes=a,this.updateAfterNodes=o,this.observer=u,this.usedTimes=0}createBindings(){const e=[];for(const t of this.bindings){if(!0!==t.bindings[0].groupNode.shared){const r=new mN(t.name,[],t.index);e.push(r);for(const e of t.bindings)r.bindings.push(e.clone())}else e.push(t)}return e}}class yN{constructor(e,t,r=null){this.isNodeAttribute=!0,this.name=e,this.type=t,this.node=r}}class bN{constructor(e,t,r){this.isNodeUniform=!0,this.name=e,this.type=t,this.node=r}get value(){return this.node.value}set value(e){this.node.value=e}get id(){return this.node.id}get groupNode(){return this.node.groupNode}}class xN{constructor(e,t,r=!1,s=null){this.isNodeVar=!0,this.name=e,this.type=t,this.readOnly=r,this.count=s}}class TN extends xN{constructor(e,t,r=null,s=null){super(e,t),this.needsInterpolation=!1,this.isNodeVarying=!0,this.interpolationType=r,this.interpolationSampling=s}}class _N{constructor(e,t,r=""){this.name=e,this.type=t,this.code=r,Object.defineProperty(this,"isNodeCode",{value:!0})}}let vN=0;class NN{constructor(e=null){this.id=vN++,this.nodesData=new WeakMap,this.parent=e}getData(e){let t=this.nodesData.get(e);return void 0===t&&null!==this.parent&&(t=this.parent.getData(e)),t}setData(e,t){this.nodesData.set(e,t)}}class SN{constructor(e,t){this.name=e,this.members=t,this.output=!1}}class RN{constructor(e,t){this.name=e,this.value=t,this.boundary=0,this.itemSize=0,this.offset=0,this.index=-1}setValue(e){this.value=e}getValue(){return this.value}}class EN extends RN{constructor(e,t=0){super(e,t),this.isNumberUniform=!0,this.boundary=4,this.itemSize=1}}class AN extends RN{constructor(e,r=new t){super(e,r),this.isVector2Uniform=!0,this.boundary=8,this.itemSize=2}}class wN extends RN{constructor(e,t=new r){super(e,t),this.isVector3Uniform=!0,this.boundary=16,this.itemSize=3}}class CN extends RN{constructor(e,t=new s){super(e,t),this.isVector4Uniform=!0,this.boundary=16,this.itemSize=4}}class MN extends RN{constructor(t,r=new e){super(t,r),this.isColorUniform=!0,this.boundary=16,this.itemSize=3}}class BN extends RN{constructor(e,t=new i){super(e,t),this.isMatrix2Uniform=!0,this.boundary=8,this.itemSize=4}}class FN extends RN{constructor(e,t=new n){super(e,t),this.isMatrix3Uniform=!0,this.boundary=48,this.itemSize=12}}class LN extends RN{constructor(e,t=new a){super(e,t),this.isMatrix4Uniform=!0,this.boundary=64,this.itemSize=16}}class PN extends EN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class DN extends AN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class UN extends wN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class IN extends CN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class ON extends MN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class VN extends BN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class kN extends FN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}class GN extends LN{constructor(e){super(e.name,e.value),this.nodeUniform=e}getValue(){return this.nodeUniform.value}getType(){return this.nodeUniform.type}}let $N=0;const zN=new WeakMap,WN=new WeakMap,HN=new Map([[Int8Array,"int"],[Int16Array,"int"],[Int32Array,"int"],[Uint8Array,"uint"],[Uint16Array,"uint"],[Uint32Array,"uint"],[Float32Array,"float"]]),qN=e=>/e/g.test(e)?String(e).replace(/\+/g,""):(e=Number(e))+(e%1?"":".0");class jN{constructor(e,t,r){this.object=e,this.material=e&&e.material||null,this.geometry=e&&e.geometry||null,this.renderer=t,this.parser=r,this.scene=null,this.camera=null,this.nodes=[],this.sequentialNodes=[],this.updateNodes=[],this.updateBeforeNodes=[],this.updateAfterNodes=[],this.hashNodes={},this.observer=null,this.lightsNode=null,this.environmentNode=null,this.fogNode=null,this.clippingContext=null,this.vertexShader=null,this.fragmentShader=null,this.computeShader=null,this.flowNodes={vertex:[],fragment:[],compute:[]},this.flowCode={vertex:"",fragment:"",compute:""},this.uniforms={vertex:[],fragment:[],compute:[],index:0},this.structs={vertex:[],fragment:[],compute:[],index:0},this.types={vertex:[],fragment:[],compute:[],index:0},this.bindings={vertex:{},fragment:{},compute:{}},this.bindingsIndexes={},this.bindGroups=null,this.attributes=[],this.bufferAttributes=[],this.varyings=[],this.codes={},this.vars={},this.declarations={},this.flow={code:""},this.chaining=[],this.stack=tb(),this.stacks=[],this.tab="\t",this.currentFunctionNode=null,this.context={material:this.material},this.cache=new NN,this.globalCache=this.cache,this.flowsData=new WeakMap,this.shaderStage=null,this.buildStage=null,this.subBuildLayers=[],this.activeStacks=[],this.subBuildFn=null,this.fnCall=null,Object.defineProperty(this,"id",{value:$N++})}isFlatShading(){return!0===this.material.flatShading||!1===this.geometry.hasAttribute("normal")}isOpaque(){const e=this.material;return!1===e.transparent&&e.blending===ze&&!1===e.alphaToCoverage}createRenderTarget(e,t,r){return new ae(e,t,r)}createCubeRenderTarget(e,t){return new Ag(e,t)}includes(e){return this.nodes.includes(e)}getOutputStructName(){}_getBindGroup(e,t){const r=t[0].groupNode;let s,i=r.shared;if(i)for(let e=1;ee.nodeUniform.node.id-t.nodeUniform.node.id);for(const t of e.uniforms)r+=t.nodeUniform.node.id}else r+=e.nodeUniform.id;const i=this.renderer._currentRenderContext||this.renderer;let n=zN.get(i);void 0===n&&(n=new Map,zN.set(i,n));const a=Os(r);s=n.get(a),void 0===s&&(s=new mN(e,t,this.bindingsIndexes[e].group),n.set(a,s))}else s=new mN(e,t,this.bindingsIndexes[e].group);return s}getBindGroupArray(e,t){const r=this.bindings[t];let s=r[e];return void 0===s&&(void 0===this.bindingsIndexes[e]&&(this.bindingsIndexes[e]={binding:0,group:Object.keys(this.bindingsIndexes).length}),r[e]=s=[]),s}getBindings(){let e=this.bindGroups;if(null===e){const t={},r=this.bindings;for(const e of ai)for(const s in r[e]){const i=r[e][s],n=t[s]||(t[s]=[]);for(const e of i)!1===n.includes(e)&&n.push(e)}e=[];for(const r in t){const s=t[r],i=this._getBindGroup(r,s);e.push(i)}this.bindGroups=e}return e}sortBindingGroups(){const e=this.getBindings();e.sort((e,t)=>e.bindings[0].groupNode.order-t.bindings[0].groupNode.order);for(let t=0;t=0?`${Math.round(n)}u`:"0u";if("bool"===i)return n?"true":"false";if("color"===i)return`${this.getType("vec3")}( ${qN(n.r)}, ${qN(n.g)}, ${qN(n.b)} )`;const a=this.getTypeLength(i),o=this.getComponentType(i),u=e=>this.generateConst(o,e);if(2===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)} )`;if(3===a)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)} )`;if(4===a&&"mat2"!==i)return`${this.getType(i)}( ${u(n.x)}, ${u(n.y)}, ${u(n.z)}, ${u(n.w)} )`;if(a>=4&&n&&(n.isMatrix2||n.isMatrix3||n.isMatrix4))return`${this.getType(i)}( ${n.elements.map(u).join(", ")} )`;if(a>4)return`${this.getType(i)}()`;throw new Error(`NodeBuilder: Type '${i}' not found in generate constant attempt.`)}getType(e){return"color"===e?"vec3":e}hasGeometryAttribute(e){return this.geometry&&void 0!==this.geometry.getAttribute(e)}getAttribute(e,t){const r=this.attributes;for(const t of r)if(t.name===e)return t;const s=new yN(e,t);return this.registerDeclaration(s),r.push(s),s}getPropertyName(e){return e.name}isVector(e){return/vec\d/.test(e)}isMatrix(e){return/mat\d/.test(e)}isReference(e){return"void"===e||"property"===e||"sampler"===e||"samplerComparison"===e||"texture"===e||"cubeTexture"===e||"storageTexture"===e||"depthTexture"===e||"texture3D"===e}needsToWorkingColorSpace(){return!1}getComponentTypeFromTexture(e){const t=e.type;if(e.isDataTexture){if(t===R)return"int";if(t===S)return"uint"}return"float"}getElementType(e){return"mat2"===e?"vec2":"mat3"===e?"vec3":"mat4"===e?"vec4":this.getComponentType(e)}getComponentType(e){if("float"===(e=this.getVectorType(e))||"bool"===e||"int"===e||"uint"===e)return e;const t=/(b|i|u|)(vec|mat)([2-4])/.exec(e);return null===t?null:"b"===t[1]?"bool":"i"===t[1]?"int":"u"===t[1]?"uint":"float"}getVectorType(e){return"color"===e?"vec3":"texture"===e||"cubeTexture"===e||"storageTexture"===e||"texture3D"===e?"vec4":e}getTypeFromLength(e,t="float"){if(1===e)return t;let r=zs(e);const s="float"===t?"":t[0];return!0===/mat2/.test(t)&&(r=r.replace("vec","mat")),s+r}getTypeFromArray(e){return HN.get(e.constructor)}isInteger(e){return/int|uint|(i|u)vec/.test(e)}getTypeFromAttribute(e){let t=e;e.isInterleavedBufferAttribute&&(t=e.data);const r=t.array,s=e.itemSize,i=e.normalized;let n;return e instanceof ot||!0===i||(n=this.getTypeFromArray(r)),this.getTypeFromLength(s,n)}getTypeLength(e){const t=this.getVectorType(e),r=/vec([2-4])/.exec(t);return null!==r?Number(r[1]):"float"===t||"bool"===t||"int"===t||"uint"===t?1:!0===/mat2/.test(e)?4:!0===/mat3/.test(e)?9:!0===/mat4/.test(e)?16:0}getVectorFromMatrix(e){return e.replace("mat","vec")}changeComponentType(e,t){return this.getTypeFromLength(this.getTypeLength(e),t)}getIntegerType(e){const t=this.getComponentType(e);return"int"===t||"uint"===t?e:this.changeComponentType(e,"int")}setActiveStack(e){this.activeStacks.push(e)}removeActiveStack(e){if(this.activeStacks[this.activeStacks.length-1]!==e)throw new Error("NodeBuilder: Invalid active stack removal.");this.activeStacks.pop()}getActiveStack(){return this.activeStacks[this.activeStacks.length-1]}getBaseStack(){return this.activeStacks[0]}addStack(){this.stack=tb(this.stack);const e=hn();return this.stacks.push(e),cn(this.stack),this.stack}removeStack(){const e=this.stack;for(const t of e.nodes){this.getDataFromNode(t).stack=e}return this.stack=e.parent,cn(this.stacks.pop()),e}getDataFromNode(e,t=this.shaderStage,r=null){let s=(r=null===r?e.isGlobal(this)?this.globalCache:this.cache:r).getData(e);void 0===s&&(s={},r.setData(e,s)),void 0===s[t]&&(s[t]={});let i=s[t];const n=s.any?s.any.subBuilds:null,a=this.getClosestSubBuild(n);return a&&(void 0===i.subBuildsCache&&(i.subBuildsCache={}),i=i.subBuildsCache[a]||(i.subBuildsCache[a]={}),i.subBuilds=n),i}getNodeProperties(e,t="any"){const r=this.getDataFromNode(e,t);return r.properties||(r.properties={outputNode:null})}getBufferAttributeFromNode(e,t){const r=this.getDataFromNode(e,"vertex");let s=r.bufferAttribute;if(void 0===s){const i=this.uniforms.index++;s=new yN("nodeAttribute"+i,t,e),this.bufferAttributes.push(s),r.bufferAttribute=s}return s}getStructTypeNode(e,t=this.shaderStage){return this.types[t][e]||null}getStructTypeFromNode(e,t,r=null,s=this.shaderStage){const i=this.getDataFromNode(e,s,this.globalCache);let n=i.structType;if(void 0===n){const a=this.structs.index++;null===r&&(r="StructType"+a),n=new SN(r,t),this.structs[s].push(n),this.types[s][r]=e,i.structType=n}return n}getOutputStructTypeFromNode(e,t){const r=this.getStructTypeFromNode(e,t,"OutputType","fragment");return r.output=!0,r}getUniformFromNode(e,t,r=this.shaderStage,s=null){const i=this.getDataFromNode(e,r,this.globalCache);let n=i.uniform;if(void 0===n){const a=this.uniforms.index++;n=new bN(s||"nodeUniform"+a,t,e),this.uniforms[r].push(n),this.registerDeclaration(n),i.uniform=n}return n}getVarFromNode(e,t=null,r=e.getNodeType(this),s=this.shaderStage,i=!1){const n=this.getDataFromNode(e,s),a=this.getSubBuildProperty("variable",n.subBuilds);let o=n[a];if(void 0===o){const u=i?"_const":"_var",l=this.vars[s]||(this.vars[s]=[]),d=this.vars[u]||(this.vars[u]=0);null===t&&(t=(i?"nodeConst":"nodeVar")+d,this.vars[u]++),"variable"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds));const c=e.getArrayCount(this);o=new xN(t,r,i,c),i||l.push(o),this.registerDeclaration(o),n[a]=o}return o}isDeterministic(e){if(e.isMathNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode))&&(!e.cNode||this.isDeterministic(e.cNode));if(e.isOperatorNode)return this.isDeterministic(e.aNode)&&(!e.bNode||this.isDeterministic(e.bNode));if(e.isArrayNode){if(null!==e.values)for(const t of e.values)if(!this.isDeterministic(t))return!1;return!0}return!!e.isConstNode}getVaryingFromNode(e,t=null,r=e.getNodeType(this),s=null,i=null){const n=this.getDataFromNode(e,"any"),a=this.getSubBuildProperty("varying",n.subBuilds);let o=n[a];if(void 0===o){const e=this.varyings,u=e.length;null===t&&(t="nodeVarying"+u),"varying"!==a&&(t=this.getSubBuildProperty(t,n.subBuilds)),o=new TN(t,r,s,i),e.push(o),this.registerDeclaration(o),n[a]=o}return o}registerDeclaration(e){const t=this.shaderStage,r=this.declarations[t]||(this.declarations[t]={}),s=this.getPropertyName(e);let i=1,n=s;for(;void 0!==r[n];)n=s+"_"+i++;i>1&&(e.name=n,d(`TSL: Declaration name '${s}' of '${e.type}' already in use. Renamed to '${n}'.`)),r[n]=e}getCodeFromNode(e,t,r=this.shaderStage){const s=this.getDataFromNode(e);let i=s.code;if(void 0===i){const e=this.codes[r]||(this.codes[r]=[]),n=e.length;i=new _N("nodeCode"+n,t),e.push(i),s.code=i}return i}addFlowCodeHierarchy(e,t){const{flowCodes:r,flowCodeBlock:s}=this.getDataFromNode(e);let i=!0,n=t;for(;n;){if(!0===s.get(n)){i=!1;break}n=this.getDataFromNode(n).parentNodeBlock}if(i)for(const e of r)this.addLineFlowCode(e)}addLineFlowCodeBlock(e,t,r){const s=this.getDataFromNode(e),i=s.flowCodes||(s.flowCodes=[]),n=s.flowCodeBlock||(s.flowCodeBlock=new WeakMap);i.push(t),n.set(r,!0)}addLineFlowCode(e,t=null){return""===e||(null!==t&&this.context.nodeBlock&&this.addLineFlowCodeBlock(t,e,this.context.nodeBlock),e=this.tab+e,/;\s*$/.test(e)||(e+=";\n"),this.flow.code+=e),this}addFlowCode(e){return this.flow.code+=e,this}addFlowTab(){return this.tab+="\t",this}removeFlowTab(){return this.tab=this.tab.slice(0,-1),this}getFlowData(e){return this.flowsData.get(e)}flowNode(e){const t=e.getNodeType(this),r=this.flowChildNode(e,t);return this.flowsData.set(e,r),r}addInclude(e){null!==this.currentFunctionNode&&this.currentFunctionNode.includes.push(e)}buildFunctionNode(e){const t=new mT,r=this.currentFunctionNode;return this.currentFunctionNode=t,t.code=this.buildFunctionCode(e),this.currentFunctionNode=r,t}flowShaderNode(e){const t=e.layout,r={[Symbol.iterator](){let e=0;const t=Object.values(this);return{next:()=>({value:t[e],done:e++>=t.length})}}};for(const e of t.inputs)r[e.name]=new Jy(e.type,e.name);e.layout=null;const s=e.call(r),i=this.flowStagesNode(s,t.type);return e.layout=t,i}flowBuildStage(e,t,r=null){const s=this.getBuildStage();this.setBuildStage(t);const i=e.build(this,r);return this.setBuildStage(s),i}flowStagesNode(e,t=null){const r=this.flow,s=this.vars,i=this.declarations,n=this.cache,a=this.buildStage,o=this.stack,u={code:""};this.flow=u,this.vars={},this.declarations={},this.cache=new NN,this.stack=tb();for(const r of ni)this.setBuildStage(r),u.result=e.build(this,t);return u.vars=this.getVars(this.shaderStage),this.flow=r,this.vars=s,this.declarations=i,this.cache=n,this.stack=o,this.setBuildStage(a),u}getFunctionOperator(){return null}buildFunctionCode(){d("Abstract function.")}flowChildNode(e,t=null){const r=this.flow,s={code:""};return this.flow=s,s.result=e.build(this,t),this.flow=r,s}flowNodeFromShaderStage(e,t,r=null,s=null){const i=this.tab,n=this.cache,a=this.shaderStage,o=this.context;this.setShaderStage(e);const u={...this.context};delete u.nodeBlock,this.cache=this.globalCache,this.tab="\t",this.context=u;let l=null;if("generate"===this.buildStage){const i=this.flowChildNode(t,r);null!==s&&(i.code+=`${this.tab+s} = ${i.result};\n`),this.flowCode[e]=this.flowCode[e]+i.code,l=i}else l=t.build(this);return this.setShaderStage(a),this.cache=n,this.tab=i,this.context=o,l}getAttributesArray(){return this.attributes.concat(this.bufferAttributes)}getAttributes(){d("Abstract function.")}getVaryings(){d("Abstract function.")}getVar(e,t,r=null){return`${null!==r?this.generateArrayDeclaration(e,r):this.getType(e)} ${t}`}getVars(e){let t="";const r=this.vars[e];if(void 0!==r)for(const e of r)t+=`${this.getVar(e.type,e.name)}; `;return t}getUniforms(){d("Abstract function.")}getCodes(e){const t=this.codes[e];let r="";if(void 0!==t)for(const e of t)r+=e.code+"\n";return r}getHash(){return this.vertexShader+this.fragmentShader+this.computeShader}setShaderStage(e){this.shaderStage=e}getShaderStage(){return this.shaderStage}setBuildStage(e){this.buildStage=e}getBuildStage(){return this.buildStage}buildCode(){d("Abstract function.")}get subBuild(){return this.subBuildLayers[this.subBuildLayers.length-1]||null}addSubBuild(e){this.subBuildLayers.push(e)}removeSubBuild(){return this.subBuildLayers.pop()}getClosestSubBuild(e){let t;if(t=e&&e.isNode?e.isShaderCallNodeInternal?e.shaderNode.subBuilds:e.isStackNode?[e.subBuild]:this.getDataFromNode(e,"any").subBuilds:e instanceof Set?[...e]:e,!t)return null;const r=this.subBuildLayers;for(let e=t.length-1;e>=0;e--){const s=t[e];if(r.includes(s))return s}return null}getSubBuildOutput(e){return this.getSubBuildProperty("outputNode",e)}getSubBuildProperty(e="",t=null){let r,s;return r=null!==t?this.getClosestSubBuild(t):this.subBuildFn,s=r?e?r+"_"+e:r:e,s}build(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this)}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}async buildAsync(){const{object:e,material:t,renderer:r}=this;if(null!==t){let e=r.library.fromMaterial(t);null===e&&(o(`NodeMaterial: Material "${t.type}" is not compatible.`),e=new yg),e.build(this)}else this.addFlow("compute",e);for(const e of ni){this.setBuildStage(e),this.context.position&&this.context.position.isNode&&this.flowNodeFromShaderStage("vertex",this.context.position);for(const t of ai){this.setShaderStage(t);const r=this.flowNodes[t];for(const t of r)"generate"===e?this.flowNode(t):t.build(this);await ut()}}return this.setBuildStage(null),this.setShaderStage(null),this.buildCode(),this.buildUpdateNodes(),this}getSharedDataFromNode(e){let t=WN.get(e);return void 0===t&&(t={}),t}getNodeUniform(e,t){const r=this.getSharedDataFromNode(e);let s=r.cache;if(void 0===s){if("float"===t||"int"===t||"uint"===t)s=new PN(e);else if("vec2"===t||"ivec2"===t||"uvec2"===t)s=new DN(e);else if("vec3"===t||"ivec3"===t||"uvec3"===t)s=new UN(e);else if("vec4"===t||"ivec4"===t||"uvec4"===t)s=new IN(e);else if("color"===t)s=new ON(e);else if("mat2"===t)s=new VN(e);else if("mat3"===t)s=new kN(e);else{if("mat4"!==t)throw new Error(`Uniform "${t}" not implemented.`);s=new GN(e)}r.cache=s}return s}format(e,t,r){if((t=this.getVectorType(t))===(r=this.getVectorType(r))||null===r||this.isReference(r))return e;const s=this.getTypeLength(t),i=this.getTypeLength(r);return 16===s&&9===i?`${this.getType(r)}( ${e}[ 0 ].xyz, ${e}[ 1 ].xyz, ${e}[ 2 ].xyz )`:9===s&&4===i?`${this.getType(r)}( ${e}[ 0 ].xy, ${e}[ 1 ].xy )`:s>4||i>4||0===i?e:s===i?`${this.getType(r)}( ${e} )`:s>i?(e="bool"===r?`all( ${e} )`:`${e}.${"xyz".slice(0,i)}`,this.format(e,this.getTypeFromLength(i,this.getComponentType(t)),r)):4===i&&s>1?`${this.getType(r)}( ${this.format(e,t,"vec3")}, 1.0 )`:2===s?`${this.getType(r)}( ${this.format(e,t,"vec2")}, 0.0 )`:(1===s&&i>1&&t!==this.getComponentType(r)&&(e=`${this.getType(this.getComponentType(r))}( ${e} )`),`${this.getType(r)}( ${e} )`)}getSignature(){return`// Three.js r${lt} - Node System\n`}needsPreviousData(){const e=this.renderer.getMRT();return e&&e.has("velocity")||!0===Qs(this.object).useVelocity}}class XN{constructor(){this.time=0,this.deltaTime=0,this.frameId=0,this.renderId=0,this.updateMap=new WeakMap,this.updateBeforeMap=new WeakMap,this.updateAfterMap=new WeakMap,this.renderer=null,this.material=null,this.camera=null,this.object=null,this.scene=null}_getMaps(e,t){let r=e.get(t);return void 0===r&&(r={renderId:0,frameId:0},e.set(t,r)),r}updateBeforeNode(e){const t=e.getUpdateBeforeType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateBeforeMap,r);if(t.frameId!==this.frameId){const r=t.frameId;t.frameId=this.frameId,!1===e.updateBefore(this)&&(t.frameId=r)}}else if(t===ti.RENDER){const t=this._getMaps(this.updateBeforeMap,r);if(t.renderId!==this.renderId){const r=t.renderId;t.renderId=this.renderId,!1===e.updateBefore(this)&&(t.renderId=r)}}else t===ti.OBJECT&&e.updateBefore(this)}updateAfterNode(e){const t=e.getUpdateAfterType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateAfterMap,r);t.frameId!==this.frameId&&!1!==e.updateAfter(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateAfterMap,r);t.renderId!==this.renderId&&!1!==e.updateAfter(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.updateAfter(this)}updateNode(e){const t=e.getUpdateType(),r=e.updateReference(this);if(t===ti.FRAME){const t=this._getMaps(this.updateMap,r);t.frameId!==this.frameId&&!1!==e.update(this)&&(t.frameId=this.frameId)}else if(t===ti.RENDER){const t=this._getMaps(this.updateMap,r);t.renderId!==this.renderId&&!1!==e.update(this)&&(t.renderId=this.renderId)}else t===ti.OBJECT&&e.update(this)}update(){this.frameId++,void 0===this.lastTime&&(this.lastTime=performance.now()),this.deltaTime=(performance.now()-this.lastTime)/1e3,this.lastTime=performance.now(),this.time+=this.deltaTime}}class KN{constructor(e,t,r=null,s="",i=!1){this.type=e,this.name=t,this.count=r,this.qualifier=s,this.isConst=i}}KN.isNodeFunctionInput=!0;class QN extends cv{static get type(){return"AmbientLightNode"}constructor(e=null){super(e)}setup({context:e}){e.irradiance.addAssign(this.colorNode)}}class YN extends cv{static get type(){return"DirectionalLightNode"}constructor(e=null){super(e)}setupDirect(){const e=this.colorNode;return{lightDirection:x_(this.light),lightColor:e}}}class ZN extends cv{static get type(){return"HemisphereLightNode"}constructor(t=null){super(t),this.lightPositionNode=f_(t),this.lightDirectionNode=this.lightPositionNode.normalize(),this.groundColorNode=Na(new e).setGroup(Ta)}update(e){const{light:t}=this;super.update(e),this.lightPositionNode.object3d=t,this.groundColorNode.value.copy(t.groundColor).multiplyScalar(t.intensity)}setup(e){const{colorNode:t,groundColorNode:r,lightDirectionNode:s}=this,i=hc.dot(s).mul(.5).add(.5),n=ou(r,t,i);e.context.irradiance.addAssign(n)}}class JN extends cv{static get type(){return"SpotLightNode"}constructor(e=null){super(e),this.coneCosNode=Na(0).setGroup(Ta),this.penumbraCosNode=Na(0).setGroup(Ta),this.cutoffDistanceNode=Na(0).setGroup(Ta),this.decayExponentNode=Na(0).setGroup(Ta),this.colorNode=Na(this.color).setGroup(Ta)}update(e){super.update(e);const{light:t}=this;this.coneCosNode.value=Math.cos(t.angle),this.penumbraCosNode.value=Math.cos(t.angle*(1-t.penumbra)),this.cutoffDistanceNode.value=t.distance,this.decayExponentNode.value=t.decay}getSpotAttenuation(e,t){const{coneCosNode:r,penumbraCosNode:s}=this;return cu(r,s,t)}getLightCoord(e){const t=e.getNodeProperties(this);let r=t.projectionUV;return void 0===r&&(r=m_(this.light,e.context.positionWorld),t.projectionUV=r),r}setupDirect(e){const{colorNode:t,cutoffDistanceNode:r,decayExponentNode:s,light:i}=this,n=this.getLightVector(e),a=n.normalize(),o=a.dot(x_(i)),u=this.getSpotAttenuation(e,o),l=n.length(),d=hv({lightDistance:l,cutoffDistance:r,decayExponent:s});let c,h,p=t.mul(u).mul(d);if(i.colorNode?(h=this.getLightCoord(e),c=i.colorNode(h)):i.map&&(h=this.getLightCoord(e),c=Ul(i.map,h.xy).onRenderUpdate(()=>i.map)),c){p=h.mul(2).sub(1).abs().lessThan(1).all().select(p.mul(c),p)}return{lightColor:p,lightDirection:a}}}class eS extends JN{static get type(){return"IESSpotLightNode"}getSpotAttenuation(e,t){const r=this.light.iesMap;let s=null;if(r&&!0===r.isTexture){const e=t.acos().mul(1/Math.PI);s=Ul(r,Tn(e,0),0).r}else s=super.getSpotAttenuation(t);return s}}class tS extends cv{static get type(){return"LightProbeNode"}constructor(e=null){super(e);const t=[];for(let e=0;e<9;e++)t.push(new r);this.lightProbe=$l(t)}update(e){const{light:t}=this;super.update(e);for(let e=0;e<9;e++)this.lightProbe.array[e].copy(t.sh.coefficients[e]).multiplyScalar(t.intensity)}setup(e){const t=dN(hc,this.lightProbe);e.context.irradiance.addAssign(t)}}const rS=dn(([e,t])=>{const r=e.abs().sub(t);return Po(jo(r,0)).add(qo(jo(r.x,r.y),0))});class sS extends JN{static get type(){return"ProjectorLightNode"}update(e){super.update(e);const t=this.light;if(this.penumbraCosNode.value=Math.min(Math.cos(t.angle*(1-t.penumbra)),.99999),null===t.aspect){let e=1;null!==t.map&&(e=t.map.width/t.map.height),t.shadow.aspect=e}else t.shadow.aspect=t.aspect}getSpotAttenuation(e){const t=fn(0),r=this.penumbraCosNode,s=g_(this.light).mul(e.context.positionWorld||Zd);return pn(s.w.greaterThan(0),()=>{const e=s.xyz.div(s.w),i=rS(e.xy.sub(Tn(.5)),Tn(.5)),n=Da(-1,La(1,Mo(r)).sub(1));t.assign(lu(i.mul(-2).mul(n)))}),t}}const iS=new a,nS=new a;let aS=null;class oS extends cv{static get type(){return"RectAreaLightNode"}constructor(e=null){super(e),this.halfHeight=Na(new r).setGroup(Ta),this.halfWidth=Na(new r).setGroup(Ta),this.updateType=ti.RENDER}update(e){super.update(e);const{light:t}=this,r=e.camera.matrixWorldInverse;nS.identity(),iS.copy(t.matrixWorld),iS.premultiply(r),nS.extractRotation(iS),this.halfWidth.value.set(.5*t.width,0,0),this.halfHeight.value.set(0,.5*t.height,0),this.halfWidth.value.applyMatrix4(nS),this.halfHeight.value.applyMatrix4(nS)}setupDirectRectArea(e){let t,r;e.isAvailable("float32Filterable")?(t=Ul(aS.LTC_FLOAT_1),r=Ul(aS.LTC_FLOAT_2)):(t=Ul(aS.LTC_HALF_1),r=Ul(aS.LTC_HALF_2));const{colorNode:s,light:i}=this;return{lightColor:s,lightPosition:b_(i),halfWidth:this.halfWidth,halfHeight:this.halfHeight,ltc_1:t,ltc_2:r}}static setLTC(e){aS=e}}class uS{parseFunction(){d("Abstract function.")}}class lS{constructor(e,t,r="",s=""){this.type=e,this.inputs=t,this.name=r,this.precision=s}getCode(){d("Abstract function.")}}lS.isNodeFunction=!0;const dS=/^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i,cS=/[a-z_0-9]+/gi,hS="#pragma main";class pS extends lS{constructor(e){const{type:t,inputs:r,name:s,precision:i,inputsCode:n,blockCode:a,headerCode:o}=(e=>{const t=(e=e.trim()).indexOf(hS),r=-1!==t?e.slice(t+12):e,s=r.match(dS);if(null!==s&&5===s.length){const i=s[4],n=[];let a=null;for(;null!==(a=cS.exec(i));)n.push(a);const o=[];let u=0;for(;u{let r=this._createNodeBuilder(e,e.material);try{t?await r.buildAsync():r.build()}catch(s){r=this._createNodeBuilder(e,new yg),t?await r.buildAsync():r.build(),o("TSL: "+s)}return r})().then(e=>(s=this._createNodeBuilderState(e),i.set(n,s),s.usedTimes++,r.nodeBuilderState=s,s));{let t=this._createNodeBuilder(e,e.material);try{t.build()}catch(r){t=this._createNodeBuilder(e,new yg),t.build();let s=r.stackTrace;!s&&r.stack&&(s=new Us(r.stack)),o("TSL: "+r,s)}s=this._createNodeBuilderState(t),i.set(n,s)}}s.usedTimes++,r.nodeBuilderState=s}return s}getForRenderAsync(e){const t=this.getForRender(e,!0);return t.then?t:Promise.resolve(t)}getForRenderDeferred(e){const t=this.get(e);if(void 0!==t.nodeBuilderState)return t.nodeBuilderState;const r=this.getForRenderCacheKey(e),s=this.nodeBuilderCache.get(r);return void 0!==s?(s.usedTimes++,t.nodeBuilderState=s,s):(!0!==t.pendingBuild&&(t.pendingBuild=!0,this._buildQueue.push(()=>this.getForRenderAsync(e).then(()=>{t.pendingBuild=!1})),this._processBuildQueue()),null)}_processBuildQueue(){if(this._buildInProgress||0===this._buildQueue.length)return;this._buildInProgress=!0;this._buildQueue.shift()().then(()=>{this._buildInProgress=!1,this._processBuildQueue()})}delete(e){if(e.isRenderObject){const t=this.get(e).nodeBuilderState;t.usedTimes--,0===t.usedTimes&&this.nodeBuilderCache.delete(this.getForRenderCacheKey(e))}return super.delete(e)}getForCompute(e){const t=this.get(e);let r=t.nodeBuilderState;if(void 0===r){const s=this.backend.createNodeBuilder(e,this.renderer);s.build(),r=this._createNodeBuilderState(s),t.nodeBuilderState=r}return r}_createNodeBuilderState(e){return new fN(e.vertexShader,e.fragmentShader,e.computeShader,e.getAttributesArray(),e.getBindings(),e.updateNodes,e.updateBeforeNodes,e.updateAfterNodes,e.observer,e.transforms)}getEnvironmentNode(e){this.updateEnvironment(e);let t=null;if(e.environmentNode&&e.environmentNode.isNode)t=e.environmentNode;else{const r=this.get(e);r.environmentNode&&(t=r.environmentNode)}return t}getBackgroundNode(e){this.updateBackground(e);let t=null;if(e.backgroundNode&&e.backgroundNode.isNode)t=e.backgroundNode;else{const r=this.get(e);r.backgroundNode&&(t=r.backgroundNode)}return t}getFogNode(e){return this.updateFog(e),e.fogNode||this.get(e).fogNode||null}getCacheKey(e,t){fS[0]=e,fS[1]=t;const r=this.renderer.info.calls,s=this.callHashCache.get(fS)||{};if(s.callId!==r){const i=this.getEnvironmentNode(e),n=this.getFogNode(e);t&&yS.push(t.getCacheKey(!0)),i&&yS.push(i.getCacheKey()),n&&yS.push(n.getCacheKey()),yS.push(this.renderer.getOutputRenderTarget()&&this.renderer.getOutputRenderTarget().multiview?1:0),yS.push(this.renderer.shadowMap.enabled?1:0),yS.push(this.renderer.shadowMap.type),s.callId=r,s.cacheKey=Vs(yS),this.callHashCache.set(fS,s),yS.length=0}return fS[0]=null,fS[1]=null,s.cacheKey}get isToneMappingState(){return!this.renderer.getRenderTarget()}updateBackground(e){const t=this.get(e),r=e.background;if(r){const s=0===e.backgroundBlurriness&&t.backgroundBlurriness>0||e.backgroundBlurriness>0&&0===t.backgroundBlurriness;if(t.background!==r||s){const i=this.getCacheNode("background",r,()=>{if(!0===r.isCubeTexture||r.mapping===he||r.mapping===pe||r.mapping===we){if(e.backgroundBlurriness>0||r.mapping===we)return Df(r);{let e;return e=!0===r.isCubeTexture?Bc(r):Ul(r),Fg(e)}}if(!0===r.isTexture)return Ul(r,Kl.flipY()).setUpdateMatrix(!0);!0!==r.isColor&&o("WebGPUNodes: Unsupported background configuration.",r)},s);t.backgroundNode=i,t.background=r,t.backgroundBlurriness=e.backgroundBlurriness}}else t.backgroundNode&&(delete t.backgroundNode,delete t.background)}getCacheNode(e,t,r,s=!1){const i=this.cacheLib[e]||(this.cacheLib[e]=new WeakMap);let n=i.get(t);return(void 0===n||s)&&(n=r(),i.set(t,n)),n}updateFog(e){const t=this.get(e),r=e.fog;if(r){if(t.fog!==r){const e=this.getCacheNode("fog",r,()=>{if(r.isFogExp2){const e=Pc("color","color",r).setGroup(Ta),t=Pc("density","float",r).setGroup(Ta);return _T(e,xT(t))}if(r.isFog){const e=Pc("color","color",r).setGroup(Ta),t=Pc("near","float",r).setGroup(Ta),s=Pc("far","float",r).setGroup(Ta);return _T(e,bT(t,s))}o("Renderer: Unsupported fog configuration.",r)});t.fogNode=e,t.fog=r}}else delete t.fogNode,delete t.fog}updateEnvironment(e){const t=this.get(e),r=e.environment;if(r){if(t.environment!==r){const e=this.getCacheNode("environment",r,()=>!0===r.isCubeTexture?Bc(r):!0===r.isTexture?Ul(r):void o("Nodes: Unsupported environment configuration.",r));t.environmentNode=e,t.environment=r}}else t.environmentNode&&(delete t.environmentNode,delete t.environment)}getNodeFrame(e=this.renderer,t=null,r=null,s=null,i=null){const n=this.nodeFrame;return n.renderer=e,n.scene=t,n.object=r,n.camera=s,n.material=i,n}getNodeFrameForRender(e){return this.getNodeFrame(e.renderer,e.scene,e.object,e.camera,e.material)}getOutputCacheKey(){const e=this.renderer;return e.toneMapping+","+e.currentColorSpace+","+e.xr.isPresenting}hasOutputChange(e){return mS.get(e)!==this.getOutputCacheKey()}getOutputNode(e){const t=this.renderer,r=this.getOutputCacheKey(),s=e.isArrayTexture?Dx(e,Sn(Kl,Wl("gl_ViewID_OVR"))).renderOutput(t.toneMapping,t.currentColorSpace):Ul(e,Kl).renderOutput(t.toneMapping,t.currentColorSpace);return mS.set(e,r),s}updateBefore(e){const t=e.getNodeBuilderState();for(const r of t.updateBeforeNodes)this.getNodeFrameForRender(e).updateBeforeNode(r)}updateAfter(e){const t=e.getNodeBuilderState();for(const r of t.updateAfterNodes)this.getNodeFrameForRender(e).updateAfterNode(r)}updateForCompute(e){const t=this.getNodeFrame(),r=this.getForCompute(e);for(const e of r.updateNodes)t.updateNode(e)}updateForRender(e){const t=this.getNodeFrameForRender(e),r=e.getNodeBuilderState();for(const e of r.updateNodes)t.updateNode(e)}needsRefresh(e){const t=this.getNodeFrameForRender(e);return e.getMonitor().needsRefresh(e,t)}dispose(){super.dispose(),this.nodeFrame=new XN,this.nodeBuilderCache=new Map,this.cacheLib={}}}const xS=new Xe;class TS{constructor(e=null){this.version=0,this.clipIntersection=null,this.cacheKey="",this.shadowPass=!1,this.viewNormalMatrix=new n,this.clippingGroupContexts=new WeakMap,this.intersectionPlanes=[],this.unionPlanes=[],this.parentVersion=null,null!==e&&(this.viewNormalMatrix=e.viewNormalMatrix,this.clippingGroupContexts=e.clippingGroupContexts,this.shadowPass=e.shadowPass,this.viewMatrix=e.viewMatrix)}projectPlanes(e,t,r){const s=e.length;for(let i=0;i0,alpha:!0,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:this.getFramebufferScaleFactor()},i=new XRWebGLLayer(e,s,r);this._glBaseLayer=i,e.updateRenderState({baseLayer:i}),t.setPixelRatio(1),t._setXRLayerSize(i.framebufferWidth,i.framebufferHeight),this._xrRenderTarget=new wS(i.framebufferWidth,i.framebufferHeight,{format:Ae,type:$e,colorSpace:t.outputColorSpace,stencilBuffer:t.stencil,resolveDepthBuffer:!1===i.ignoreDepthValues,resolveStencilBuffer:!1===i.ignoreDepthValues}),this._xrRenderTarget._isOpaqueFramebuffer=!0,this._referenceSpace=await e.requestReferenceSpace(this.getReferenceSpaceType())}this.setFoveation(this.getFoveation()),t._animation.setAnimationLoop(this._onAnimationFrame),t._animation.setContext(e),t._animation.start(),this.isPresenting=!0,this.dispatchEvent({type:"sessionstart"})}}updateCamera(e){const t=this._session;if(null===t)return;const r=e.near,s=e.far,i=this._cameraXR,n=this._cameraL,a=this._cameraR;i.near=a.near=n.near=r,i.far=a.far=n.far=s,i.isMultiViewCamera=this._useMultiview,this._currentDepthNear===i.near&&this._currentDepthFar===i.far||(t.updateRenderState({depthNear:i.near,depthFar:i.far}),this._currentDepthNear=i.near,this._currentDepthFar=i.far),i.layers.mask=6|e.layers.mask,n.layers.mask=-5&i.layers.mask,a.layers.mask=-3&i.layers.mask;const o=e.parent,u=i.cameras;FS(i,o);for(let e=0;e=0&&(r[n]=null,t[n].disconnect(i))}for(let s=0;s=r.length){r.push(i),n=e;break}if(null===r[e]){r[e]=i,n=e;break}}if(-1===n)break}const a=t[n];a&&a.connect(i)}}function US(e){return"quad"===e.type?this._glBinding.createQuadLayer({transform:new XRRigidTransform(e.translation,e.quaternion),width:e.width/2,height:e.height/2,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1}):this._glBinding.createCylinderLayer({transform:new XRRigidTransform(e.translation,e.quaternion),radius:e.radius,centralAngle:e.centralAngle,aspectRatio:e.aspectRatio,space:this._referenceSpace,viewPixelWidth:e.pixelwidth,viewPixelHeight:e.pixelheight,clearOnAccess:!1})}function IS(e,t){if(void 0===t)return;const r=this._cameraXR,i=this._renderer,n=i.backend,a=this._glBaseLayer,o=this.getReferenceSpace(),u=t.getViewerPose(o);if(this._xrFrame=t,null!==u){const e=u.views;null!==this._glBaseLayer&&n.setXRTarget(a.framebuffer);let t=!1;e.length!==r.cameras.length&&(r.cameras.length=0,t=!0);for(let i=0;i{await this.compileAsync(e,t);const s=this._renderLists.get(e,t),i=this._renderContexts.get(this._renderTarget,this._mrt),n=e.overrideMaterial||r.material,a=this._objects.get(r,n,e,t,s.lightsNode,i,i.clippingContext),{fragmentShader:o,vertexShader:u}=a.getNodeBuilderState();return{fragmentShader:o,vertexShader:u}}}}async init(){return null!==this._initPromise||(this._initPromise=new Promise(async(e,t)=>{let r=this.backend;try{await r.init(this)}catch(e){if(null===this._getFallback)return void t(e);try{this.backend=r=this._getFallback(e),await r.init(this)}catch(e){return void t(e)}}this._nodes=new bS(this,r),this._animation=new my(this,this._nodes,this.info),this._attributes=new Ay(r),this._background=new pN(this,this._nodes),this._geometries=new By(this._attributes,this.info),this._textures=new Yy(this,r,this.info),this._pipelines=new Oy(r,this._nodes),this._bindings=new Vy(r,this._nodes,this._textures,this._attributes,this._pipelines,this.info),this._objects=new Ty(this,this._nodes,this._geometries,this._pipelines,this._bindings,this.info),this._renderLists=new Hy(this.lighting),this._bundles=new NS,this._renderContexts=new Ky(this),this._animation.start(),this._initialized=!0,this._inspector.init(),e(this)})),this._initPromise}get domElement(){return this._canvasTarget.domElement}get coordinateSystem(){return this.backend.coordinateSystem}async compileAsync(e,t,r=null){if(!0===this._isDeviceLost)return;!1===this._initialized&&await this.init();const s=this._nodes.nodeFrame,i=s.renderId,n=this._currentRenderContext,a=this._currentRenderObjectFunction,o=this._handleObjectFunction,u=this._compilationPromises;null===r&&(r=e);const l=!0===e.isScene?e:!0===r.isScene?r:VS,d=this.needsFrameBufferTarget&&null===this._renderTarget?this._getFrameBufferTarget():this._renderTarget||this._outputRenderTarget,c=this._renderContexts.get(d,this._mrt),h=this._activeMipmapLevel,p=[];this._currentRenderContext=c,this._currentRenderObjectFunction=this.renderObject,this._handleObjectFunction=this._createObjectPipeline,this._compilationPromises=p,s.renderId++,s.update(),c.depth=this.depth,c.stencil=this.stencil,c.clippingContext||(c.clippingContext=new TS),c.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,d);const g=this._renderLists.get(l,t);if(g.begin(),this._projectObject(e,t,0,g,c.clippingContext),r!==e&&r.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&g.pushLight(e)}),g.finish(),null!==d){this._textures.updateRenderTarget(d,h);const e=this._textures.get(d);c.textures=e.textures,c.depthTexture=e.depthTexture}else c.textures=null,c.depthTexture=null;r!==e?this._background.update(r,g,c):this._background.update(l,g,c);const m=g.opaque,f=g.transparent,y=g.transparentDoublePass,b=g.lightsNode;!0===this.opaque&&m.length>0&&this._renderObjects(m,t,l,b),!0===this.transparent&&f.length>0&&this._renderTransparents(f,y,t,l,b),s.renderId=i,this._currentRenderContext=n,this._currentRenderObjectFunction=a,this._handleObjectFunction=o,this._compilationPromises=u;for(const e of p){const t=this._objects.get(e.object,e.material,e.scene,e.camera,e.lightsNode,e.renderContext,e.clippingContext,e.passId);t.drawRange=e.object.geometry.drawRange,t.group=e.group,this._geometries.updateForRender(t),await this._nodes.getForRenderAsync(t),this._nodes.updateBefore(t),this._nodes.updateForRender(t),this._bindings.updateForRender(t);const r=[];this._pipelines.getForRender(t,r),r.length>0&&await Promise.all(r),this._nodes.updateAfter(t),await ut()}}async renderAsync(e,t){v('Renderer: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.render(e,t)}async waitForGPU(){o("Renderer: waitForGPU() has been removed. Read https://github.com/mrdoob/three.js/issues/32012 for more information.")}set inspector(e){null!==this._inspector&&this._inspector.setRenderer(null),this._inspector=e,this._inspector.setRenderer(this)}get inspector(){return this._inspector}set highPrecision(e){const t=this.contextNode.value;!0===e?(t.modelViewMatrix=qd,t.modelNormalViewMatrix=jd):this.highPrecision&&(delete t.modelViewMatrix,delete t.modelNormalViewMatrix)}get highPrecision(){const e=this.contextNode.value;return e.modelViewMatrix===qd&&e.modelNormalViewMatrix===jd}setMRT(e){return this._mrt=e,this}getMRT(){return this._mrt}getOutputBufferType(){return this._outputBufferType}getColorBufferType(){return v('Renderer: ".getColorBufferType()" has been renamed to ".getOutputBufferType()".'),this.getOutputBufferType()}_onDeviceLost(e){let t=`THREE.WebGPURenderer: ${e.api} Device Lost:\n\nMessage: ${e.message}`;e.reason&&(t+=`\nReason: ${e.reason}`),o(t),this._isDeviceLost=!0}_renderBundle(e,t,r){const{bundleGroup:s,camera:i,renderList:n}=e,a=this._currentRenderContext,o=this._bundles.get(s,i),u=this.backend.get(o);void 0===u.renderContexts&&(u.renderContexts=new Set);const l=s.version!==u.version,d=!1===u.renderContexts.has(a)||l;if(u.renderContexts.add(a),d){this.backend.beginBundle(a),(void 0===u.renderObjects||l)&&(u.renderObjects=[]),this._currentRenderBundle=o;const{transparentDoublePass:e,transparent:d,opaque:c}=n;!0===this.opaque&&c.length>0&&this._renderObjects(c,i,t,r),!0===this.transparent&&d.length>0&&this._renderTransparents(d,e,i,t,r),this._currentRenderBundle=null,this.backend.finishBundle(a,o),u.version=s.version}else{const{renderObjects:e}=u;for(let t=0,r=e.length;t>=h,g.viewportValue.height>>=h,g.viewportValue.minDepth=T,g.viewportValue.maxDepth=_,g.viewport=!1===g.viewportValue.equals(GS),g.scissorValue.copy(b).multiplyScalar(x).floor(),g.scissor=f._scissorTest&&!1===g.scissorValue.equals(GS),g.scissorValue.width>>=h,g.scissorValue.height>>=h,g.clippingContext||(g.clippingContext=new TS),g.clippingContext.updateGlobal(l,t),l.onBeforeRender(this,e,t,p);const v=t.isArrayCamera?zS:$S;t.isArrayCamera||(WS.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),v.setFromProjectionMatrix(WS,t.coordinateSystem,t.reversedDepth));const N=this._renderLists.get(e,t);if(N.begin(),this._projectObject(e,t,0,N,g.clippingContext),N.finish(),!0===this.sortObjects&&N.sort(this._opaqueSort,this._transparentSort),null!==p){this._textures.updateRenderTarget(p,h);const e=this._textures.get(p);g.textures=e.textures,g.depthTexture=e.depthTexture,g.width=e.width,g.height=e.height,g.renderTarget=p,g.depth=p.depthBuffer,g.stencil=p.stencilBuffer}else g.textures=null,g.depthTexture=null,g.width=kS.width,g.height=kS.height,g.depth=this.depth,g.stencil=this.stencil;g.width>>=h,g.height>>=h,g.activeCubeFace=c,g.activeMipmapLevel=h,g.occlusionQueryCount=N.occlusionQueryCount,g.scissorValue.max(HS.set(0,0,0,0)),g.scissorValue.x+g.scissorValue.width>g.width&&(g.scissorValue.width=Math.max(g.width-g.scissorValue.x,0)),g.scissorValue.y+g.scissorValue.height>g.height&&(g.scissorValue.height=Math.max(g.height-g.scissorValue.y,0)),this._background.update(l,N,g),g.camera=t,this.backend.beginRender(g);const{bundles:S,lightsNode:R,transparentDoublePass:E,transparent:A,opaque:w}=N;return S.length>0&&this._renderBundles(S,l,R),!0===this.opaque&&w.length>0&&this._renderObjects(w,t,l,R),!0===this.transparent&&A.length>0&&this._renderTransparents(A,E,t,l,R),this.backend.finishRender(g),i.renderId=n,this._currentRenderContext=a,this._currentRenderObjectFunction=o,this._handleObjectFunction=u,this._callDepth--,null!==s&&(this.setRenderTarget(d,c,h),this._renderOutput(p)),l.onAfterRender(this,e,t,p),this.inspector.finishRender(this.backend.getTimestampUID(g)),g}_setXRLayerSize(e,t){this._canvasTarget._width=e,this._canvasTarget._height=t,this.setViewport(0,0,e,t)}_renderOutput(e){const t=this._quad;this._nodes.hasOutputChange(e.texture)&&(t.material.fragmentNode=this._nodes.getOutputNode(e.texture),t.material.needsUpdate=!0);const r=this.autoClear,s=this.xr.enabled;this.autoClear=!1,this.xr.enabled=!1,this._renderScene(t,t.camera,!1),this.autoClear=r,this.xr.enabled=s}getMaxAnisotropy(){return this.backend.getMaxAnisotropy()}getActiveCubeFace(){return this._activeCubeFace}getActiveMipmapLevel(){return this._activeMipmapLevel}async setAnimationLoop(e){!1===this._initialized&&await this.init(),this._animation.setAnimationLoop(e)}getAnimationLoop(){return this._animation.getAnimationLoop()}async getArrayBufferAsync(e){return await this.backend.getArrayBufferAsync(e)}getContext(){return this.backend.getContext()}getPixelRatio(){return this._canvasTarget.getPixelRatio()}getDrawingBufferSize(e){return this._canvasTarget.getDrawingBufferSize(e)}getSize(e){return this._canvasTarget.getSize(e)}setPixelRatio(e=1){this._canvasTarget.setPixelRatio(e)}setDrawingBufferSize(e,t,r){this.xr&&this.xr.isPresenting||this._canvasTarget.setDrawingBufferSize(e,t,r)}setSize(e,t,r=!0){this.xr&&this.xr.isPresenting||this._canvasTarget.setSize(e,t,r)}setOpaqueSort(e){this._opaqueSort=e}setTransparentSort(e){this._transparentSort=e}getScissor(e){return this._canvasTarget.getScissor(e)}setScissor(e,t,r,s){this._canvasTarget.setScissor(e,t,r,s)}getScissorTest(){return this._canvasTarget.getScissorTest()}setScissorTest(e){this._canvasTarget.setScissorTest(e),this.backend.setScissorTest(e)}getViewport(e){return this._canvasTarget.getViewport(e)}setViewport(e,t,r,s,i=0,n=1){this._canvasTarget.setViewport(e,t,r,s,i,n)}getClearColor(e){return e.copy(this._clearColor)}setClearColor(e,t=1){this._clearColor.set(e),this._clearColor.a=t}getClearAlpha(){return this._clearColor.a}setClearAlpha(e){this._clearColor.a=e}getClearDepth(){return!0===this.reversedDepthBuffer?1-this._clearDepth:this._clearDepth}setClearDepth(e){this._clearDepth=e}getClearStencil(){return this._clearStencil}setClearStencil(e){this._clearStencil=e}isOccluded(e){const t=this._currentRenderContext;return t&&this.backend.isOccluded(t,e)}clear(e=!0,t=!0,r=!0){if(!1===this._initialized)throw new Error('Renderer: .clear() called before the backend is initialized. Use "await renderer.init();" before before using this method.');const s=this._renderTarget||this._getFrameBufferTarget();let i=null;if(null!==s){this._textures.updateRenderTarget(s);const e=this._textures.get(s);i=this._renderContexts.get(s),i.textures=e.textures,i.depthTexture=e.depthTexture,i.width=e.width,i.height=e.height,i.renderTarget=s,i.depth=s.depthBuffer,i.stencil=s.stencilBuffer;const t=this.backend.getClearColor();i.clearColorValue.r=t.r,i.clearColorValue.g=t.g,i.clearColorValue.b=t.b,i.clearColorValue.a=t.a,i.clearDepthValue=this.getClearDepth(),i.clearStencilValue=this.getClearStencil(),i.activeCubeFace=this.getActiveCubeFace(),i.activeMipmapLevel=this.getActiveMipmapLevel()}this.backend.clear(e,t,r,i),null!==s&&null===this._renderTarget&&this._renderOutput(s)}clearColor(){this.clear(!0,!1,!1)}clearDepth(){this.clear(!1,!0,!1)}clearStencil(){this.clear(!1,!1,!0)}async clearAsync(e=!0,t=!0,r=!0){v('Renderer: "clearAsync()" has been deprecated. Use "clear()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.clear(e,t,r)}async clearColorAsync(){v('Renderer: "clearColorAsync()" has been deprecated. Use "clearColor()" and "await renderer.init();" when creating the renderer.'),this.clear(!0,!1,!1)}async clearDepthAsync(){v('Renderer: "clearDepthAsync()" has been deprecated. Use "clearDepth()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!0,!1)}async clearStencilAsync(){v('Renderer: "clearStencilAsync()" has been deprecated. Use "clearStencil()" and "await renderer.init();" when creating the renderer.'),this.clear(!1,!1,!0)}get needsFrameBufferTarget(){const e=this.currentToneMapping!==m,t=this.currentColorSpace!==p.workingColorSpace;return e||t}get samples(){return this._samples}get currentSamples(){let e=this._samples;return null!==this._renderTarget?e=this._renderTarget.samples:this.needsFrameBufferTarget&&(e=0),e}get currentToneMapping(){return this.isOutputTarget?this.toneMapping:m}get currentColorSpace(){return this.isOutputTarget?this.outputColorSpace:p.workingColorSpace}get isOutputTarget(){return this._renderTarget===this._outputRenderTarget||null===this._renderTarget}dispose(){!0===this._initialized&&(this.info.dispose(),this.backend.dispose(),this._animation.dispose(),this._objects.dispose(),this._geometries.dispose(),this._pipelines.dispose(),this._nodes.dispose(),this._bindings.dispose(),this._renderLists.dispose(),this._renderContexts.dispose(),this._textures.dispose(),null!==this._frameBufferTarget&&this._frameBufferTarget.dispose(),Object.values(this.backend.timestampQueryPool).forEach(e=>{null!==e&&e.dispose()})),this.setRenderTarget(null),this.setAnimationLoop(null)}setRenderTarget(e,t=0,r=0){this._renderTarget=e,this._activeCubeFace=t,this._activeMipmapLevel=r}getRenderTarget(){return this._renderTarget}setOutputRenderTarget(e){this._outputRenderTarget=e}getOutputRenderTarget(){return this._outputRenderTarget}setCanvasTarget(e){this._canvasTarget.removeEventListener("resize",this._onCanvasTargetResize),this._canvasTarget=e,this._canvasTarget.addEventListener("resize",this._onCanvasTargetResize)}getCanvasTarget(){return this._canvasTarget}_resetXRState(){this.backend.setXRTarget(null),this.setOutputRenderTarget(null),this.setRenderTarget(null),this._frameBufferTarget.dispose(),this._frameBufferTarget=null}setRenderObjectFunction(e){this._renderObjectFunction=e}getRenderObjectFunction(){return this._renderObjectFunction}compute(e,t=null){if(!0===this._isDeviceLost)return;if(!1===this._initialized)return d("Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead."),this.computeAsync(e,t);const r=this._nodes.nodeFrame,s=r.renderId;this.info.calls++,this.info.compute.calls++,this.info.compute.frameCalls++,r.renderId=this.info.calls,this.backend.updateTimeStampUID(e),this.inspector.beginCompute(this.backend.getTimestampUID(e),e);const i=this.backend,n=this._pipelines,a=this._bindings,o=this._nodes,u=Array.isArray(e)?e:[e];if(void 0===u[0]||!0!==u[0].isComputeNode)throw new Error("THREE.Renderer: .compute() expects a ComputeNode.");i.beginCompute(e);for(const r of u){if(!1===n.has(r)){const e=()=>{r.removeEventListener("dispose",e),n.delete(r),a.deleteForCompute(r),o.delete(r)};r.addEventListener("dispose",e);const t=r.onInitFunction;null!==t&&t.call(r,{renderer:this})}o.updateForCompute(r),a.updateForCompute(r);const s=a.getForCompute(r),u=n.getForCompute(r,s);i.compute(e,r,s,u,t)}i.finishCompute(e),r.renderId=s,this.inspector.finishCompute(this.backend.getTimestampUID(e))}async computeAsync(e,t=null){!1===this._initialized&&await this.init(),this.compute(e,t)}async hasFeatureAsync(e){return v('Renderer: "hasFeatureAsync()" has been deprecated. Use "hasFeature()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.hasFeature(e)}async resolveTimestampsAsync(e="render"){return!1===this._initialized&&await this.init(),this.backend.resolveTimestampsAsync(e)}hasFeature(e){if(!1===this._initialized)throw new Error('Renderer: .hasFeature() called before the backend is initialized. Use "await renderer.init();" before before using this method.');return this.backend.hasFeature(e)}hasInitialized(){return this._initialized}async initTextureAsync(e){v('Renderer: "initTextureAsync()" has been deprecated. Use "initTexture()" and "await renderer.init();" when creating the renderer.'),await this.init(),this.initTexture(e)}initTexture(e){if(!1===this._initialized)throw new Error('Renderer: .initTexture() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateTexture(e)}initRenderTarget(e){if(!1===this._initialized)throw new Error('Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.');this._textures.updateRenderTarget(e);const t=this._textures.get(e),r=this._renderContexts.get(e);r.textures=t.textures,r.depthTexture=t.depthTexture,r.width=t.width,r.height=t.height,r.renderTarget=e,r.depth=e.depthBuffer,r.stencil=e.stencilBuffer,this.backend.initRenderTarget(r)}copyFramebufferToTexture(e,t=null){if(null!==t)if(t.isVector2)t=HS.set(t.x,t.y,e.image.width,e.image.height).floor();else{if(!t.isVector4)return void o("Renderer.copyFramebufferToTexture: Invalid rectangle.");t=HS.copy(t).floor()}else t=HS.set(0,0,e.image.width,e.image.height);let r,s=this._currentRenderContext;null!==s?r=s.renderTarget:(r=this._renderTarget||this._getFrameBufferTarget(),null!==r&&(this._textures.updateRenderTarget(r),s=this._textures.get(r))),this._textures.updateTexture(e,{renderTarget:r}),this.backend.copyFramebufferToTexture(e,s,t),this._inspector.copyFramebufferToTexture(e)}copyTextureToTexture(e,t,r=null,s=null,i=0,n=0){this._textures.updateTexture(e),this._textures.updateTexture(t),this.backend.copyTextureToTexture(e,t,r,s,i,n),this._inspector.copyTextureToTexture(e,t)}async readRenderTargetPixelsAsync(e,t,r,s,i,n=0,a=0){return this.backend.copyTextureToBuffer(e.textures[n],t,r,s,i,a)}_projectObject(e,t,r,s,i){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)r=e.renderOrder,e.isClippingGroup&&e.enabled&&(i=i.getGroupContext(e));else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)s.pushLight(e);else if(e.isSprite){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsSprite(e,t)){!0===this.sortObjects&&HS.setFromMatrixPosition(e.matrixWorld).applyMatrix4(WS);const{geometry:t,material:n}=e;n.visible&&s.push(e,t,n,r,HS.z,null,i)}}else if(e.isLineLoop)o("Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.");else if(e.isMesh||e.isLine||e.isPoints){const n=t.isArrayCamera?zS:$S;if(!e.frustumCulled||n.intersectsObject(e,t)){const{geometry:t,material:n}=e;if(!0===this.sortObjects&&(null===t.boundingSphere&&t.computeBoundingSphere(),HS.copy(t.boundingSphere.center).applyMatrix4(e.matrixWorld).applyMatrix4(WS)),Array.isArray(n)){const a=t.groups;for(let o=0,u=a.length;o0){for(const{material:e}of t)e.side=L;this._renderObjects(t,r,s,i,"backSide");for(const{material:e}of t)e.side=ht;this._renderObjects(e,r,s,i);for(const{material:e}of t)e.side=P}else this._renderObjects(e,r,s,i)}_renderObjects(e,t,r,s,i=null){for(let n=0,a=e.length;n(t.not().discard(),e))(u)}}e.depthNode&&e.depthNode.isNode&&(l=e.depthNode),e.castShadowPositionNode&&e.castShadowPositionNode.isNode?o=e.castShadowPositionNode:e.positionNode&&e.positionNode.isNode&&(o=e.positionNode),r={version:t,colorNode:u,depthNode:l,positionNode:o},this._cacheShadowNodes.set(e,r)}return r}renderObject(e,t,r,s,i,n,a,o=null,u=null){let l,d,c,h,p=!1;if(e.onBeforeRender(this,t,r,s,i,n),!0===i.allowOverride&&null!==t.overrideMaterial){const e=t.overrideMaterial;if(p=!0,l=e.isNodeMaterial?e.colorNode:null,d=e.isNodeMaterial?e.depthNode:null,c=e.isNodeMaterial?e.positionNode:null,h=t.overrideMaterial.side,i.positionNode&&i.positionNode.isNode&&(e.positionNode=i.positionNode),e.alphaTest=i.alphaTest,e.alphaMap=i.alphaMap,e.transparent=i.transparent||i.transmission>0||i.transmissionNode&&i.transmissionNode.isNode||i.backdropNode&&i.backdropNode.isNode,e.isShadowPassMaterial){const{colorNode:t,depthNode:r,positionNode:s}=this._getShadowNodes(i);this.shadowMap.type===tt?e.side=null!==i.shadowSide?i.shadowSide:i.side:e.side=null!==i.shadowSide?i.shadowSide:qS[i.side],null!==t&&(e.colorNode=t),null!==r&&(e.depthNode=r),null!==s&&(e.positionNode=s)}i=e}!0===i.transparent&&i.side===P&&!1===i.forceSinglePass?(i.side=L,this._handleObjectFunction(e,i,t,r,a,n,o,"backSide"),i.side=ht,this._handleObjectFunction(e,i,t,r,a,n,o,u),i.side=P):this._handleObjectFunction(e,i,t,r,a,n,o,u),p&&(t.overrideMaterial.colorNode=l,t.overrideMaterial.depthNode=d,t.overrideMaterial.positionNode=c,t.overrideMaterial.side=h),e.onAfterRender(this,t,r,s,i,n)}hasCompatibility(e){return this.backend.hasCompatibility(e)}_renderObjectDirect(e,t,r,s,i,n,a,o){const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);if(u.drawRange=e.geometry.drawRange,u.group=n,null!==this._currentRenderBundle){this.backend.get(this._currentRenderBundle).renderObjects.push(u),u.bundle=this._currentRenderBundle.bundleGroup}const l=this._nodes.needsRefresh(u);l&&(this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u)),this._pipelines.updateForRender(u),this._pipelines.isReady(u)&&(this.backend.draw(u,this.info),l&&this._nodes.updateAfter(u))}_createObjectPipeline(e,t,r,s,i,n,a,o){if(null!==this._compilationPromises)return void this._compilationPromises.push({object:e,material:t,scene:r,camera:s,lightsNode:i,group:n,clippingContext:a,passId:o,renderContext:this._currentRenderContext});const u=this._objects.get(e,t,r,s,i,this._currentRenderContext,a,o);u.drawRange=e.geometry.drawRange,u.group=n,this._nodes.updateBefore(u),this._geometries.updateForRender(u),this._nodes.updateForRender(u),this._bindings.updateForRender(u),this._pipelines.getForRender(u,this._compilationPromises),this._nodes.updateAfter(u)}_onCanvasTargetResize(){this._initialized&&this.backend.updateSize()}get compile(){return this.compileAsync}}class XS{constructor(e=""){this.name=e,this.visibility=0}setVisibility(e){this.visibility|=e}getVisibility(){return this.visibility}clone(){return Object.assign(new this.constructor,this)}}class KS extends XS{constructor(e,t=null){super(e),this.isBuffer=!0,this.bytesPerElement=Float32Array.BYTES_PER_ELEMENT,this._buffer=t,this._updateRanges=[]}get updateRanges(){return this._updateRanges}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}get byteLength(){return(e=this._buffer.byteLength)+(Ey-e%Ey)%Ey;var e}get buffer(){return this._buffer}update(){return!0}}class QS extends KS{constructor(e,t=null){super(e,t),this.isUniformBuffer=!0}}let YS=0;class ZS extends QS{constructor(e,t){super("UniformBuffer_"+YS++,e?e.value:null),this.nodeUniform=e,this.groupNode=t,this.isNodeUniformBuffer=!0}set updateRanges(e){this.nodeUniform.updateRanges=e}get updateRanges(){return this.nodeUniform.updateRanges}addUpdateRange(e,t){this.nodeUniform.addUpdateRange(e,t)}clearUpdateRanges(){this.nodeUniform.clearUpdateRanges()}get buffer(){return this.nodeUniform.value}}class JS extends QS{constructor(e){super(e),this.isUniformsGroup=!0,this._values=null,this.uniforms=[],this._updateRangeCache=new Map}addUniformUpdateRange(e){const t=e.index;if(!0!==this._updateRangeCache.has(t)){const r=this.updateRanges,s={start:e.offset,count:e.itemSize};r.push(s),this._updateRangeCache.set(t,s)}}clearUpdateRanges(){this._updateRangeCache.clear(),super.clearUpdateRanges()}addUniform(e){return this.uniforms.push(e),this}removeUniform(e){const t=this.uniforms.indexOf(e);return-1!==t&&this.uniforms.splice(t,1),this}get values(){return null===this._values&&(this._values=Array.from(this.buffer)),this._values}get buffer(){let e=this._buffer;if(null===e){const t=this.byteLength;e=new Float32Array(new ArrayBuffer(t)),this._buffer=e}return e}get byteLength(){const e=this.bytesPerElement;let t=0;for(let r=0,s=this.uniforms.length;r{this.generation=null,this.version=-1},this.texture=t,this.version=t?t.version:-1,this.generation=null,this.samplerKey="",this.isSampler=!0}set texture(e){this._texture!==e&&(this._texture&&this._texture.removeEventListener("dispose",this._onTextureDispose),this._texture=e,this.generation=null,this.version=-1,this._texture&&this._texture.addEventListener("dispose",this._onTextureDispose))}get texture(){return this._texture}update(){const{texture:e,version:t}=this;return t!==e.version&&(this.version=e.version,!0)}clone(){const e=super.clone();return e._texture=null,e._onTextureDispose=()=>{e.generation=null,e.version=-1},e.texture=this.texture,e}}let sR=0;class iR extends rR{constructor(e,t){super(e,t),this.id=sR++,this.store=!1,this.mipLevel=0,this.isSampledTexture=!0}}class nR extends iR{constructor(e,t,r,s=null){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r,this.access=s}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class aR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledCubeTexture=!0}}class oR extends nR{constructor(e,t,r,s=null){super(e,t,r,s),this.isSampledTexture3D=!0}}const uR={bitcast_int_uint:new pT("uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }"),bitcast_uint_int:new pT("uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }")},lR={textureDimensions:"textureSize",equals:"equal",bitcast_float_int:"floatBitsToInt",bitcast_int_float:"intBitsToFloat",bitcast_uint_float:"uintBitsToFloat",bitcast_float_uint:"floatBitsToUint",bitcast_uint_int:"tsl_bitcast_uint_to_int",bitcast_int_uint:"tsl_bitcast_int_to_uint",floatpack_snorm_2x16:"packSnorm2x16",floatpack_unorm_2x16:"packUnorm2x16",floatpack_float16_2x16:"packHalf2x16",floatunpack_snorm_2x16:"unpackSnorm2x16",floatunpack_unorm_2x16:"unpackUnorm2x16",floatunpack_float16_2x16:"unpackHalf2x16"},dR={low:"lowp",medium:"mediump",high:"highp"},cR={swizzleAssign:!0,storageBuffer:!1},hR={perspective:"smooth",linear:"noperspective"},pR={centroid:"centroid"},gR="\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp sampler3D;\nprecision highp samplerCube;\nprecision highp sampler2DArray;\n\nprecision highp usampler2D;\nprecision highp usampler3D;\nprecision highp usamplerCube;\nprecision highp usampler2DArray;\n\nprecision highp isampler2D;\nprecision highp isampler3D;\nprecision highp isamplerCube;\nprecision highp isampler2DArray;\n\nprecision highp sampler2DShadow;\nprecision highp sampler2DArrayShadow;\nprecision highp samplerCubeShadow;\n";class mR extends jN{constructor(e,t){super(e,t,new gS),this.uniformGroups={},this.transforms=[],this.extensions={},this.builtins={vertex:[],fragment:[],compute:[]}}needsToWorkingColorSpace(e){return!0===e.isVideoTexture&&e.colorSpace!==T}_include(e){const t=uR[e];return t.build(this),this.addInclude(t),t}getMethod(e){return void 0!==uR[e]&&this._include(e),lR[e]||e}getBitcastMethod(e,t){return this.getMethod(`bitcast_${t}_${e}`)}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`${e} ? ${t} : ${r}`}getOutputStructName(){return""}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(this.getType(e.type)+" "+e.name);return`${this.getType(t.type)} ${t.name}( ${s.join(", ")} ) {\n\n\t${r.vars}\n\n${r.code}\n\treturn ${r.result};\n\n}`}setupPBO(e){const t=e.value;if(void 0===t.pbo){const e=t.array,r=t.count*t.itemSize,{itemSize:s}=t,i=t.array.constructor.name.toLowerCase().includes("int");let n=i?_t:vt;2===s?n=i?Et:W:3===s?n=i?At:wt:4===s&&(n=i?Ct:Ae);const a={Float32Array:Q,Uint8Array:$e,Uint16Array:Rt,Uint32Array:S,Int8Array:St,Int16Array:Nt,Int32Array:R,Uint8ClampedArray:$e},o=Math.pow(2,Math.ceil(Math.log2(Math.sqrt(r/s))));let u=Math.ceil(r/s/o);o*u*s0?i:"";t=`${r.name} {\n\t${s} ${e.name}[${n}];\n};\n`}else{const t=e.groupNode.name;if(void 0===s[t]){const e=this.uniformGroups[t];if(void 0!==e){const r=[];for(const t of e.uniforms){const e=t.getType(),s=this.getVectorType(e),i=t.nodeUniform.node.precision;let n=`${s} ${t.name};`;null!==i&&(n=dR[i]+" "+n),r.push("\t"+n)}s[t]=r}}i=!0}if(!i){const s=e.node.precision;null!==s&&(t=dR[s]+" "+t),t="uniform "+t,r.push(t)}}let i="";for(const e in s){const t=s[e];i+=this._getGLSLUniformStruct(e,t.join("\n"))+"\n"}return i+=r.join("\n"),i}getTypeFromAttribute(e){let t=super.getTypeFromAttribute(e);if(/^[iu]/.test(t)&&e.gpuType!==R){let r=e;e.isInterleavedBufferAttribute&&(r=e.data);const s=r.array;!1==(s instanceof Uint32Array||s instanceof Int32Array)&&(t=t.slice(1))}return t}getAttributes(e){let t="";if("vertex"===e||"compute"===e){const e=this.getAttributesArray();let r=0;for(const s of e)t+=`layout( location = ${r++} ) in ${s.type} ${s.name};\n`}return t}getStructMembers(e){const t=[];for(const r of e.members)t.push(`\t${r.type} ${r.name};`);return t.join("\n")}getStructs(e){const t=[],r=this.structs[e],s=[];for(const e of r)if(e.output)for(const t of e.members)s.push(`layout( location = ${t.index} ) out ${t.type} ${t.name};`);else{let r="struct "+e.name+" {\n";r+=this.getStructMembers(e),r+="\n};\n",t.push(r)}return 0===s.length&&s.push("layout( location = 0 ) out vec4 fragColor;"),"\n"+s.join("\n")+"\n\n"+t.join("\n")}getVaryings(e){let t="";const r=this.varyings;if("vertex"===e||"compute"===e)for(const s of r){"compute"===e&&(s.needsInterpolation=!0);const r=this.getType(s.type);if(s.needsInterpolation)if(s.interpolationType){t+=`${hR[s.interpolationType]||s.interpolationType} ${pR[s.interpolationSampling]||""} out ${r} ${s.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}out ${r} ${s.name};\n`}else t+=`${r} ${s.name};\n`}else if("fragment"===e)for(const e of r)if(e.needsInterpolation){const r=this.getType(e.type);if(e.interpolationType){t+=`${hR[e.interpolationType]||e.interpolationType} ${pR[e.interpolationSampling]||""} in ${r} ${e.name};\n`}else{t+=`${r.includes("int")||r.includes("uv")||r.includes("iv")?"flat ":""}in ${r} ${e.name};\n`}}for(const r of this.builtins[e])t+=`${r};\n`;return t}getVertexIndex(){return"uint( gl_VertexID )"}getInstanceIndex(){return"uint( gl_InstanceID )"}getInvocationLocalIndex(){return`uint( gl_InstanceID ) % ${this.object.workgroupSize.reduce((e,t)=>e*t,1)}u`}getSubgroupSize(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node")}getInvocationSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node")}getSubgroupIndex(){o("GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node")}getDrawIndex(){return this.renderer.backend.extensions.has("WEBGL_multi_draw")?"uint( gl_DrawID )":null}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord.xy"}getFragDepth(){return"gl_FragDepth"}enableExtension(e,t,r=this.shaderStage){const s=this.extensions[r]||(this.extensions[r]=new Map);!1===s.has(e)&&s.set(e,{name:e,behavior:t})}getExtensions(e){const t=[];if("vertex"===e){const t=this.renderer.backend.extensions;this.object.isBatchedMesh&&t.has("WEBGL_multi_draw")&&this.enableExtension("GL_ANGLE_multi_draw","require",e)}const r=this.extensions[e];if(void 0!==r)for(const{name:e,behavior:s}of r.values())t.push(`#extension ${e} : ${s}`);return t.join("\n")}getClipDistance(){return"gl_ClipDistance"}isAvailable(e){let t=cR[e];if(void 0===t){let r;switch(t=!1,e){case"float32Filterable":r="OES_texture_float_linear";break;case"clipDistance":r="WEBGL_clip_cull_distance"}if(void 0!==r){const e=this.renderer.backend.extensions;e.has(r)&&(e.get(r),t=!0)}cR[e]=t}return t}isFlipY(){return!0}getUniformBufferLimit(){const e=this.renderer.backend.gl;return e.getParameter(e.MAX_UNIFORM_BLOCK_SIZE)}enableHardwareClipping(e){this.enableExtension("GL_ANGLE_clip_cull_distance","require"),this.builtins.vertex.push(`out float gl_ClipDistance[ ${e} ]`)}enableMultiview(){this.enableExtension("GL_OVR_multiview2","require","fragment"),this.enableExtension("GL_OVR_multiview2","require","vertex"),this.builtins.vertex.push("layout(num_views = 2) in")}registerTransform(e,t){this.transforms.push({varyingName:e,attributeNode:t})}getTransforms(){const e=this.transforms;let t="";for(let r=0;r0&&(r+="\n"),r+=`\t// flow -> ${n}\n\t`),r+=`${s.code}\n\t`,e===i&&"compute"!==t&&(r+="// result\n\t","vertex"===t?(r+="gl_Position = ",r+=`${s.result};`):"fragment"===t&&(e.outputNode.isOutputStructNode||(r+="fragColor = ",r+=`${s.result};`)))}const n=e[t];n.extensions=this.getExtensions(t),n.uniforms=this.getUniforms(t),n.attributes=this.getAttributes(t),n.varyings=this.getVaryings(t),n.vars=this.getVars(t),n.structs=this.getStructs(t),n.codes=this.getCodes(t),n.transforms=this.getTransforms(t),n.flow=r}null!==this.material?(this.vertexShader=this._getGLSLVertexCode(e.vertex),this.fragmentShader=this._getGLSLFragmentCode(e.fragment)):this.computeShader=this._getGLSLVertexCode(e.compute)}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);let a=n.uniformGPU;if(void 0===a){const s=e.groupNode,o=s.name,u=this.getBindGroupArray(o,r);if("texture"===t)a=new nR(i.name,i.node,s),u.push(a);else if("cubeTexture"===t||"cubeDepthTexture"===t)a=new aR(i.name,i.node,s),u.push(a);else if("texture3D"===t)a=new oR(i.name,i.node,s),u.push(a);else if("buffer"===t){i.name=`buffer${e.id}`;const t=this.getSharedDataFromNode(e);let r=t.buffer;void 0===r&&(e.name=`NodeBuffer_${e.id}`,r=new ZS(e,s),r.name=e.name,t.buffer=r),u.push(r),a=r}else{let e=this.uniformGroups[o];void 0===e?(e=new tR(o,s),this.uniformGroups[o]=e,u.push(e)):-1===u.indexOf(e)&&u.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}}let fR=null,yR=null;class bR{constructor(e={}){this.parameters=Object.assign({},e),this.data=new WeakMap,this.renderer=null,this.domElement=null,this.timestampQueryPool={[Mt.RENDER]:null,[Mt.COMPUTE]:null},this.trackTimestamp=!0===e.trackTimestamp}async init(e){this.renderer=e}get coordinateSystem(){}beginRender(){}finishRender(){}beginCompute(){}finishCompute(){}draw(){}compute(){}createProgram(){}destroyProgram(){}createBindings(){}updateBindings(){}updateBinding(){}createRenderPipeline(){}createComputePipeline(){}needsRenderUpdate(){}getRenderCacheKey(){}createNodeBuilder(){}updateSampler(){}createDefaultTexture(){}createTexture(){}updateTexture(){}generateMipmaps(){}destroyTexture(){}async copyTextureToBuffer(){}copyTextureToTexture(){}copyFramebufferToTexture(){}createAttribute(){}createIndexAttribute(){}createStorageAttribute(){}updateAttribute(){}destroyAttribute(){}getContext(){}updateSize(){}updateViewport(){}updateTimeStampUID(e){const t=this.get(e),r=this.renderer.info.frame;let s;s=!0===e.isComputeNode?"c:"+this.renderer.info.compute.frameCalls:"r:"+this.renderer.info.render.frameCalls,t.timestampUID=s+":"+e.id+":f"+r}getTimestampUID(e){return this.get(e).timestampUID}getTimestampFrames(e){const t=this.timestampQueryPool[e];return t?t.getTimestampFrames():[]}_getQueryPool(e){const t=e.startsWith("c:")?Mt.COMPUTE:Mt.RENDER;return this.timestampQueryPool[t]}getTimestamp(e){return this._getQueryPool(e).getTimestamp(e)}hasTimestamp(e){return this._getQueryPool(e).hasTimestamp(e)}isOccluded(){}async resolveTimestampsAsync(e="render"){if(!this.trackTimestamp)return void v("WebGPURenderer: Timestamp tracking is disabled.");const t=this.timestampQueryPool[e];if(!t)return;const r=await t.resolveQueriesAsync();return this.renderer.info[e].timestamp=r,r}async getArrayBufferAsync(){}async hasFeatureAsync(){}hasFeature(){}getMaxAnisotropy(){}getDrawingBufferSize(){return fR=fR||new t,this.renderer.getDrawingBufferSize(fR)}setScissorTest(){}getClearColor(){const e=this.renderer;return yR=yR||new Zy,e.getClearColor(yR),yR.getRGB(yR),yR}getDomElement(){let e=this.domElement;return null===e&&(e=void 0!==this.parameters.canvas?this.parameters.canvas:Bt(),"setAttribute"in e&&e.setAttribute("data-engine",`three.js r${lt} webgpu`),this.domElement=e),e}hasCompatibility(){return!1}initRenderTarget(){}set(e,t){this.data.set(e,t)}get(e){let t=this.data.get(e);return void 0===t&&(t={},this.data.set(e,t)),t}has(e){return this.data.has(e)}delete(e){this.data.delete(e)}deleteBindGroupData(){}dispose(){}}let xR,TR,_R=0;class vR{constructor(e,t){this.buffers=[e.bufferGPU,t],this.type=e.type,this.bufferType=e.bufferType,this.pbo=e.pbo,this.byteLength=e.byteLength,this.bytesPerElement=e.BYTES_PER_ELEMENT,this.version=e.version,this.isInteger=e.isInteger,this.activeBufferIndex=0,this.baseId=e.id}get id(){return`${this.baseId}|${this.activeBufferIndex}`}get bufferGPU(){return this.buffers[this.activeBufferIndex]}get transformBuffer(){return this.buffers[1^this.activeBufferIndex]}switchBuffers(){this.activeBufferIndex^=1}}class NR{constructor(e){this.backend=e}createAttribute(e,t){const r=this.backend,{gl:s}=r,i=e.array,n=e.usage||s.STATIC_DRAW,a=e.isInterleavedBufferAttribute?e.data:e,o=r.get(a);let u,l=o.bufferGPU;if(void 0===l&&(l=this._createBuffer(s,t,i,n),o.bufferGPU=l,o.bufferType=t,o.version=a.version),i instanceof Float32Array)u=s.FLOAT;else if("undefined"!=typeof Float16Array&&i instanceof Float16Array)u=s.HALF_FLOAT;else if(i instanceof Uint16Array)u=e.isFloat16BufferAttribute?s.HALF_FLOAT:s.UNSIGNED_SHORT;else if(i instanceof Int16Array)u=s.SHORT;else if(i instanceof Uint32Array)u=s.UNSIGNED_INT;else if(i instanceof Int32Array)u=s.INT;else if(i instanceof Int8Array)u=s.BYTE;else if(i instanceof Uint8Array)u=s.UNSIGNED_BYTE;else{if(!(i instanceof Uint8ClampedArray))throw new Error("THREE.WebGLBackend: Unsupported buffer data format: "+i);u=s.UNSIGNED_BYTE}let d={bufferGPU:l,bufferType:t,type:u,byteLength:i.byteLength,bytesPerElement:i.BYTES_PER_ELEMENT,version:e.version,pbo:e.pbo,isInteger:u===s.INT||u===s.UNSIGNED_INT||e.gpuType===R,id:_R++};if(e.isStorageBufferAttribute||e.isStorageInstancedBufferAttribute){const e=this._createBuffer(s,t,i,n);d=new vR(d,e)}r.set(e,d)}updateAttribute(e){const t=this.backend,{gl:r}=t,s=e.array,i=e.isInterleavedBufferAttribute?e.data:e,n=t.get(i),a=n.bufferType,o=e.isInterleavedBufferAttribute?e.data.updateRanges:e.updateRanges;if(r.bindBuffer(a,n.bufferGPU),0===o.length)r.bufferSubData(a,0,s);else{for(let e=0,t=o.length;e0?this.enable(s.SAMPLE_ALPHA_TO_COVERAGE):this.disable(s.SAMPLE_ALPHA_TO_COVERAGE),r>0&&this.currentClippingPlanes!==r){const e=12288;for(let t=0;t<8;t++)t{!function i(){const n=e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0);if(n===e.WAIT_FAILED)return e.deleteSync(t),void s();n!==e.TIMEOUT_EXPIRED?(e.deleteSync(t),r()):requestAnimationFrame(i)}()})}}let ER,AR,wR,CR=!1;class MR{constructor(e){this.backend=e,this.gl=e.gl,this.extensions=e.extensions,this.defaultTextures={},this._srcFramebuffer=null,this._dstFramebuffer=null,!1===CR&&(this._init(),CR=!0)}_init(){const e=this.gl;ER={[Gr]:e.REPEAT,[ve]:e.CLAMP_TO_EDGE,[kr]:e.MIRRORED_REPEAT},AR={[B]:e.NEAREST,[$r]:e.NEAREST_MIPMAP_NEAREST,[at]:e.NEAREST_MIPMAP_LINEAR,[de]:e.LINEAR,[nt]:e.LINEAR_MIPMAP_NEAREST,[Z]:e.LINEAR_MIPMAP_LINEAR},wR={[qr]:e.NEVER,[Hr]:e.ALWAYS,[A]:e.LESS,[w]:e.LEQUAL,[Wr]:e.EQUAL,[M]:e.GEQUAL,[C]:e.GREATER,[zr]:e.NOTEQUAL}}getGLTextureType(e){const{gl:t}=this;let r;return r=!0===e.isCubeTexture?t.TEXTURE_CUBE_MAP:!0===e.isArrayTexture||!0===e.isDataArrayTexture||!0===e.isCompressedArrayTexture?t.TEXTURE_2D_ARRAY:!0===e.isData3DTexture?t.TEXTURE_3D:t.TEXTURE_2D,r}getInternalFormat(e,t,r,s,i=!1){const{gl:n,extensions:a}=this;if(null!==e){if(void 0!==n[e])return n[e];d("WebGLBackend: Attempt to use non-existing WebGL internal format '"+e+"'")}let o=t;if(t===n.RED&&(r===n.FLOAT&&(o=n.R32F),r===n.HALF_FLOAT&&(o=n.R16F),r===n.UNSIGNED_BYTE&&(o=n.R8),r===n.UNSIGNED_SHORT&&(o=n.R16),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RED_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.R8UI),r===n.UNSIGNED_SHORT&&(o=n.R16UI),r===n.UNSIGNED_INT&&(o=n.R32UI),r===n.BYTE&&(o=n.R8I),r===n.SHORT&&(o=n.R16I),r===n.INT&&(o=n.R32I)),t===n.RG&&(r===n.FLOAT&&(o=n.RG32F),r===n.HALF_FLOAT&&(o=n.RG16F),r===n.UNSIGNED_BYTE&&(o=n.RG8),r===n.UNSIGNED_SHORT&&(o=n.RG16),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RG_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RG8UI),r===n.UNSIGNED_SHORT&&(o=n.RG16UI),r===n.UNSIGNED_INT&&(o=n.RG32UI),r===n.BYTE&&(o=n.RG8I),r===n.SHORT&&(o=n.RG16I),r===n.INT&&(o=n.RG32I)),t===n.RGB){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGB32F),r===n.HALF_FLOAT&&(o=n.RGB16F),r===n.UNSIGNED_BYTE&&(o=n.RGB8),r===n.UNSIGNED_SHORT&&(o=n.RGB16),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8:n.RGB8),r===n.UNSIGNED_SHORT_5_6_5&&(o=n.RGB565),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGB4),r===n.UNSIGNED_INT_5_9_9_9_REV&&(o=n.RGB9_E5),r===n.UNSIGNED_INT_10F_11F_11F_REV&&(o=n.R11F_G11F_B10F)}if(t===n.RGB_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGB8UI),r===n.UNSIGNED_SHORT&&(o=n.RGB16UI),r===n.UNSIGNED_INT&&(o=n.RGB32UI),r===n.BYTE&&(o=n.RGB8I),r===n.SHORT&&(o=n.RGB16I),r===n.INT&&(o=n.RGB32I)),t===n.RGBA){const e=i?jr:p.getTransfer(s);r===n.FLOAT&&(o=n.RGBA32F),r===n.HALF_FLOAT&&(o=n.RGBA16F),r===n.UNSIGNED_BYTE&&(o=n.RGBA8),r===n.UNSIGNED_SHORT&&(o=n.RGBA16),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I),r===n.UNSIGNED_BYTE&&(o=e===g?n.SRGB8_ALPHA8:n.RGBA8),r===n.UNSIGNED_SHORT_4_4_4_4&&(o=n.RGBA4),r===n.UNSIGNED_SHORT_5_5_5_1&&(o=n.RGB5_A1)}return t===n.RGBA_INTEGER&&(r===n.UNSIGNED_BYTE&&(o=n.RGBA8UI),r===n.UNSIGNED_SHORT&&(o=n.RGBA16UI),r===n.UNSIGNED_INT&&(o=n.RGBA32UI),r===n.BYTE&&(o=n.RGBA8I),r===n.SHORT&&(o=n.RGBA16I),r===n.INT&&(o=n.RGBA32I)),t===n.DEPTH_COMPONENT&&(r===n.UNSIGNED_SHORT&&(o=n.DEPTH_COMPONENT16),r===n.UNSIGNED_INT&&(o=n.DEPTH_COMPONENT24),r===n.FLOAT&&(o=n.DEPTH_COMPONENT32F)),t===n.DEPTH_STENCIL&&r===n.UNSIGNED_INT_24_8&&(o=n.DEPTH24_STENCIL8),o!==n.R16F&&o!==n.R32F&&o!==n.RG16F&&o!==n.RG32F&&o!==n.RGBA16F&&o!==n.RGBA32F||a.get("EXT_color_buffer_float"),o}setTextureParameters(e,t){const{gl:r,extensions:s,backend:i}=this,n=p.getPrimaries(p.workingColorSpace),a=t.colorSpace===T?null:p.getPrimaries(t.colorSpace),o=t.colorSpace===T||n===a?r.NONE:r.BROWSER_DEFAULT_WEBGL;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,t.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,t.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,o),r.texParameteri(e,r.TEXTURE_WRAP_S,ER[t.wrapS]),r.texParameteri(e,r.TEXTURE_WRAP_T,ER[t.wrapT]),e!==r.TEXTURE_3D&&e!==r.TEXTURE_2D_ARRAY||t.isArrayTexture||r.texParameteri(e,r.TEXTURE_WRAP_R,ER[t.wrapR]),r.texParameteri(e,r.TEXTURE_MAG_FILTER,AR[t.magFilter]);const u=void 0!==t.mipmaps&&t.mipmaps.length>0,l=t.minFilter===de&&u?Z:t.minFilter;if(r.texParameteri(e,r.TEXTURE_MIN_FILTER,AR[l]),t.compareFunction&&(r.texParameteri(e,r.TEXTURE_COMPARE_MODE,r.COMPARE_REF_TO_TEXTURE),r.texParameteri(e,r.TEXTURE_COMPARE_FUNC,wR[t.compareFunction])),!0===s.has("EXT_texture_filter_anisotropic")){if(t.magFilter===B)return;if(t.minFilter!==at&&t.minFilter!==Z)return;if(t.type===Q&&!1===s.has("OES_texture_float_linear"))return;if(t.anisotropy>1){const n=s.get("EXT_texture_filter_anisotropic");r.texParameterf(e,n.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,i.getMaxAnisotropy()))}}}createDefaultTexture(e){const{gl:t,backend:r,defaultTextures:s}=this,i=this.getGLTextureType(e);let n=s[i];void 0===n&&(n=t.createTexture(),r.state.bindTexture(i,n),t.texParameteri(i,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(i,t.TEXTURE_MAG_FILTER,t.NEAREST),s[i]=n),r.set(e,{textureGPU:n,glTextureType:i})}createTexture(e,t){const{gl:r,backend:s}=this,{levels:i,width:n,height:a,depth:o}=t,u=s.utils.convert(e.format,e.colorSpace),l=s.utils.convert(e.type),d=this.getInternalFormat(e.internalFormat,u,l,e.colorSpace,e.isVideoTexture),c=r.createTexture(),h=this.getGLTextureType(e);s.state.bindTexture(h,c),this.setTextureParameters(h,e),e.isArrayTexture||e.isDataArrayTexture||e.isCompressedArrayTexture?r.texStorage3D(r.TEXTURE_2D_ARRAY,i,d,n,a,o):e.isData3DTexture?r.texStorage3D(r.TEXTURE_3D,i,d,n,a,o):e.isVideoTexture||r.texStorage2D(h,i,d,n,a),s.set(e,{textureGPU:c,glTextureType:h,glFormat:u,glType:l,glInternalFormat:d})}copyBufferToTexture(e,t){const{gl:r,backend:s}=this,{textureGPU:i,glTextureType:n,glFormat:a,glType:o}=s.get(t),{width:u,height:l}=t.source.data;r.bindBuffer(r.PIXEL_UNPACK_BUFFER,e),s.state.bindTexture(n,i),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.texSubImage2D(n,0,0,0,u,l,a,o,0),r.bindBuffer(r.PIXEL_UNPACK_BUFFER,null),s.state.unbindTexture()}updateTexture(e,t){const{gl:r}=this,{width:s,height:i}=t,{textureGPU:n,glTextureType:a,glFormat:o,glType:u,glInternalFormat:l}=this.backend.get(e);if(!e.isRenderTargetTexture&&void 0!==n)if(this.backend.state.bindTexture(a,n),this.setTextureParameters(a,e),e.isCompressedTexture){const s=e.mipmaps,i=t.image;for(let t=0;t0){const t=Xr(s.width,s.height,e.format,e.type);for(const i of e.layerUpdates){const e=s.data.subarray(i*t/s.data.BYTES_PER_ELEMENT,(i+1)*t/s.data.BYTES_PER_ELEMENT);r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,i,s.width,s.height,1,o,u,e)}e.clearLayerUpdates()}else r.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,s.width,s.height,s.depth,o,u,s.data)}else if(e.isData3DTexture){const e=t.image;r.texSubImage3D(r.TEXTURE_3D,0,0,0,0,e.width,e.height,e.depth,o,u,e.data)}else if(e.isVideoTexture)e.update(),r.texImage2D(a,0,l,o,u,t.image);else{const n=e.mipmaps;if(n.length>0)for(let e=0,t=n.length;e0,c=t.renderTarget?t.renderTarget.height:this.backend.getDrawingBufferSize().y;if(d){const r=0!==a||0!==o;let d,h;if(!0===e.isDepthTexture?(d=s.DEPTH_BUFFER_BIT,h=s.DEPTH_ATTACHMENT,t.stencil&&(d|=s.STENCIL_BUFFER_BIT)):(d=s.COLOR_BUFFER_BIT,h=s.COLOR_ATTACHMENT0),r){const e=this.backend.get(t.renderTarget),r=e.framebuffers[t.getCacheKey()],h=e.msaaFrameBuffer;i.bindFramebuffer(s.DRAW_FRAMEBUFFER,r),i.bindFramebuffer(s.READ_FRAMEBUFFER,h);const p=c-o-l;s.blitFramebuffer(a,p,a+u,p+l,a,p,a+u,p+l,d,s.NEAREST),i.bindFramebuffer(s.READ_FRAMEBUFFER,r),i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,p,u,l),i.unbindTexture()}else{const e=s.createFramebuffer();i.bindFramebuffer(s.DRAW_FRAMEBUFFER,e),s.framebufferTexture2D(s.DRAW_FRAMEBUFFER,h,s.TEXTURE_2D,n,0),s.blitFramebuffer(0,0,u,l,0,0,u,l,d,s.NEAREST),s.deleteFramebuffer(e)}}else i.bindTexture(s.TEXTURE_2D,n),s.copyTexSubImage2D(s.TEXTURE_2D,0,0,0,a,c-l-o,u,l),i.unbindTexture();e.generateMipmaps&&this.generateMipmaps(e),this.backend._setFramebuffer(t)}setupRenderBufferStorage(e,t,r,s=!1){const{gl:i}=this,n=t.renderTarget,{depthTexture:a,depthBuffer:o,stencilBuffer:u,width:l,height:d}=n;if(i.bindRenderbuffer(i.RENDERBUFFER,e),o&&!u){let t=i.DEPTH_COMPONENT24;if(!0===s){this.extensions.get("WEBGL_multisampled_render_to_texture").renderbufferStorageMultisampleEXT(i.RENDERBUFFER,n.samples,t,l,d)}else r>0?(a&&a.isDepthTexture&&a.type===i.FLOAT&&(t=i.DEPTH_COMPONENT32F),i.renderbufferStorageMultisample(i.RENDERBUFFER,r,t,l,d)):i.renderbufferStorage(i.RENDERBUFFER,t,l,d);i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_ATTACHMENT,i.RENDERBUFFER,e)}else o&&u&&(r>0?i.renderbufferStorageMultisample(i.RENDERBUFFER,r,i.DEPTH24_STENCIL8,l,d):i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,l,d),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.DEPTH_STENCIL_ATTACHMENT,i.RENDERBUFFER,e));i.bindRenderbuffer(i.RENDERBUFFER,null)}async copyTextureToBuffer(e,t,r,s,i,n){const{backend:a,gl:o}=this,{textureGPU:u,glFormat:l,glType:d}=this.backend.get(e),c=o.createFramebuffer();a.state.bindFramebuffer(o.READ_FRAMEBUFFER,c);const h=e.isCubeTexture?o.TEXTURE_CUBE_MAP_POSITIVE_X+n:o.TEXTURE_2D;o.framebufferTexture2D(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,h,u,0);const p=this._getTypedArrayType(d),g=s*i*this._getBytesPerTexel(d,l),m=o.createBuffer();o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.bufferData(o.PIXEL_PACK_BUFFER,g,o.STREAM_READ),o.readPixels(t,r,s,i,l,d,0),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),await a.utils._clientWaitAsync();const f=new p(g/p.BYTES_PER_ELEMENT);return o.bindBuffer(o.PIXEL_PACK_BUFFER,m),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,f),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),a.state.bindFramebuffer(o.READ_FRAMEBUFFER,null),o.deleteFramebuffer(c),f}_getTypedArrayType(e){const{gl:t}=this;if(e===t.UNSIGNED_BYTE)return Uint8Array;if(e===t.UNSIGNED_SHORT_4_4_4_4)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_5_5_1)return Uint16Array;if(e===t.UNSIGNED_SHORT_5_6_5)return Uint16Array;if(e===t.UNSIGNED_SHORT)return Uint16Array;if(e===t.UNSIGNED_INT)return Uint32Array;if(e===t.HALF_FLOAT)return Uint16Array;if(e===t.FLOAT)return Float32Array;throw new Error(`Unsupported WebGL type: ${e}`)}_getBytesPerTexel(e,t){const{gl:r}=this;let s=0;return e===r.UNSIGNED_BYTE&&(s=1),e!==r.UNSIGNED_SHORT_4_4_4_4&&e!==r.UNSIGNED_SHORT_5_5_5_1&&e!==r.UNSIGNED_SHORT_5_6_5&&e!==r.UNSIGNED_SHORT&&e!==r.HALF_FLOAT||(s=2),e!==r.UNSIGNED_INT&&e!==r.FLOAT||(s=4),t===r.RGBA?4*s:t===r.RGB?3*s:t===r.ALPHA?s:void 0}dispose(){const{gl:e}=this;null!==this._srcFramebuffer&&e.deleteFramebuffer(this._srcFramebuffer),null!==this._dstFramebuffer&&e.deleteFramebuffer(this._dstFramebuffer)}}function BR(e){return e.isDataTexture?e.image.data:"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?e:e.data}class FR{constructor(e){this.backend=e,this.gl=this.backend.gl,this.availableExtensions=this.gl.getSupportedExtensions(),this.extensions={}}get(e){let t=this.extensions[e];return void 0===t&&(t=this.gl.getExtension(e),this.extensions[e]=t),t}has(e){return this.availableExtensions.includes(e)}}class LR{constructor(e){this.backend=e,this.maxAnisotropy=null}getMaxAnisotropy(){if(null!==this.maxAnisotropy)return this.maxAnisotropy;const e=this.backend.gl,t=this.backend.extensions;if(!0===t.has("EXT_texture_filter_anisotropic")){const r=t.get("EXT_texture_filter_anisotropic");this.maxAnisotropy=e.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else this.maxAnisotropy=0;return this.maxAnisotropy}}const PR={WEBGL_multi_draw:"WEBGL_multi_draw",WEBGL_compressed_texture_astc:"texture-compression-astc",WEBGL_compressed_texture_etc:"texture-compression-etc2",WEBGL_compressed_texture_etc1:"texture-compression-etc1",WEBGL_compressed_texture_pvrtc:"texture-compression-pvrtc",WEBGL_compressed_texture_s3tc:"texture-compression-s3tc",EXT_texture_compression_bptc:"texture-compression-bc",EXT_disjoint_timer_query_webgl2:"timestamp-query",OVR_multiview2:"OVR_multiview2"};class DR{constructor(e){this.gl=e.gl,this.extensions=e.extensions,this.info=e.renderer.info,this.mode=null,this.index=0,this.type=null,this.object=null}render(e,t){const{gl:r,mode:s,object:i,type:n,info:a,index:o}=this;0!==o?r.drawElements(s,t,n,e):r.drawArrays(s,e,t),a.update(i,t,1)}renderInstances(e,t,r){const{gl:s,mode:i,type:n,index:a,object:o,info:u}=this;0!==r&&(0!==a?s.drawElementsInstanced(i,t,n,e,r):s.drawArraysInstanced(i,e,t,r),u.update(o,t,r))}renderMultiDraw(e,t,r){const{extensions:s,mode:i,object:n,info:a}=this;if(0===r)return;const o=s.get("WEBGL_multi_draw");if(null===o)for(let s=0;sthis.maxQueries)return v(`WebGLTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryStates.set(t,"inactive"),this.queryOffsets.set(e,t),t}beginQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null==t)return;if(null!==this.activeQuery)return;const r=this.queries[t];if(r)try{"inactive"===this.queryStates.get(t)&&(this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,r),this.activeQuery=t,this.queryStates.set(t,"started"))}catch(e){o("Error in beginQuery:",e),this.activeQuery=null,this.queryStates.set(t,"inactive")}}endQuery(e){if(!this.trackTimestamp||this.isDisposed)return;const t=this.queryOffsets.get(e);if(null!=t&&this.activeQuery===t)try{this.gl.endQuery(this.ext.TIME_ELAPSED_EXT),this.queryStates.set(t,"ended"),this.activeQuery=null}catch(e){o("Error in endQuery:",e),this.queryStates.set(t,"inactive"),this.activeQuery=null}}async resolveQueriesAsync(){if(!this.trackTimestamp||this.pendingResolve)return this.lastValue;this.pendingResolve=!0;try{const e=new Map;for(const[t,r]of this.queryOffsets){if("ended"===this.queryStates.get(r)){const s=this.queries[r];e.set(t,this.resolveQuery(s))}}if(0===e.size)return this.lastValue;const t={},r=[];for(const[s,i]of e){const e=s.match(/^(.*):f(\d+)$/),n=parseInt(e[2]);!1===r.includes(n)&&r.push(n),void 0===t[n]&&(t[n]=0);const a=await i;this.timestamps.set(s,a),t[n]+=a}const s=t[r[r.length-1]];return this.lastValue=s,this.frames=r,this.currentQueryIndex=0,this.queryOffsets.clear(),this.queryStates.clear(),this.activeQuery=null,s}catch(e){return o("Error resolving queries:",e),this.lastValue}finally{this.pendingResolve=!1}}async resolveQuery(e){return new Promise(t=>{if(this.isDisposed)return void t(this.lastValue);let r,s=!1;const i=e=>{s||(s=!0,r&&(clearTimeout(r),r=null),t(e))},n=()=>{if(this.isDisposed)i(this.lastValue);else try{if(this.gl.getParameter(this.ext.GPU_DISJOINT_EXT))return void i(this.lastValue);if(!this.gl.getQueryParameter(e,this.gl.QUERY_RESULT_AVAILABLE))return void(r=setTimeout(n,1));const s=this.gl.getQueryParameter(e,this.gl.QUERY_RESULT);t(Number(s)/1e6)}catch(e){o("Error checking query:",e),t(this.lastValue)}};n()})}dispose(){if(!this.isDisposed&&(this.isDisposed=!0,this.trackTimestamp)){for(const e of this.queries)this.gl.deleteQuery(e);this.queries=[],this.queryStates.clear(),this.queryOffsets.clear(),this.lastValue=0,this.activeQuery=null}}}class OR extends bR{constructor(e={}){super(e),this.isWebGLBackend=!0,this.attributeUtils=null,this.extensions=null,this.capabilities=null,this.textureUtils=null,this.bufferRenderer=null,this.gl=null,this.state=null,this.utils=null,this.vaoCache={},this.transformFeedbackCache={},this.discard=!1,this.disjoint=null,this.parallel=null,this._currentContext=null,this._knownBindings=new WeakSet,this._supportsInvalidateFramebuffer="undefined"!=typeof navigator&&/OculusBrowser/g.test(navigator.userAgent),this._xrFramebuffer=null}init(e){super.init(e);const t=this.parameters,r={antialias:e.currentSamples>0,alpha:!0,depth:e.depth,stencil:e.stencil},s=void 0!==t.context?t.context:e.domElement.getContext("webgl2",r);function i(t){t.preventDefault();const r={api:"WebGL",message:t.statusMessage||"Unknown reason",reason:null,originalEvent:t};e.onDeviceLost(r)}this._onContextLost=i,e.domElement.addEventListener("webglcontextlost",i,!1),this.gl=s,this.extensions=new FR(this),this.capabilities=new LR(this),this.attributeUtils=new NR(this),this.textureUtils=new MR(this),this.bufferRenderer=new DR(this),this.state=new SR(this),this.utils=new RR(this),this.extensions.get("EXT_color_buffer_float"),this.extensions.get("WEBGL_clip_cull_distance"),this.extensions.get("OES_texture_float_linear"),this.extensions.get("EXT_color_buffer_half_float"),this.extensions.get("WEBGL_multisampled_render_to_texture"),this.extensions.get("WEBGL_render_shared_exponent"),this.extensions.get("WEBGL_multi_draw"),this.extensions.get("OVR_multiview2"),this.extensions.get("EXT_clip_control"),this.disjoint=this.extensions.get("EXT_disjoint_timer_query_webgl2"),this.parallel=this.extensions.get("KHR_parallel_shader_compile"),this.drawBuffersIndexedExt=this.extensions.get("OES_draw_buffers_indexed"),!0===t.reversedDepthBuffer&&this.extensions.has("EXT_clip_control")&&this.state.setReversedDepth(!0)}get coordinateSystem(){return c}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}async makeXRCompatible(){!0!==this.gl.getContextAttributes().xrCompatible&&await this.gl.makeXRCompatible()}setXRTarget(e){this._xrFramebuffer=e}setXRRenderTargetTextures(e,t,r=null){const s=this.gl;if(this.set(e.texture,{textureGPU:t,glInternalFormat:s.RGBA8}),null!==r){const t=e.stencilBuffer?s.DEPTH24_STENCIL8:s.DEPTH_COMPONENT24;this.set(e.depthTexture,{textureGPU:r,glInternalFormat:t}),!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!0===e._autoAllocateDepthBuffer&&!1===e.multiview&&d("WebGLBackend: Render-to-texture extension was disabled because an external texture was provided"),e._autoAllocateDepthBuffer=!1}}initTimestampQuery(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e]||(this.timestampQueryPool[e]=new IR(this.gl,e,2048));const r=this.timestampQueryPool[e];null!==r.allocateQueriesForContext(t)&&r.beginQuery(t)}prepareTimestampBuffer(e,t){if(!this.disjoint||!this.trackTimestamp)return;this.timestampQueryPool[e].endQuery(t)}getContext(){return this.gl}beginRender(e){const{state:t}=this,r=this.get(e);if(e.viewport)this.updateViewport(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.viewport(0,0,e,r)}if(e.scissor)this.updateScissor(e);else{const{width:e,height:r}=this.getDrawingBufferSize();t.scissor(0,0,e,r)}this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e)),r.previousContext=this._currentContext,this._currentContext=e,this._setFramebuffer(e),this.clear(e.clearColor,e.clearDepth,e.clearStencil,e,!1);const s=e.occlusionQueryCount;s>0&&(r.currentOcclusionQueries=r.occlusionQueries,r.currentOcclusionQueryObjects=r.occlusionQueryObjects,r.lastOcclusionObject=null,r.occlusionQueries=new Array(s),r.occlusionQueryObjects=new Array(s),r.occlusionQueryIndex=0)}finishRender(e){const{gl:t,state:r}=this,s=this.get(e),i=s.previousContext;r.resetVertexState();const n=e.occlusionQueryCount;n>0&&(n>s.occlusionQueryIndex&&t.endQuery(t.ANY_SAMPLES_PASSED),this.resolveOccludedAsync(e));const a=e.textures;if(null!==a)for(let e=0;e{let a=0;for(let t=0;t{t.isBatchedMesh?null!==t._multiDrawInstances?(v("WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),b.renderMultiDrawInstances(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount,t._multiDrawInstances)):this.hasFeature("WEBGL_multi_draw")?b.renderMultiDraw(t._multiDrawStarts,t._multiDrawCounts,t._multiDrawCount):v("WebGLBackend: WEBGL_multi_draw not supported."):T>1?b.renderInstances(_,x,T):b.render(_,x)};if(!0===e.camera.isArrayCamera&&e.camera.cameras.length>0&&!1===e.camera.isMultiViewCamera){const r=this.get(e.camera),s=e.camera.cameras,i=e.getBindingGroup("cameraIndex").bindings[0];if(void 0===r.indexesGPU||r.indexesGPU.length!==s.length){const e=new Uint32Array([0,0,0,0]),t=[];for(let r=0,i=s.length;r{const i=this.parallel,n=()=>{r.getProgramParameter(a,i.COMPLETION_STATUS_KHR)?(this._completeCompile(e,s),t()):requestAnimationFrame(n)};n()});return void t.push(i)}this._completeCompile(e,s)}_handleSource(e,t){const r=e.split("\n"),s=[],i=Math.max(t-6,0),n=Math.min(t+6,r.length);for(let e=i;e":" "} ${i}: ${r[e]}`)}return s.join("\n")}_getShaderErrors(e,t,r){const s=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||"").trim();if(s&&""===i)return"";const n=/ERROR: 0:(\d+)/.exec(i);if(n){const s=parseInt(n[1]);return r.toUpperCase()+"\n\n"+i+"\n\n"+this._handleSource(e.getShaderSource(t),s)}return i}_logProgramError(e,t,r){if(this.renderer.debug.checkShaderErrors){const s=this.gl,i=(s.getProgramInfoLog(e)||"").trim();if(!1===s.getProgramParameter(e,s.LINK_STATUS))if("function"==typeof this.renderer.debug.onShaderError)this.renderer.debug.onShaderError(s,e,r,t);else{const n=this._getShaderErrors(s,r,"vertex"),a=this._getShaderErrors(s,t,"fragment");o("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(e,s.VALIDATE_STATUS)+"\n\nProgram Info Log: "+i+"\n"+n+"\n"+a)}else""!==i&&d("WebGLProgram: Program Info Log:",i)}}_completeCompile(e,t){const{state:r,gl:s}=this,i=this.get(t),{programGPU:n,fragmentShader:a,vertexShader:o}=i;!1===s.getProgramParameter(n,s.LINK_STATUS)&&this._logProgramError(n,a,o),r.useProgram(n);const u=e.getBindings();this._setupBindings(u,n),this.set(t,{programGPU:n,pipeline:n})}createComputePipeline(e,t){const{state:r,gl:s}=this,i={stage:"fragment",code:"#version 300 es\nprecision highp float;\nvoid main() {}"};this.createProgram(i);const{computeProgram:n}=e,a=s.createProgram(),o=this.get(i).shaderGPU,u=this.get(n).shaderGPU,l=n.transforms,d=[],c=[];for(let e=0;ePR[t]===e),r=this.extensions;for(let e=0;e1,h=!0===i.isXRRenderTarget,p=!0===h&&!0===i._hasExternalTextures;let g=n.msaaFrameBuffer,m=n.depthRenderbuffer;const f=this.extensions.get("WEBGL_multisampled_render_to_texture"),y=this.extensions.get("OVR_multiview2"),b=this._useMultisampledExtension(i),x=Xy(e);let T;if(l?(n.cubeFramebuffers||(n.cubeFramebuffers={}),T=n.cubeFramebuffers[x]):h&&!1===p?T=this._xrFramebuffer:(n.framebuffers||(n.framebuffers={}),T=n.framebuffers[x]),void 0===T){T=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,T);const s=e.textures,o=[];if(l){n.cubeFramebuffers[x]=T;const{textureGPU:e}=this.get(s[0]),r=this.renderer._activeCubeFace,i=this.renderer._activeMipmapLevel;t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+r,e,i)}else{n.framebuffers[x]=T;for(let r=0;r0&&!1===b&&!i.multiview){if(void 0===g){const s=[];g=t.createFramebuffer(),r.bindFramebuffer(t.FRAMEBUFFER,g);const i=[],l=e.textures;for(let r=0;r0&&!1===this._useMultisampledExtension(s)){const n=i.framebuffers[e.getCacheKey()];let a=t.COLOR_BUFFER_BIT;s.resolveDepthBuffer&&(s.depthBuffer&&(a|=t.DEPTH_BUFFER_BIT),s.stencilBuffer&&s.resolveStencilBuffer&&(a|=t.STENCIL_BUFFER_BIT));const o=i.msaaFrameBuffer,u=i.msaaRenderbuffers,l=e.textures,d=l.length>1;if(r.bindFramebuffer(t.READ_FRAMEBUFFER,o),r.bindFramebuffer(t.DRAW_FRAMEBUFFER,n),d)for(let e=0;e0&&!0===this.extensions.has("WEBGL_multisampled_render_to_texture")&&!1!==e._autoAllocateDepthBuffer}dispose(){null!==this.textureUtils&&this.textureUtils.dispose();const e=this.extensions.get("WEBGL_lose_context");e&&e.loseContext(),this.renderer.domElement.removeEventListener("webglcontextlost",this._onContextLost)}}const VR="point-list",kR="line-list",GR="line-strip",$R="triangle-list",zR="undefined"!=typeof self&&self.GPUShaderStage?self.GPUShaderStage:{VERTEX:1,FRAGMENT:2,COMPUTE:4},WR="never",HR="less",qR="equal",jR="less-equal",XR="greater",KR="not-equal",QR="greater-equal",YR="always",ZR="store",JR="load",eE="clear",tE="ccw",rE="cw",sE="none",iE="back",nE="uint16",aE="uint32",oE="r8unorm",uE="r8snorm",lE="r8uint",dE="r8sint",cE="r16uint",hE="r16sint",pE="r16float",gE="rg8unorm",mE="rg8snorm",fE="rg8uint",yE="rg8sint",bE="r32uint",xE="r32sint",TE="r32float",_E="rg16uint",vE="rg16sint",NE="rg16float",SE="rgba8unorm",RE="rgba8unorm-srgb",EE="rgba8snorm",AE="rgba8uint",wE="rgba8sint",CE="bgra8unorm",ME="bgra8unorm-srgb",BE="rgb9e5ufloat",FE="rgb10a2unorm",LE="rg11b10ufloat",PE="rg32uint",DE="rg32sint",UE="rg32float",IE="rgba16uint",OE="rgba16sint",VE="rgba16float",kE="rgba32uint",GE="rgba32sint",$E="rgba32float",zE="depth16unorm",WE="depth24plus",HE="depth24plus-stencil8",qE="depth32float",jE="depth32float-stencil8",XE="bc1-rgba-unorm",KE="bc1-rgba-unorm-srgb",QE="bc2-rgba-unorm",YE="bc2-rgba-unorm-srgb",ZE="bc3-rgba-unorm",JE="bc3-rgba-unorm-srgb",eA="bc4-r-unorm",tA="bc4-r-snorm",rA="bc5-rg-unorm",sA="bc5-rg-snorm",iA="bc6h-rgb-ufloat",nA="bc6h-rgb-float",aA="bc7-rgba-unorm",oA="bc7-rgba-unorm-srgb",uA="etc2-rgb8unorm",lA="etc2-rgb8unorm-srgb",dA="etc2-rgb8a1unorm",cA="etc2-rgb8a1unorm-srgb",hA="etc2-rgba8unorm",pA="etc2-rgba8unorm-srgb",gA="eac-r11unorm",mA="eac-r11snorm",fA="eac-rg11unorm",yA="eac-rg11snorm",bA="astc-4x4-unorm",xA="astc-4x4-unorm-srgb",TA="astc-5x4-unorm",_A="astc-5x4-unorm-srgb",vA="astc-5x5-unorm",NA="astc-5x5-unorm-srgb",SA="astc-6x5-unorm",RA="astc-6x5-unorm-srgb",EA="astc-6x6-unorm",AA="astc-6x6-unorm-srgb",wA="astc-8x5-unorm",CA="astc-8x5-unorm-srgb",MA="astc-8x6-unorm",BA="astc-8x6-unorm-srgb",FA="astc-8x8-unorm",LA="astc-8x8-unorm-srgb",PA="astc-10x5-unorm",DA="astc-10x5-unorm-srgb",UA="astc-10x6-unorm",IA="astc-10x6-unorm-srgb",OA="astc-10x8-unorm",VA="astc-10x8-unorm-srgb",kA="astc-10x10-unorm",GA="astc-10x10-unorm-srgb",$A="astc-12x10-unorm",zA="astc-12x10-unorm-srgb",WA="astc-12x12-unorm",HA="astc-12x12-unorm-srgb",qA="clamp-to-edge",jA="repeat",XA="mirror-repeat",KA="linear",QA="nearest",YA="zero",ZA="one",JA="src",ew="one-minus-src",tw="src-alpha",rw="one-minus-src-alpha",sw="dst",iw="one-minus-dst",nw="dst-alpha",aw="one-minus-dst-alpha",ow="src-alpha-saturated",uw="constant",lw="one-minus-constant",dw="add",cw="subtract",hw="reverse-subtract",pw="min",gw="max",mw=0,fw=15,yw="keep",bw="zero",xw="replace",Tw="invert",_w="increment-clamp",vw="decrement-clamp",Nw="increment-wrap",Sw="decrement-wrap",Rw="storage",Ew="read-only-storage",Aw="write-only",ww="read-only",Cw="read-write",Mw="non-filtering",Bw="comparison",Fw="float",Lw="unfilterable-float",Pw="depth",Dw="sint",Uw="uint",Iw="2d",Ow="3d",Vw="2d",kw="2d-array",Gw="cube",$w="3d",zw="all",Ww="vertex",Hw="instance",qw={CoreFeaturesAndLimits:"core-features-and-limits",DepthClipControl:"depth-clip-control",Depth32FloatStencil8:"depth32float-stencil8",TextureCompressionBC:"texture-compression-bc",TextureCompressionBCSliced3D:"texture-compression-bc-sliced-3d",TextureCompressionETC2:"texture-compression-etc2",TextureCompressionASTC:"texture-compression-astc",TextureCompressionASTCSliced3D:"texture-compression-astc-sliced-3d",TimestampQuery:"timestamp-query",IndirectFirstInstance:"indirect-first-instance",ShaderF16:"shader-f16",RG11B10UFloat:"rg11b10ufloat-renderable",BGRA8UNormStorage:"bgra8unorm-storage",Float32Filterable:"float32-filterable",Float32Blendable:"float32-blendable",ClipDistances:"clip-distances",DualSourceBlending:"dual-source-blending",Subgroups:"subgroups",TextureFormatsTier1:"texture-formats-tier1",TextureFormatsTier2:"texture-formats-tier2"},jw={"texture-compression-s3tc":"texture-compression-bc","texture-compression-etc1":"texture-compression-etc2"};class Xw extends rR{constructor(e,t,r){super(e,t?t.value:null),this.textureNode=t,this.groupNode=r}update(){const{textureNode:e}=this;return this.texture!==e.value?(this.texture=e.value,!0):super.update()}}class Kw extends KS{constructor(e,t){super(e,t?t.array:null),this._attribute=t,this.isStorageBuffer=!0}get attribute(){return this._attribute}}let Qw=0;class Yw extends Kw{constructor(e,t){super("StorageBuffer_"+Qw++,e?e.value:null),this.nodeUniform=e,this.access=e?e.access:si.READ_WRITE,this.groupNode=t}get attribute(){return this.nodeUniform.value}get buffer(){return this.nodeUniform.value.array}}class Zw extends _y{constructor(e){super(),this.device=e;this.mipmapSampler=e.createSampler({minFilter:KA}),this.flipYSampler=e.createSampler({minFilter:QA}),this.flipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),e.queue.writeBuffer(this.flipUniformBuffer,0,new Uint32Array([1])),this.noFlipUniformBuffer=e.createBuffer({size:4,usage:GPUBufferUsage.UNIFORM}),this.transferPipelines={},this.mipmapShaderModule=e.createShaderModule({label:"mipmap",code:"\nstruct VarysStruct {\n\t@builtin( position ) Position: vec4f,\n\t@location( 0 ) vTex : vec2f,\n\t@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,\n};\n\n@group( 0 ) @binding ( 2 )\nvar flipY: u32;\n\n@vertex\nfn mainVS(\n\t\t@builtin( vertex_index ) vertexIndex : u32,\n\t\t@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {\n\n\tvar Varys : VarysStruct;\n\n\tvar pos = array(\n\t\tvec2f( -1, -1 ),\n\t\tvec2f( -1, 3 ),\n\t\tvec2f( 3, -1 ),\n\t);\n\n\tlet p = pos[ vertexIndex ];\n\tlet mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );\n\tVarys.vTex = p * mult + vec2f( 0.5 );\n\tVarys.Position = vec4f( p, 0, 1 );\n\tVarys.vBaseArrayLayer = instanceIndex;\n\n\treturn Varys;\n\n}\n\n@group( 0 ) @binding( 0 )\nvar imgSampler : sampler;\n\n@group( 0 ) @binding( 1 )\nvar img2d : texture_2d;\n\n@fragment\nfn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2d, imgSampler, Varys.vTex );\n\n}\n\n@group( 0 ) @binding( 1 )\nvar img2dArray : texture_2d_array;\n\n@fragment\nfn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );\n\n}\n\nconst faceMat = array(\n mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1 ), // pos-x\n mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1 ), // neg-x\n mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1 ), // pos-y\n mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1 ), // neg-y\n mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1 ), // pos-z\n mat3x3f( -2, 0, 0, 0, -2, 0, 1, 1, -1 ), // neg-z\n);\n\n@group( 0 ) @binding( 1 )\nvar imgCube : texture_cube;\n\n@fragment\nfn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4 {\n\n\treturn textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );\n\n}\n"})}getTransferPipeline(e,t){const r=`${e}-${t=t||"2d-array"}`;let s=this.transferPipelines[r];return void 0===s&&(s=this.device.createRenderPipeline({label:`mipmap-${e}-${t}`,vertex:{module:this.mipmapShaderModule},fragment:{module:this.mipmapShaderModule,entryPoint:`main_${t.replace("-","_")}`,targets:[{format:e}]},layout:"auto"}),this.transferPipelines[r]=s),s}flipY(e,t,r=0){const s=t.format,{width:i,height:n}=t.size,a=this.device.createTexture({size:{width:i,height:n},format:s,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING}),o=this.getTransferPipeline(s,e.textureBindingViewDimension),u=this.getTransferPipeline(s,a.textureBindingViewDimension),l=this.device.createCommandEncoder({}),d=(e,t,r,s,i,n)=>{const a=e.getBindGroupLayout(0),o=this.device.createBindGroup({layout:a,entries:[{binding:0,resource:this.flipYSampler},{binding:1,resource:t.createView({dimension:t.textureBindingViewDimension||"2d-array",baseMipLevel:0,mipLevelCount:1})},{binding:2,resource:{buffer:n?this.flipUniformBuffer:this.noFlipUniformBuffer}}]}),u=l.beginRenderPass({colorAttachments:[{view:s.createView({dimension:"2d",baseMipLevel:0,mipLevelCount:1,baseArrayLayer:i,arrayLayerCount:1}),loadOp:eE,storeOp:ZR}]});u.setPipeline(e),u.setBindGroup(0,o),u.draw(3,1,0,r),u.end()};d(o,e,r,a,0,!1),d(u,a,0,e,r,!0),this.device.queue.submit([l.finish()]),a.destroy()}generateMipmaps(e,t=null){const r=this.get(e),s=r.layers||this._mipmapCreateBundles(e),i=t||this.device.createCommandEncoder({label:"mipmapEncoder"});this._mipmapRunBundles(i,s),null===t&&this.device.queue.submit([i.finish()]),r.layers=s}_mipmapCreateBundles(e){const t=e.textureBindingViewDimension||"2d-array",r=this.getTransferPipeline(e.format,t),s=r.getBindGroupLayout(0),i=[];for(let n=1;n0)for(let t=0,n=s.length;t0){for(const s of e.layerUpdates)this._copyBufferToTexture(t.image,r.texture,i,s,e.flipY,s);e.clearLayerUpdates()}else for(let s=0;s0)for(let t=0,n=s.length;t0?e.width:r.size.width,l=a>0?e.height:r.size.height;try{o.queue.copyExternalImageToTexture({source:e,flipY:i},{texture:t,mipLevel:a,origin:{x:0,y:0,z:s},premultipliedAlpha:n},{width:u,height:l,depthOrArrayLayers:1})}catch(e){}}_getPassUtils(){let e=this._passUtils;return null===e&&(this._passUtils=e=new Zw(this.backend.device)),e}_generateMipmaps(e,t=null){this._getPassUtils().generateMipmaps(e,t)}_flipY(e,t,r=0){this._getPassUtils().flipY(e,t,r)}_copyBufferToTexture(e,t,r,s,i,n=0,a=0){const o=this.backend.device,u=e.data,l=this._getBytesPerTexel(r.format),d=e.width*l;o.queue.writeTexture({texture:t,mipLevel:a,origin:{x:0,y:0,z:s}},u,{offset:e.width*e.height*l*n,bytesPerRow:d},{width:e.width,height:e.height,depthOrArrayLayers:1}),!0===i&&this._flipY(t,r,s)}_copyCompressedBufferToTexture(e,t,r){const s=this.backend.device,i=this._getBlockData(r.format),n=r.size.depthOrArrayLayers>1;for(let a=0;a]*\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/i,iC=/([a-z_0-9]+)\s*:\s*([a-z_0-9]+(?:<[\s\S]+?>)?)/gi,nC={f32:"float",i32:"int",u32:"uint",bool:"bool","vec2":"vec2","vec2":"ivec2","vec2":"uvec2","vec2":"bvec2",vec2f:"vec2",vec2i:"ivec2",vec2u:"uvec2",vec2b:"bvec2","vec3":"vec3","vec3":"ivec3","vec3":"uvec3","vec3":"bvec3",vec3f:"vec3",vec3i:"ivec3",vec3u:"uvec3",vec3b:"bvec3","vec4":"vec4","vec4":"ivec4","vec4":"uvec4","vec4":"bvec4",vec4f:"vec4",vec4i:"ivec4",vec4u:"uvec4",vec4b:"bvec4","mat2x2":"mat2",mat2x2f:"mat2","mat3x3":"mat3",mat3x3f:"mat3","mat4x4":"mat4",mat4x4f:"mat4",sampler:"sampler",texture_1d:"texture",texture_2d:"texture",texture_2d_array:"texture",texture_multisampled_2d:"cubeTexture",texture_depth_2d:"depthTexture",texture_depth_2d_array:"depthTexture",texture_depth_multisampled_2d:"depthTexture",texture_depth_cube:"depthTexture",texture_depth_cube_array:"depthTexture",texture_3d:"texture3D",texture_cube:"cubeTexture",texture_cube_array:"cubeTexture",texture_storage_1d:"storageTexture",texture_storage_2d:"storageTexture",texture_storage_2d_array:"storageTexture",texture_storage_3d:"storageTexture"};class aC extends lS{constructor(e){const{type:t,inputs:r,name:s,inputsCode:i,blockCode:n,outputType:a}=(e=>{const t=(e=e.trim()).match(sC);if(null!==t&&4===t.length){const r=t[2],s=[];let i=null;for(;null!==(i=iC.exec(r));)s.push({name:i[1],type:i[2]});const n=[];for(let e=0;e "+this.outputType:"";return`fn ${e} ( ${this.inputsCode.trim()} ) ${t}`+this.blockCode}}class oC extends uS{parseFunction(e){return new aC(e)}}const uC={[si.READ_ONLY]:"read",[si.WRITE_ONLY]:"write",[si.READ_WRITE]:"read_write"},lC={[Gr]:"repeat",[ve]:"clamp",[kr]:"mirror"},dC={vertex:zR.VERTEX,fragment:zR.FRAGMENT,compute:zR.COMPUTE},cC={instance:!0,swizzleAssign:!1,storageBuffer:!0},hC={"^^":"tsl_xor"},pC={float:"f32",int:"i32",uint:"u32",bool:"bool",color:"vec3",vec2:"vec2",ivec2:"vec2",uvec2:"vec2",bvec2:"vec2",vec3:"vec3",ivec3:"vec3",uvec3:"vec3",bvec3:"vec3",vec4:"vec4",ivec4:"vec4",uvec4:"vec4",bvec4:"vec4",mat2:"mat2x2",mat3:"mat3x3",mat4:"mat4x4"},gC={},mC={tsl_xor:new pT("fn tsl_xor( a : bool, b : bool ) -> bool { return ( a || b ) && !( a && b ); }"),mod_float:new pT("fn tsl_mod_float( x : f32, y : f32 ) -> f32 { return x - y * floor( x / y ); }"),mod_vec2:new pT("fn tsl_mod_vec2( x : vec2f, y : vec2f ) -> vec2f { return x - y * floor( x / y ); }"),mod_vec3:new pT("fn tsl_mod_vec3( x : vec3f, y : vec3f ) -> vec3f { return x - y * floor( x / y ); }"),mod_vec4:new pT("fn tsl_mod_vec4( x : vec4f, y : vec4f ) -> vec4f { return x - y * floor( x / y ); }"),equals_bool:new pT("fn tsl_equals_bool( a : bool, b : bool ) -> bool { return a == b; }"),equals_bvec2:new pT("fn tsl_equals_bvec2( a : vec2f, b : vec2f ) -> vec2 { return vec2( a.x == b.x, a.y == b.y ); }"),equals_bvec3:new pT("fn tsl_equals_bvec3( a : vec3f, b : vec3f ) -> vec3 { return vec3( a.x == b.x, a.y == b.y, a.z == b.z ); }"),equals_bvec4:new pT("fn tsl_equals_bvec4( a : vec4f, b : vec4f ) -> vec4 { return vec4( a.x == b.x, a.y == b.y, a.z == b.z, a.w == b.w ); }"),repeatWrapping_float:new pT("fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }"),mirrorWrapping_float:new pT("fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }"),clampWrapping_float:new pT("fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }"),biquadraticTexture:new pT("\nfn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n"),biquadraticTextureArray:new pT("\nfn tsl_biquadraticTexture_array( map : texture_2d_array, coord : vec2f, iRes : vec2u, layer : u32, level : u32 ) -> vec4f {\n\n\tlet res = vec2f( iRes );\n\n\tlet uvScaled = coord * res;\n\tlet uvWrapping = ( ( uvScaled % res ) + res ) % res;\n\n\t// https://www.shadertoy.com/view/WtyXRy\n\n\tlet uv = uvWrapping - 0.5;\n\tlet iuv = floor( uv );\n\tlet f = fract( uv );\n\n\tlet rg1 = textureLoad( map, vec2u( iuv + vec2( 0.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg2 = textureLoad( map, vec2u( iuv + vec2( 1.5, 0.5 ) ) % iRes, layer, level );\n\tlet rg3 = textureLoad( map, vec2u( iuv + vec2( 0.5, 1.5 ) ) % iRes, layer, level );\n\tlet rg4 = textureLoad( map, vec2u( iuv + vec2( 1.5, 1.5 ) ) % iRes, layer, level );\n\n\treturn mix( mix( rg1, rg2, f.x ), mix( rg3, rg4, f.x ), f.y );\n\n}\n")},fC={dFdx:"dpdx",dFdy:"- dpdy",mod_float:"tsl_mod_float",mod_vec2:"tsl_mod_vec2",mod_vec3:"tsl_mod_vec3",mod_vec4:"tsl_mod_vec4",equals_bool:"tsl_equals_bool",equals_bvec2:"tsl_equals_bvec2",equals_bvec3:"tsl_equals_bvec3",equals_bvec4:"tsl_equals_bvec4",inversesqrt:"inverseSqrt",bitcast:"bitcast",floatpack_snorm_2x16:"pack2x16snorm",floatpack_unorm_2x16:"pack2x16unorm",floatpack_float16_2x16:"pack2x16float",floatunpack_snorm_2x16:"unpack2x16snorm",floatunpack_unorm_2x16:"unpack2x16unorm",floatunpack_float16_2x16:"unpack2x16float"};let yC="";!0!==("undefined"!=typeof navigator&&/Firefox|Deno/g.test(navigator.userAgent))&&(yC+="diagnostic( off, derivative_uniformity );\n");class bC extends jN{constructor(e,t){super(e,t,new oC),this.uniformGroups={},this.uniformGroupsBindings={},this.builtins={},this.directives={},this.scopedArrays=new Map}_generateTextureSample(e,t,r,s,i,n=this.shaderStage){return"fragment"===n?s?i?`textureSample( ${t}, ${t}_sampler, ${r}, ${s}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r}, ${s} )`:i?`textureSample( ${t}, ${t}_sampler, ${r}, ${i} )`:`textureSample( ${t}, ${t}_sampler, ${r} )`:this.generateTextureSampleLevel(e,t,r,"0",s)}generateTextureSampleLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateWrapFunction(e){const t=`tsl_coord_${lC[e.wrapS]}S_${lC[e.wrapT]}_${e.is3DTexture||e.isData3DTexture?"3d":"2d"}T`;let r=gC[t];if(void 0===r){const s=[],i=e.is3DTexture||e.isData3DTexture?"vec3f":"vec2f";let n=`fn ${t}( coord : ${i} ) -> ${i} {\n\n\treturn ${i}(\n`;const a=(e,t)=>{e===Gr?(s.push(mC.repeatWrapping_float),n+=`\t\ttsl_repeatWrapping_float( coord.${t} )`):e===ve?(s.push(mC.clampWrapping_float),n+=`\t\ttsl_clampWrapping_float( coord.${t} )`):e===kr?(s.push(mC.mirrorWrapping_float),n+=`\t\ttsl_mirrorWrapping_float( coord.${t} )`):(n+=`\t\tcoord.${t}`,d(`WebGPURenderer: Unsupported texture wrap type "${e}" for vertex shader.`))};a(e.wrapS,"x"),n+=",\n",a(e.wrapT,"y"),(e.is3DTexture||e.isData3DTexture)&&(n+=",\n",a(e.wrapR,"z")),n+="\n\t);\n\n}\n",gC[t]=r=new pT(n,s)}return r.build(this),t}generateArrayDeclaration(e,t){return`array< ${this.getType(e)}, ${t} >`}generateTextureDimension(e,t,r){const s=this.getDataFromNode(e,this.shaderStage,this.globalCache);void 0===s.dimensionsSnippet&&(s.dimensionsSnippet={});let i=s.dimensionsSnippet[r];if(void 0===s.dimensionsSnippet[r]){let n,a;const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(e),u=o>1;a=e.is3DTexture||e.isData3DTexture?"vec3":"vec2",n=u||e.isStorageTexture?t:`${t}${r?`, u32( ${r} )`:""}`,i=new wu(new ml(`textureDimensions( ${n} )`,a)),s.dimensionsSnippet[r]=i,(e.isArrayTexture||e.isDataArrayTexture||e.is3DTexture||e.isData3DTexture)&&(s.arrayLayerCount=new wu(new ml(`textureNumLayers(${t})`,"u32"))),e.isTextureCube&&(s.cubeFaceCount=new wu(new ml("6u","u32")))}return i.build(this)}generateFilteredTexture(e,t,r,s,i="0u",n){const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,i);return s&&(r=`${r} + vec2(${s}) / ${o}`),n?(this._include("biquadraticTextureArray"),`tsl_biquadraticTexture_array( ${t}, ${a}( ${r} ), ${o}, u32( ${n} ), u32( ${i} ) )`):(this._include("biquadraticTexture"),`tsl_biquadraticTexture( ${t}, ${a}( ${r} ), ${o}, u32( ${i} ) )`)}generateTextureLod(e,t,r,s,i,n="0u"){if(!0===e.isCubeTexture){i&&(r=`${r} + vec3(${i})`);return`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${e.isDepthTexture?"u32":"f32"}( ${n} ) )`}const a=this.generateWrapFunction(e),o=this.generateTextureDimension(e,t,n),u=e.is3DTexture||e.isData3DTexture?"vec3":"vec2";i&&(r=`${r} + ${u}(${i}) / ${u}( ${o} )`);return r=`${u}( clamp( floor( ${a}( ${r} ) * ${u}( ${o} ) ), ${`${u}( 0 )`}, ${`${u}( ${o} - ${"vec3"===u?"vec3( 1, 1, 1 )":"vec2( 1, 1 )"} )`} ) )`,this.generateTextureLoad(e,t,r,n,s,null)}generateStorageTextureLoad(e,t,r,s,i,n){let a;return n&&(r=`${r} + ${n}`),a=i?`textureLoad( ${t}, ${r}, ${i} )`:`textureLoad( ${t}, ${r} )`,a}generateTextureLoad(e,t,r,s,i,n){let a;return null===s&&(s="0u"),n&&(r=`${r} + ${n}`),i?a=`textureLoad( ${t}, ${r}, ${i}, u32( ${s} ) )`:(a=`textureLoad( ${t}, ${r}, u32( ${s} ) )`,this.renderer.backend.compatibilityMode&&e.isDepthTexture&&(a+=".x")),a}generateTextureStore(e,t,r,s,i){let n;return n=s?`textureStore( ${t}, ${r}, ${s}, ${i} )`:`textureStore( ${t}, ${r}, ${i} )`,n}isSampleCompare(e){return!0===e.isDepthTexture&&null!==e.compareFunction&&this.renderer.hasCompatibility(E.TEXTURE_COMPARE)}isUnfilterable(e){return"float"!==this.getComponentTypeFromTexture(e)||!this.isAvailable("float32Filterable")&&!0===e.isDataTexture&&e.type===Q||!1===this.isSampleCompare(e)&&e.minFilter===B&&e.magFilter===B||this.renderer.backend.utils.getTextureSampleData(e).primarySamples>1}generateTexture(e,t,r,s,i,n=this.shaderStage){let a=null;return a=this.isUnfilterable(e)?this.generateTextureLod(e,t,r,s,i,"0",n):this._generateTextureSample(e,t,r,s,i,n),a}generateTextureGrad(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${i}, ${s[0]}, ${s[1]} )`:n?`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]}, ${n} )`:`textureSampleGrad( ${t}, ${t}_sampler, ${r}, ${s[0]}, ${s[1]} )`;o(`WebGPURenderer: THREE.TextureNode.gradient() does not support ${a} shader.`)}generateTextureCompare(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return!0===e.isDepthTexture&&!0===e.isArrayTexture?n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleCompare( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${a} shader.`)}generateTextureLevel(e,t,r,s,i,n){return!1===this.isUnfilterable(e)?i?n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleLevel( ${t}, ${t}_sampler, ${r}, ${s} )`:this.isFilteredTexture(e)?this.generateFilteredTexture(e,t,r,n,s,i):this.generateTextureLod(e,t,r,i,n,s)}generateTextureBias(e,t,r,s,i,n,a=this.shaderStage){if("fragment"===a)return i?n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${i}, ${s} )`:n?`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s}, ${n} )`:`textureSampleBias( ${t}, ${t}_sampler, ${r}, ${s} )`;o(`WebGPURenderer: THREE.TextureNode.biasNode does not support ${a} shader.`)}getPropertyName(e,t=this.shaderStage){if(!0===e.isNodeVarying&&!0===e.needsInterpolation){if("vertex"===t)return`varyings.${e.name}`}else if(!0===e.isNodeUniform){const t=e.name,r=e.type;return"texture"===r||"cubeTexture"===r||"cubeDepthTexture"===r||"storageTexture"===r||"texture3D"===r?t:"buffer"===r||"storageBuffer"===r||"indirectStorageBuffer"===r?this.isCustomStruct(e)?t:t+".value":e.groupNode.name+"."+t}return super.getPropertyName(e)}getOutputStructName(){return"output"}getFunctionOperator(e){const t=hC[e];return void 0!==t?(this._include(t),t):null}getNodeAccess(e,t){return"compute"!==t?!0===e.isAtomic?(d("WebGPURenderer: Atomic operations are only supported in compute shaders."),si.READ_WRITE):si.READ_ONLY:e.access}getStorageAccess(e,t){return uC[this.getNodeAccess(e,t)]}getUniformFromNode(e,t,r,s=null){const i=super.getUniformFromNode(e,t,r,s),n=this.getDataFromNode(e,r,this.globalCache);if(void 0===n.uniformGPU){let a;const o=e.groupNode,u=o.name,l=this.getBindGroupArray(u,r);if("texture"===t||"cubeTexture"===t||"cubeDepthTexture"===t||"storageTexture"===t||"texture3D"===t){let s=null;const n=this.getNodeAccess(e,r);"texture"===t||"storageTexture"===t?s=!0===e.value.is3DTexture?new oR(i.name,i.node,o,n):new nR(i.name,i.node,o,n):"cubeTexture"===t||"cubeDepthTexture"===t?s=new aR(i.name,i.node,o,n):"texture3D"===t&&(s=new oR(i.name,i.node,o,n)),s.store=!0===e.isStorageTextureNode,s.mipLevel=s.store?e.mipLevel:0,s.setVisibility(dC[r]);if(!0===e.value.isCubeTexture||!1===this.isUnfilterable(e.value)&&!1===s.store){const e=new Xw(`${i.name}_sampler`,i.node,o);e.setVisibility(dC[r]),l.push(e,s),a=[e,s]}else l.push(s),a=[s]}else if("buffer"===t||"storageBuffer"===t||"indirectStorageBuffer"===t){const n=this.getSharedDataFromNode(e);let u=n.buffer;if(void 0===u){u=new("buffer"===t?ZS:Yw)(e,o),n.buffer=u}u.setVisibility(u.getVisibility()|dC[r]),l.push(u),a=u,i.name=s||"NodeBuffer_"+i.id}else{let e=this.uniformGroups[u];void 0===e&&(e=new tR(u,o),e.setVisibility(zR.VERTEX|zR.FRAGMENT|zR.COMPUTE),this.uniformGroups[u]=e),-1===l.indexOf(e)&&l.push(e),a=this.getNodeUniform(i,t);const r=a.name;e.uniforms.some(e=>e.name===r)||e.addUniform(a)}n.uniformGPU=a}return i}getBuiltin(e,t,r,s=this.shaderStage){const i=this.builtins[s]||(this.builtins[s]=new Map);return!1===i.has(e)&&i.set(e,{name:e,property:t,type:r}),t}hasBuiltin(e,t=this.shaderStage){return void 0!==this.builtins[t]&&this.builtins[t].has(e)}getVertexIndex(){return"vertex"===this.shaderStage?this.getBuiltin("vertex_index","vertexIndex","u32","attribute"):"vertexIndex"}buildFunctionCode(e){const t=e.layout,r=this.flowShaderNode(e),s=[];for(const e of t.inputs)s.push(e.name+" : "+this.getType(e.type));let i=`fn ${t.name}( ${s.join(", ")} ) -> ${this.getType(t.type)} {\n${r.vars}\n${r.code}\n`;return r.result&&(i+=`\treturn ${r.result};\n`),i+="\n}\n",i}getInstanceIndex(){return"vertex"===this.shaderStage?this.getBuiltin("instance_index","instanceIndex","u32","attribute"):"instanceIndex"}getInvocationLocalIndex(){return this.getBuiltin("local_invocation_index","invocationLocalIndex","u32","attribute")}getSubgroupSize(){return this.enableSubGroups(),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute")}getInvocationSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_invocation_id","invocationSubgroupIndex","u32","attribute")}getSubgroupIndex(){return this.enableSubGroups(),this.getBuiltin("subgroup_id","subgroupIndex","u32","attribute")}getDrawIndex(){return null}getFrontFacing(){return this.getBuiltin("front_facing","isFront","bool")}getFragCoord(){return this.getBuiltin("position","fragCoord","vec4")+".xy"}getFragDepth(){return"output."+this.getBuiltin("frag_depth","depth","f32","output")}getClipDistance(){return"varyings.hw_clip_distances"}isFlipY(){return!1}enableDirective(e,t=this.shaderStage){(this.directives[t]||(this.directives[t]=new Set)).add(e)}getDirectives(e){const t=[],r=this.directives[e];if(void 0!==r)for(const e of r)t.push(`enable ${e};`);return t.join("\n")}enableSubGroups(){this.enableDirective("subgroups")}enableSubgroupsF16(){this.enableDirective("subgroups-f16")}enableClipDistances(){this.enableDirective("clip_distances")}enableShaderF16(){this.enableDirective("f16")}enableDualSourceBlending(){this.enableDirective("dual_source_blending")}enableHardwareClipping(e){this.enableClipDistances(),this.getBuiltin("clip_distances","hw_clip_distances",`array`,"vertex")}getBuiltins(e){const t=[],r=this.builtins[e];if(void 0!==r)for(const{name:e,property:s,type:i}of r.values())t.push(`@builtin( ${e} ) ${s} : ${i}`);return t.join(",\n\t")}getScopedArray(e,t,r,s){return!1===this.scopedArrays.has(e)&&this.scopedArrays.set(e,{name:e,scope:t,bufferType:r,bufferCount:s}),e}getScopedArrays(e){if("compute"!==e)return;const t=[];for(const{name:e,scope:r,bufferType:s,bufferCount:i}of this.scopedArrays.values()){const n=this.getType(s);t.push(`var<${r}> ${e}: array< ${n}, ${i} >;`)}return t.join("\n")}getAttributes(e){const t=[];if("compute"===e&&(this.getBuiltin("global_invocation_id","globalId","vec3","attribute"),this.getBuiltin("workgroup_id","workgroupId","vec3","attribute"),this.getBuiltin("local_invocation_id","localId","vec3","attribute"),this.getBuiltin("num_workgroups","numWorkgroups","vec3","attribute"),this.renderer.hasFeature("subgroups")&&(this.enableDirective("subgroups",e),this.getBuiltin("subgroup_size","subgroupSize","u32","attribute"))),"vertex"===e||"compute"===e){const e=this.getBuiltins("attribute");e&&t.push(e);const r=this.getAttributesArray();for(let e=0,s=r.length;e"),t.push(`\t${s+r.name} : ${i}`)}return e.output&&t.push(`\t${this.getBuiltins("output")}`),t.join(",\n")}getStructs(e){let t="";const r=this.structs[e];if(r.length>0){const e=[];for(const t of r){let r=`struct ${t.name} {\n`;r+=this.getStructMembers(t),r+="\n};",e.push(r)}t="\n"+e.join("\n\n")+"\n"}return t}getVar(e,t,r=null){let s=`var ${t} : `;return s+=null!==r?this.generateArrayDeclaration(e,r):this.getType(e),s}getVars(e){const t=[],r=this.vars[e];if(void 0!==r)for(const e of r)t.push(`\t${this.getVar(e.type,e.name,e.count)};`);return`\n${t.join("\n")}\n`}getVaryings(e){const t=[];if("vertex"===e&&this.getBuiltin("position","builtinClipSpace","vec4","vertex"),"vertex"===e||"fragment"===e){const r=this.varyings,s=this.vars[e];for(let i=0;ir.value.itemSize;return s&&!i}getUniforms(e){const t=this.uniforms[e],r=[],s=[],i=[],n={};for(const i of t){const t=i.groupNode.name,a=this.bindingsIndexes[t];if("texture"===i.type||"cubeTexture"===i.type||"cubeDepthTexture"===i.type||"storageTexture"===i.type||"texture3D"===i.type){const t=i.node.value;let s;(!0===t.isCubeTexture||!1===this.isUnfilterable(t)&&!0!==i.node.isStorageTextureNode)&&(this.isSampleCompare(t)?r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler_comparison;`):r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name}_sampler : sampler;`));let n="";const{primarySamples:o}=this.renderer.backend.utils.getTextureSampleData(t);if(o>1&&(n="_multisampled"),!0===t.isCubeTexture&&!0===t.isDepthTexture)s="texture_depth_cube";else if(!0===t.isCubeTexture)s="texture_cube";else if(!0===t.isDepthTexture)s=this.renderer.backend.compatibilityMode&&null===t.compareFunction?`texture${n}_2d`:`texture_depth${n}_2d${!0===t.isArrayTexture?"_array":""}`;else if(!0===i.node.isStorageTextureNode){const r=rC(t),n=this.getStorageAccess(i.node,e),a=i.node.value.is3DTexture,o=i.node.value.isArrayTexture;s=`texture_storage_${a?"3d":"2d"+(o?"_array":"")}<${r}, ${n}>`}else if(!0===t.isArrayTexture||!0===t.isDataArrayTexture||!0===t.isCompressedArrayTexture)s="texture_2d_array";else if(!0===t.is3DTexture||!0===t.isData3DTexture)s="texture_3d";else{s=`texture${n}_2d<${this.getComponentTypeFromTexture(t).charAt(0)}32>`}r.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var ${i.name} : ${s};`)}else if("buffer"===i.type||"storageBuffer"===i.type||"indirectStorageBuffer"===i.type){const t=i.node,r=this.getType(t.getNodeType(this)),n=t.bufferCount,o=n>0&&"buffer"===i.type?", "+n:"",u=t.isStorageBufferNode?`storage, ${this.getStorageAccess(t,e)}`:"uniform";if(this.isCustomStruct(i))s.push(`@binding( ${a.binding++} ) @group( ${a.group} ) var<${u}> ${i.name} : ${r};`);else{const e=`\tvalue : array< ${t.isAtomic?`atomic<${r}>`:`${r}`}${o} >`;s.push(this._getWGSLStructBinding(i.name,e,u,a.binding++,a.group))}}else{const e=i.groupNode.name;if(void 0===n[e]){const t=this.uniformGroups[e];if(void 0!==t){const r=[];for(const e of t.uniforms){const t=e.getType(),s=this.getType(this.getVectorType(t));r.push(`\t${e.name} : ${s}`)}let s=this.uniformGroupsBindings[e];void 0===s&&(s={index:a.binding++,id:a.group},this.uniformGroupsBindings[e]=s),n[e]={index:s.index,id:s.id,snippets:r}}}}}for(const e in n){const t=n[e];i.push(this._getWGSLStructBinding(e,t.snippets.join(",\n"),"uniform",t.index,t.id))}return[...r,...s,...i].join("\n")}buildCode(){const e=null!==this.material?{fragment:{},vertex:{}}:{compute:{}};this.sortBindingGroups();for(const t in e){this.shaderStage=t;const r=e[t];r.uniforms=this.getUniforms(t),r.attributes=this.getAttributes(t),r.varyings=this.getVaryings(t),r.structs=this.getStructs(t),r.vars=this.getVars(t),r.codes=this.getCodes(t),r.directives=this.getDirectives(t),r.scopedArrays=this.getScopedArrays(t);let s="// code\n\n";s+=this.flowCode[t];const i=this.flowNodes[t],n=i[i.length-1],a=n.outputNode,o=void 0!==a&&!0===a.isOutputStructNode;for(const e of i){const i=this.getFlowData(e),u=e.name;if(u&&(s.length>0&&(s+="\n"),s+=`\t// flow -> ${u}\n`),s+=`${i.code}\n\t`,e===n&&"compute"!==t)if(s+="// result\n\n\t","vertex"===t)s+=`varyings.builtinClipSpace = ${i.result};`;else if("fragment"===t)if(o)r.returnType=a.getNodeType(this),r.structs+="var output : "+r.returnType+";",s+=`return ${i.result};`;else{let e="\t@location(0) color: vec4";const t=this.getBuiltins("output");t&&(e+=",\n\t"+t),r.returnType="OutputStruct",r.structs+=this._getWGSLStruct("OutputStruct",e),r.structs+="\nvar output : OutputStruct;",s+=`output.color = ${i.result};\n\n\treturn output;`}}r.flow=s}if(this.shaderStage=null,null!==this.material)this.vertexShader=this._getWGSLVertexCode(e.vertex),this.fragmentShader=this._getWGSLFragmentCode(e.fragment);else{const t=this.object.workgroupSize;this.computeShader=this._getWGSLComputeCode(e.compute,t)}}getMethod(e,t=null){let r;return null!==t&&(r=this._getWGSLMethod(e+"_"+t)),void 0===r&&(r=this._getWGSLMethod(e)),r||e}getBitcastMethod(e){return`bitcast<${this.getType(e)}>`}getFloatPackingMethod(e){return this.getMethod(`floatpack_${e}_2x16`)}getFloatUnpackingMethod(e){return this.getMethod(`floatunpack_${e}_2x16`)}getTernary(e,t,r){return`select( ${r}, ${t}, ${e} )`}getType(e){return pC[e]||e}isAvailable(e){let t=cC[e];return void 0===t&&("float32Filterable"===e?t=this.renderer.hasFeature("float32-filterable"):"clipDistance"===e&&(t=this.renderer.hasFeature("clip-distances")),cC[e]=t),t}getUniformBufferLimit(){return this.renderer.backend.device.limits.maxUniformBufferBindingSize}_getWGSLMethod(e){return void 0!==mC[e]&&this._include(e),fC[e]}_include(e){const t=mC[e];return t.build(this),this.addInclude(t),t}_getWGSLVertexCode(e){return`${this.getSignature()}\n// directives\n${e.directives}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// varyings\n${e.varyings}\nvar varyings : VaryingsStruct;\n\n// codes\n${e.codes}\n\n@vertex\nfn main( ${e.attributes} ) -> VaryingsStruct {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n\treturn varyings;\n\n}\n`}_getWGSLFragmentCode(e){return`${this.getSignature()}\n// global\n${yC}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@fragment\nfn main( ${e.varyings} ) -> ${e.returnType} {\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLComputeCode(e,t){const[r,s,i]=t;return`${this.getSignature()}\n// directives\n${e.directives}\n\n// system\nvar instanceIndex : u32;\n\n// locals\n${e.scopedArrays}\n\n// structs\n${e.structs}\n\n// uniforms\n${e.uniforms}\n\n// codes\n${e.codes}\n\n@compute @workgroup_size( ${r}, ${s}, ${i} )\nfn main( ${e.attributes} ) {\n\n\t// system\n\tinstanceIndex = globalId.x\n\t\t+ globalId.y * ( ${r} * numWorkgroups.x )\n\t\t+ globalId.z * ( ${r} * numWorkgroups.x ) * ( ${s} * numWorkgroups.y );\n\n\t// vars\n\t${e.vars}\n\n\t// flow\n\t${e.flow}\n\n}\n`}_getWGSLStruct(e,t){return`\nstruct ${e} {\n${t}\n};`}_getWGSLStructBinding(e,t,r,s=0,i=0){const n=e+"Struct";return`${this._getWGSLStruct(n,t)}\n@binding( ${s} ) @group( ${i} )\nvar<${r}> ${e} : ${n};`}}class xC{constructor(e){this.backend=e}getCurrentDepthStencilFormat(e){let t;return e.depth&&(t=null!==e.depthTexture?this.getTextureFormatGPU(e.depthTexture):e.stencil?HE:WE),t}getTextureFormatGPU(e){return this.backend.get(e).format}getTextureSampleData(e){let t;if(e.isFramebufferTexture)t=1;else if(e.isDepthTexture&&!e.renderTarget){const e=this.backend.renderer,r=e.getRenderTarget();t=r?r.samples:e.currentSamples}else e.renderTarget&&(t=e.renderTarget.samples);t=t||1;const r=t>1&&null!==e.renderTarget&&!0!==e.isDepthTexture&&!0!==e.isFramebufferTexture;return{samples:t,primarySamples:r?1:t,isMSAA:r}}getCurrentColorFormat(e){let t;return t=null!==e.textures?this.getTextureFormatGPU(e.textures[0]):this.getPreferredCanvasFormat(),t}getCurrentColorFormats(e){return null!==e.textures?e.textures.map(e=>this.getTextureFormatGPU(e)):[this.getPreferredCanvasFormat()]}getCurrentColorSpace(e){return null!==e.textures?e.textures[0].colorSpace:this.backend.renderer.outputColorSpace}getPrimitiveTopology(e,t){return e.isPoints?VR:e.isLineSegments||e.isMesh&&!0===t.wireframe?kR:e.isLine?GR:e.isMesh?$R:void 0}getSampleCount(e){return e>=4?4:1}getSampleCountRenderContext(e){return null!==e.textures?this.getSampleCount(e.sampleCount):this.getSampleCount(this.backend.renderer.currentSamples)}getPreferredCanvasFormat(){const e=this.backend.parameters.outputType;if(void 0===e)return navigator.gpu.getPreferredCanvasFormat();if(e===$e)return CE;if(e===_e)return VE;throw new Error("Unsupported output buffer type.")}}const TC=new Map([[Int8Array,["sint8","snorm8"]],[Uint8Array,["uint8","unorm8"]],[Int16Array,["sint16","snorm16"]],[Uint16Array,["uint16","unorm16"]],[Int32Array,["sint32","snorm32"]],[Uint32Array,["uint32","unorm32"]],[Float32Array,["float32"]]]);"undefined"!=typeof Float16Array&&TC.set(Float16Array,["float16"]);const _C=new Map([[ot,["float16"]]]),vC=new Map([[Int32Array,"sint32"],[Int16Array,"sint32"],[Uint32Array,"uint32"],[Uint16Array,"uint32"],[Float32Array,"float32"]]);class NC{constructor(e){this.backend=e}createAttribute(e,t){const r=this._getBufferAttribute(e),s=this.backend,i=s.get(r);let n=i.buffer;if(void 0===n){const a=s.device;let o=r.array;if(!1===e.normalized)if(o.constructor===Int16Array||o.constructor===Int8Array)o=new Int32Array(o);else if((o.constructor===Uint16Array||o.constructor===Uint8Array)&&(o=new Uint32Array(o),t&GPUBufferUsage.INDEX))for(let e=0;e0&&(void 0===n.groups&&(n.groups=[],n.versions=[]),n.versions[r]===s&&(o=n.groups[r])),void 0===o&&(o=this.createBindGroup(e,a),r>0&&(n.groups[r]=o,n.versions[r]=s)),n.group=o}updateBinding(e){const t=this.backend,r=t.device,s=e.buffer,i=t.get(e).buffer,n=e.updateRanges;if(0===n.length)r.queue.writeBuffer(i,0,s,0);else{const e=Kr(s),t=e?1:s.BYTES_PER_ELEMENT;for(let a=0,o=n.length;a1&&(i+=`-${e.texture.depthOrArrayLayers}`),i+=`-${r}-${s}`,a=e[i],void 0===a){const n=zw;let o;o=t.isSampledCubeTexture?Gw:t.isSampledTexture3D?$w:t.texture.isArrayTexture||t.texture.isDataArrayTexture||t.texture.isCompressedArrayTexture?kw:Vw,a=e[i]=e.texture.createView({aspect:n,dimension:o,mipLevelCount:r,baseMipLevel:s})}}n.push({binding:i,resource:a})}else if(t.isSampler){const e=r.get(t.texture);n.push({binding:i,resource:e.sampler})}i++}return s.createBindGroup({label:"bindGroup_"+e.name,layout:t,entries:n})}_createLayoutEntries(e){const t=[];let r=0;for(const s of e.bindings){const e=this.backend,i={binding:r,visibility:s.visibility};if(s.isUniformBuffer||s.isStorageBuffer){const e={};s.isStorageBuffer&&(s.visibility&zR.COMPUTE&&(s.access===si.READ_WRITE||s.access===si.WRITE_ONLY)?e.type=Rw:e.type=Ew),i.buffer=e}else if(s.isSampledTexture&&s.store){const e={};e.format=this.backend.get(s.texture).texture.format;const t=s.access;e.access=t===si.READ_WRITE?Cw:t===si.WRITE_ONLY?Aw:ww,s.texture.isArrayTexture?e.viewDimension=kw:s.texture.is3DTexture&&(e.viewDimension=$w),i.storageTexture=e}else if(s.isSampledTexture){const t={},{primarySamples:r}=e.utils.getTextureSampleData(s.texture);if(r>1&&(t.multisampled=!0,s.texture.isDepthTexture||(t.sampleType=Lw)),s.texture.isDepthTexture)e.compatibilityMode&&null===s.texture.compareFunction?t.sampleType=Lw:t.sampleType=Pw;else if(s.texture.isDataTexture||s.texture.isDataArrayTexture||s.texture.isData3DTexture){const e=s.texture.type;e===R?t.sampleType=Dw:e===S?t.sampleType=Uw:e===Q&&(this.backend.hasFeature("float32-filterable")?t.sampleType=Fw:t.sampleType=Lw)}s.isSampledCubeTexture?t.viewDimension=Gw:s.texture.isArrayTexture||s.texture.isDataArrayTexture||s.texture.isCompressedArrayTexture?t.viewDimension=kw:s.isSampledTexture3D&&(t.viewDimension=$w),i.texture=t}else if(s.isSampler){const t={};s.texture.isDepthTexture&&(null!==s.texture.compareFunction&&e.hasCompatibility(E.TEXTURE_COMPARE)?t.type=Bw:t.type=Mw),i.sampler=t}else o(`WebGPUBindingUtils: Unsupported binding "${s}".`);t.push(i),r++}return t}deleteBindGroupData(e){const{backend:t}=this,r=t.get(e);r.layout&&(r.layout.usedTimes--,0===r.layout.usedTimes&&this._bindGroupLayoutCache.delete(r.layoutKey),r.layout=void 0,r.layoutKey=void 0)}dispose(){this._bindGroupLayoutCache.clear()}}class EC{constructor(e){this.backend=e,this._activePipelines=new WeakMap}setPipeline(e,t){this._activePipelines.get(e)!==t&&(e.setPipeline(t),this._activePipelines.set(e,t))}_getSampleCount(e){return this.backend.utils.getSampleCountRenderContext(e)}createRenderPipeline(e,t){const{object:r,material:s,geometry:i,pipeline:n}=e,{vertexProgram:a,fragmentProgram:u}=n,l=this.backend,d=l.device,c=l.utils,h=l.get(n),p=[];for(const t of e.getBindings()){const e=l.get(t),{layoutGPU:r}=e.layout;p.push(r)}const g=l.attributeUtils.createShaderVertexBuffers(e);let m;s.blending===se||s.blending===ze&&!1===s.transparent||(m=this._getBlending(s));let f={};!0===s.stencilWrite&&(f={compare:this._getStencilCompare(s),failOp:this._getStencilOperation(s.stencilFail),depthFailOp:this._getStencilOperation(s.stencilZFail),passOp:this._getStencilOperation(s.stencilZPass)});const y=this._getColorWriteMask(s),b=[];if(null!==e.context.textures){const t=e.context.textures,r=e.context.mrt;for(let e=0;e1},layout:d.createPipelineLayout({bindGroupLayouts:p})},A={},w=e.context.depth,C=e.context.stencil;if(!0!==w&&!0!==C||(!0===w&&(A.format=S,A.depthWriteEnabled=s.depthWrite,A.depthCompare=N),!0===C&&(A.stencilFront=f,A.stencilBack=f,A.stencilReadMask=s.stencilFuncMask,A.stencilWriteMask=s.stencilWriteMask),!0===s.polygonOffset&&(A.depthBias=s.polygonOffsetUnits,A.depthBiasSlopeScale=s.polygonOffsetFactor,A.depthBiasClamp=0),E.depthStencil=A),d.pushErrorScope("validation"),null===t)h.pipeline=d.createRenderPipeline(E),d.popErrorScope().then(e=>{null!==e&&(h.error=!0,o(e.message))});else{const e=new Promise(async e=>{try{h.pipeline=await d.createRenderPipelineAsync(E)}catch(e){}const t=await d.popErrorScope();null!==t&&(h.error=!0,o(t.message)),e()});t.push(e)}}createBundleEncoder(e,t="renderBundleEncoder"){const r=this.backend,{utils:s,device:i}=r,n=s.getCurrentDepthStencilFormat(e),a={label:t,colorFormats:s.getCurrentColorFormats(e),depthStencilFormat:n,sampleCount:this._getSampleCount(e)};return i.createRenderBundleEncoder(a)}createComputePipeline(e,t){const r=this.backend,s=r.device,i=r.get(e.computeProgram).module,n=r.get(e),a=[];for(const e of t){const t=r.get(e),{layoutGPU:s}=t.layout;a.push(s)}n.pipeline=s.createComputePipeline({compute:i,layout:s.createPipelineLayout({bindGroupLayouts:a})})}_getBlending(e){let t,r;const s=e.blending,i=e.blendSrc,n=e.blendDst,a=e.blendEquation;if(s===pt){const s=null!==e.blendSrcAlpha?e.blendSrcAlpha:i,o=null!==e.blendDstAlpha?e.blendDstAlpha:n,u=null!==e.blendEquationAlpha?e.blendEquationAlpha:a;t={srcFactor:this._getBlendFactor(i),dstFactor:this._getBlendFactor(n),operation:this._getBlendOperation(a)},r={srcFactor:this._getBlendFactor(s),dstFactor:this._getBlendFactor(o),operation:this._getBlendOperation(u)}}else{const i=(e,s,i,n)=>{t={srcFactor:e,dstFactor:s,operation:dw},r={srcFactor:i,dstFactor:n,operation:dw}};if(e.premultipliedAlpha)switch(s){case ze:i(ZA,rw,ZA,rw);break;case jt:i(ZA,ZA,ZA,ZA);break;case qt:i(YA,ew,YA,ZA);break;case Ht:i(sw,rw,YA,ZA)}else switch(s){case ze:i(tw,rw,ZA,rw);break;case jt:i(tw,ZA,ZA,ZA);break;case qt:o(`WebGPURenderer: "SubtractiveBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`);break;case Ht:o(`WebGPURenderer: "MultiplyBlending" requires "${e.isMaterial?"material":"blendMode"}.premultipliedAlpha = true".`)}}if(void 0!==t&&void 0!==r)return{color:t,alpha:r};o("WebGPURenderer: Invalid blending: ",s)}_getBlendFactor(e){let t;switch(e){case gt:t=YA;break;case Gt:t=ZA;break;case kt:t=JA;break;case Ut:t=ew;break;case We:t=tw;break;case He:t=rw;break;case Ot:t=sw;break;case Dt:t=iw;break;case It:t=nw;break;case Pt:t=aw;break;case Vt:t=ow;break;case 211:t=uw;break;case 212:t=lw;break;default:o("WebGPURenderer: Blend factor not supported.",e)}return t}_getStencilCompare(e){let t;const r=e.stencilFunc;switch(r){case ss:t=WR;break;case rs:t=YR;break;case ts:t=HR;break;case es:t=jR;break;case Jr:t=qR;break;case Zr:t=QR;break;case Yr:t=XR;break;case Qr:t=KR;break;default:o("WebGPURenderer: Invalid stencil function.",r)}return t}_getStencilOperation(e){let t;switch(e){case cs:t=yw;break;case ds:t=bw;break;case ls:t=xw;break;case us:t=Tw;break;case os:t=_w;break;case as:t=vw;break;case ns:t=Nw;break;case is:t=Sw;break;default:o("WebGPURenderer: Invalid stencil operation.",t)}return t}_getBlendOperation(e){let t;switch(e){case qe:t=dw;break;case Lt:t=cw;break;case Ft:t=hw;break;case ps:t=pw;break;case hs:t=gw;break;default:o("WebGPUPipelineUtils: Blend equation not supported.",e)}return t}_getPrimitiveState(e,t,r){const s={},i=this.backend.utils;s.topology=i.getPrimitiveTopology(e,r),null!==t.index&&!0===e.isLine&&!0!==e.isLineSegments&&(s.stripIndexFormat=t.index.array instanceof Uint16Array?nE:aE);let n=r.side===L;return e.isMesh&&e.matrixWorld.determinant()<0&&(n=!n),s.frontFace=!0===n?rE:tE,s.cullMode=r.side===P?sE:iE,s}_getColorWriteMask(e){return!0===e.colorWrite?fw:mw}_getDepthCompare(e){let t;if(!1===e.depthTest)t=YR;else{const r=this.backend.parameters.reversedDepthBuffer?rr[e.depthFunc]:e.depthFunc;switch(r){case tr:t=WR;break;case er:t=YR;break;case Jt:t=HR;break;case Zt:t=jR;break;case Yt:t=qR;break;case Qt:t=QR;break;case Kt:t=XR;break;case Xt:t=KR;break;default:o("WebGPUPipelineUtils: Invalid depth function.",r)}}return t}}class AC extends UR{constructor(e,t,r=2048){super(r),this.device=e,this.type=t,this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxQueries,label:`queryset_global_timestamp_${t}`});const s=8*this.maxQueries;this.resolveBuffer=this.device.createBuffer({label:`buffer_timestamp_resolve_${t}`,size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.resultBuffer=this.device.createBuffer({label:`buffer_timestamp_result_${t}`,size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ})}allocateQueriesForContext(e){if(!this.trackTimestamp||this.isDisposed)return null;if(this.currentQueryIndex+2>this.maxQueries)return v(`WebGPUTimestampQueryPool [${this.type}]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${this.type.toUpperCase()} ).`),null;const t=this.currentQueryIndex;return this.currentQueryIndex+=2,this.queryOffsets.set(e,t),t}async resolveQueriesAsync(){if(!this.trackTimestamp||0===this.currentQueryIndex||this.isDisposed)return this.lastValue;if(this.pendingResolve)return this.pendingResolve;this.pendingResolve=this._resolveQueries();try{return await this.pendingResolve}finally{this.pendingResolve=null}}async _resolveQueries(){if(this.isDisposed)return this.lastValue;try{if("unmapped"!==this.resultBuffer.mapState)return this.lastValue;const e=new Map(this.queryOffsets),t=this.currentQueryIndex,r=8*t;this.currentQueryIndex=0,this.queryOffsets.clear();const s=this.device.createCommandEncoder();s.resolveQuerySet(this.querySet,0,t,this.resolveBuffer,0),s.copyBufferToBuffer(this.resolveBuffer,0,this.resultBuffer,0,r);const i=s.finish();if(this.device.queue.submit([i]),"unmapped"!==this.resultBuffer.mapState)return this.lastValue;if(await this.resultBuffer.mapAsync(GPUMapMode.READ,0,r),this.isDisposed)return"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue;const n=new BigUint64Array(this.resultBuffer.getMappedRange(0,r)),a={},o=[];for(const[t,r]of e){const e=t.match(/^(.*):f(\d+)$/),s=parseInt(e[2]);!1===o.includes(s)&&o.push(s),void 0===a[s]&&(a[s]=0);const i=n[r],u=n[r+1],l=Number(u-i)/1e6;this.timestamps.set(t,l),a[s]+=l}const u=a[o[o.length-1]];return this.resultBuffer.unmap(),this.lastValue=u,this.frames=o,u}catch(e){return o("Error resolving queries:",e),"mapped"===this.resultBuffer.mapState&&this.resultBuffer.unmap(),this.lastValue}}async dispose(){if(!this.isDisposed){if(this.isDisposed=!0,this.pendingResolve)try{await this.pendingResolve}catch(e){o("Error waiting for pending resolve:",e)}if(this.resultBuffer&&"mapped"===this.resultBuffer.mapState)try{this.resultBuffer.unmap()}catch(e){o("Error unmapping buffer:",e)}this.querySet&&(this.querySet.destroy(),this.querySet=null),this.resolveBuffer&&(this.resolveBuffer.destroy(),this.resolveBuffer=null),this.resultBuffer&&(this.resultBuffer.destroy(),this.resultBuffer=null),this.queryOffsets.clear(),this.pendingResolve=null}}}class wC extends bR{constructor(e={}){super(e),this.isWebGPUBackend=!0,this.parameters.alpha=void 0===e.alpha||e.alpha,this.parameters.requiredLimits=void 0===e.requiredLimits?{}:e.requiredLimits,this.compatibilityMode=null,this.device=null,this.defaultRenderPassdescriptor=null,this.utils=new xC(this),this.attributeUtils=new NC(this),this.bindingUtils=new RC(this),this.pipelineUtils=new EC(this),this.textureUtils=new tC(this),this.occludedResolveCache=new Map;const t="undefined"==typeof navigator||!1===/Android/.test(navigator.userAgent);this._compatibility={[E.TEXTURE_COMPARE]:t}}async init(e){await super.init(e);const t=this.parameters;let r;if(void 0===t.device){const e={powerPreference:t.powerPreference,featureLevel:"compatibility"},s="undefined"!=typeof navigator?await navigator.gpu.requestAdapter(e):null;if(null===s)throw new Error("WebGPUBackend: Unable to create WebGPU adapter.");const i=Object.values(qw),n=[];for(const e of i)s.features.has(e)&&n.push(e);const a={requiredFeatures:n,requiredLimits:t.requiredLimits};r=await s.requestDevice(a)}else r=t.device;this.compatibilityMode=!r.features.has("core-features-and-limits"),this.compatibilityMode&&(e._samples=0),r.lost.then(t=>{if("destroyed"===t.reason)return;const r={api:"WebGPU",message:t.message||"Unknown reason",reason:t.reason||null,originalEvent:t};e.onDeviceLost(r)}),this.device=r,this.trackTimestamp=this.trackTimestamp&&this.hasFeature(qw.TimestampQuery),this.updateSize()}get context(){const e=this.renderer.getCanvasTarget(),t=this.get(e);let r=t.context;if(void 0===r){const s=this.parameters;r=!0===e.isDefaultCanvasTarget&&void 0!==s.context?s.context:e.domElement.getContext("webgpu"),"setAttribute"in e.domElement&&e.domElement.setAttribute("data-engine",`three.js r${lt} webgpu`);const i=s.alpha?"premultiplied":"opaque",n=s.outputType===_e?"extended":"standard";r.configure({device:this.device,format:this.utils.getPreferredCanvasFormat(),usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,alphaMode:i,toneMapping:{mode:n}}),t.context=r}return r}get coordinateSystem(){return h}async getArrayBufferAsync(e){return await this.attributeUtils.getArrayBufferAsync(e)}getContext(){return this.context}_getDefaultRenderPassDescriptor(){const e=this.renderer,t=e.getCanvasTarget(),r=this.get(t),s=e.currentSamples;let i=r.descriptor;if(void 0===i||r.samples!==s){i={colorAttachments:[{view:null}]},!0!==e.depth&&!0!==e.stencil||(i.depthStencilAttachment={view:this.textureUtils.getDepthBuffer(e.depth,e.stencil).createView()});const t=i.colorAttachments[0];s>0?t.view=this.textureUtils.getColorBuffer().createView():t.resolveTarget=void 0,r.descriptor=i,r.samples=s}const n=i.colorAttachments[0];return s>0?n.resolveTarget=this.context.getCurrentTexture().createView():n.view=this.context.getCurrentTexture().createView(),i}_isRenderCameraDepthArray(e){return e.depthTexture&&e.depthTexture.image.depth>1&&e.camera.isArrayCamera}_getRenderPassDescriptor(e,t={}){const r=e.renderTarget,s=this.get(r);let i=s.descriptors;void 0!==i&&s.width===r.width&&s.height===r.height&&s.samples===r.samples||(i={},s.descriptors=i);const n=e.getCacheKey();let a=i[n];if(void 0===a){const t=e.textures,o=[];let u;const l=this._isRenderCameraDepthArray(e);for(let s=0;s1)if(!0===l){const t=e.camera.cameras;for(let e=0;e0&&(t.currentOcclusionQuerySet&&t.currentOcclusionQuerySet.destroy(),t.currentOcclusionQueryBuffer&&t.currentOcclusionQueryBuffer.destroy(),t.currentOcclusionQuerySet=t.occlusionQuerySet,t.currentOcclusionQueryBuffer=t.occlusionQueryBuffer,t.currentOcclusionQueryObjects=t.occlusionQueryObjects,i=r.createQuerySet({type:"occlusion",count:s,label:`occlusionQuerySet_${e.id}`}),t.occlusionQuerySet=i,t.occlusionQueryIndex=0,t.occlusionQueryObjects=new Array(s),t.lastOcclusionObject=null),n=null===e.textures?this._getDefaultRenderPassDescriptor():this._getRenderPassDescriptor(e,{loadOp:JR}),this.initTimestampQuery(Mt.RENDER,this.getTimestampUID(e),n),n.occlusionQuerySet=i;const a=n.depthStencilAttachment;if(null!==e.textures){const t=n.colorAttachments;for(let r=0;r0&&t.currentPass.executeBundles(t.renderBundles),r>t.occlusionQueryIndex&&t.currentPass.endOcclusionQuery();const s=t.encoder;if(!0===this._isRenderCameraDepthArray(e)){const r=[];for(let e=0;e0){const s=8*r;let i=this.occludedResolveCache.get(s);void 0===i&&(i=this.device.createBuffer({size:s,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC}),this.occludedResolveCache.set(s,i));const n=this.device.createBuffer({size:s,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});t.encoder.resolveQuerySet(t.occlusionQuerySet,0,r,i,0),t.encoder.copyBufferToBuffer(i,0,n,0,s),t.occlusionQueryBuffer=n,this.resolveOccludedAsync(e)}if(this.device.queue.submit([t.encoder.finish()]),null!==e.textures){const t=e.textures;for(let e=0;eo&&(i[0]=Math.min(a,o),i[1]=Math.ceil(a/o)),n.dispatchSize=i}i=n.dispatchSize}a.dispatchWorkgroups(i[0],i[1]||1,i[2]||1)}finishCompute(e){const t=this.get(e);t.passEncoderGPU.end(),this.device.queue.submit([t.cmdEncoderGPU.finish()])}draw(e,t){const{object:r,material:s,context:i,pipeline:n}=e,a=e.getBindings(),o=this.get(i),u=this.get(n),l=u.pipeline;if(!0===u.error)return;const d=e.getIndex(),c=null!==d,h=e.getDrawParameters();if(null===h)return;const p=(t,r)=>{this.pipelineUtils.setPipeline(t,l),r.pipeline=l;const n=r.bindingGroups;for(let e=0,r=a.length;e{if(p(i,n),!0===r.isBatchedMesh){const e=r._multiDrawStarts,n=r._multiDrawCounts,a=r._multiDrawCount,o=r._multiDrawInstances;null!==o&&v("WebGPUBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.");let u=!0===c?d.array.BYTES_PER_ELEMENT:1;s.wireframe&&(u=r.geometry.attributes.position.count>65535?4:2);for(let s=0;s1?0:s;!0===c?i.drawIndexed(n[s],a,e[s]/u,0,l):i.draw(n[s],a,e[s],l),t.update(r,n[s],a)}}else if(!0===c){const{vertexCount:s,instanceCount:n,firstVertex:a}=h,o=e.getIndirect();if(null!==o){const t=this.get(o).buffer,r=e.getIndirectOffset(),s=Array.isArray(r)?r:[r];for(let e=0;e0){const t=this.get(e.camera),s=e.camera.cameras,n=e.getBindingGroup("cameraIndex");if(void 0===t.indexesGPU||t.indexesGPU.length!==s.length){const e=this.get(n),r=[],i=new Uint32Array([0,0,0,0]);for(let t=0,n=s.length;t(d("WebGPURenderer: WebGPU is not available, running under WebGL2 backend."),new OR(e)));super(new t(e),e),this.library=new BC,this.isWebGPURenderer=!0}}class LC extends As{constructor(){super(),this.isBundleGroup=!0,this.type="BundleGroup",this.static=!0,this.version=0}set needsUpdate(e){!0===e&&this.version++}}class PC{constructor(e,t=wn(0,0,1,1)){this.renderer=e,this.outputNode=t,this.outputColorTransform=!0,this.needsUpdate=!0;const r=new yg;r.name="RenderPipeline",this._quadMesh=new dx(r),this._quadMesh.name="Render Pipeline",this._context=null}render(){const e=this.renderer;this._update(),null!==this._context.onBeforeRenderPipeline&&this._context.onBeforeRenderPipeline();const t=e.toneMapping,r=e.outputColorSpace;e.toneMapping=m,e.outputColorSpace=p.workingColorSpace;const s=e.xr.enabled;e.xr.enabled=!1,this._quadMesh.render(e),e.xr.enabled=s,e.toneMapping=t,e.outputColorSpace=r,null!==this._context.onAfterRenderPipeline&&this._context.onAfterRenderPipeline()}get context(){return this._context}dispose(){this._quadMesh.material.dispose()}_update(){if(!0===this.needsUpdate){const e=this.renderer,t=e.toneMapping,r=e.outputColorSpace,s={renderPipeline:this,onBeforeRenderPipeline:null,onAfterRenderPipeline:null};let i=this.outputNode;!0===this.outputColorTransform?(i=i.context(s),i=xl(i,t,r)):(s.toneMapping=t,s.outputColorSpace=r,i=i.context(s)),this._context=s,this._quadMesh.material.fragmentNode=i,this._quadMesh.material.needsUpdate=!0,this.needsUpdate=!1}}async renderAsync(){v('RenderPipeline: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.'),await this.renderer.init(),this.render()}}class DC extends PC{constructor(e,t){v('PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.'),super(e,t)}}class UC extends N{constructor(e=1,t=1){super(),this.image={width:e,height:t},this.magFilter=de,this.minFilter=de,this.isStorageTexture=!0,this.mipmapsAutoUpdate=!0}setSize(e,t){this.image.width===e&&this.image.height===t||(this.image.width=e,this.image.height=t,this.dispose())}}class IC extends Nx{constructor(e,t){super(e,t,Uint32Array),this.isIndirectStorageBufferAttribute=!0}}class OC extends ws{constructor(e){super(e),this.textures={},this.nodes={}}load(e,t,r,s){const i=new Cs(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,r=>{try{t(this.parse(JSON.parse(r)))}catch(t){s?s(t):o(t),this.manager.itemError(e)}},r,s)}parseNodes(e){const t={};if(void 0!==e){for(const r of e){const{uuid:e,type:s}=r;t[e]=this.createNodeFromType(s),t[e].uuid=e}const r={nodes:t,textures:this.textures};for(const s of e){s.meta=r;t[s.uuid].deserialize(s),delete s.meta}}return t}parse(e){const t=this.createNodeFromType(e.type);t.uuid=e.uuid;const r={nodes:this.parseNodes(e.nodes),textures:this.textures};return e.meta=r,t.deserialize(e),delete e.meta,t}setTextures(e){return this.textures=e,this}setNodes(e){return this.nodes=e,this}createNodeFromType(e){return void 0===this.nodes[e]?(o("NodeLoader: Node type not found:",e),fn()):new this.nodes[e]}}class VC extends Ms{constructor(e){super(e),this.nodes={},this.nodeMaterials={}}parse(e){const t=super.parse(e),r=this.nodes,s=e.inputNodes;for(const e in s){const i=s[e];t[e]=r[i]}return t}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}createMaterialFromType(e){const t=this.nodeMaterials[e];return void 0!==t?new t:super.createMaterialFromType(e)}}class kC extends Bs{constructor(e){super(e),this.nodes={},this.nodeMaterials={},this._nodesJSON=null}setNodes(e){return this.nodes=e,this}setNodeMaterials(e){return this.nodeMaterials=e,this}parse(e,t){this._nodesJSON=e.nodes;const r=super.parse(e,t);return this._nodesJSON=null,r}parseNodes(e,t){if(void 0!==e){const r=new OC;return r.setNodes(this.nodes),r.setTextures(t),r.parseNodes(e)}return{}}parseMaterials(e,t){const r={};if(void 0!==e){const s=this.parseNodes(this._nodesJSON,t),i=new VC;i.setTextures(t),i.setNodes(s),i.setNodeMaterials(this.nodeMaterials);for(let t=0,s=e.length;t

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

^mjVm`7=OKct?G1&-fx@Ct7W#}g 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