const BLOOD_SHELL_TSL={thickFlipY:!1,thickMaterial(){const n=window.TSL,u=new THREE.MeshBasicNodeMaterial({side:THREE.DoubleSide,blending:THREE.CustomBlending,blendEquation:THREE.AddEquation,blendSrc:THREE.OneFactor,blendDst:THREE.OneFactor,depthTest:!1,depthWrite:!1,transparent:!0,fog:!1,toneMapped:!1});return u.colorNode=n.vec4(n.select(n.frontFacing,n.positionView.z,n.positionView.z.negate()),0,0,1),u},makeRT(n,u){return new THREE.RenderTarget(n,u,{type:THREE.FloatType,format:THREE.RGBAFormat,depthBuffer:!1,stencilBuffer:!1,minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter})},shellMaterial(n,u,v,i,R){const s=window.TSL,{float:c,vec2:t,vec3:C,vec4:M,uniform:e,texture:F,Fn:g,If:D,select:j,mix:w,fract:H,abs:T,exp:p,pow:h,max:o,min:W,clamp:L,dot:r,normalize:m}=s,f=SHELL_COLORS[v?"art":"ven"],a=!!u.flowTex.fill,E=u.meta.fields,l={tThick:F(new THREE.Texture),uResolution:e(new THREE.Vector2(1,1)),uFlowA:s.texture3D(a?u.flowTex.fill:u.flowTex.flow),uFlowB:s.texture3D(a?u.flowTex.eject:u.flowTex.flow),uDist:s.texture3D(u.dist),uInside:s.texture3D(u.inside),uOrigin:e(new THREE.Vector3(...u.origin)),uSize:e(new THREE.Vector3(...u.size)),uUmaxA:e(a?E.fill.umax:E.flow.umax),uUmaxB:e(a?E.eject.umax:0),uQa:e(0),uQb:e(0),uHasB:e(a?1:0),uVolScale:e(1),uTime:e(0),uJetA:e(new THREE.Vector4),uJetAN:e(new THREE.Vector4),uJetB:e(new THREE.Vector4),uJetBN:e(new THREE.Vector4),uJetLen:e(BLOOD.jetLenCm),uH:e(u.h),uColThin:e(new THREE.Color(f.thin)),uColDeep:e(new THREE.Color(f.deep)),uWallTint:e(new THREE.Color(i).lerp(new THREE.Color(16777215),.45)),uWallRim:e(a?.25:.32),uClear:e(BLOOD.clear),uAbsorb:e(BLOOD.absorbCm),uAlphaDist:e(BLOOD.alphaCm),uNoiseScale:e(2.2),uCmPerUnit:e(R),uWinOn:e(0),uRecess:e(0),uSwirl:e(new THREE.Vector4(0,1,0,0)),uSwirlC:e(new THREE.Vector3),uSwirlMax:e(BLOOD.swirlMaxCm)},x=bloodFieldFnsTSL(l),b=bloodNoiseFnsTSL(),V=!!n.geometry.attributes.winF?s.attribute("winF","float"):c(1e3),d=new THREE.MeshBasicNodeMaterial({transparent:!0,depthWrite:!1,side:THREE.FrontSide,fog:!1});d.positionNode=s.positionLocal.sub(m(s.normalLocal).mul(l.uRecess.mul(l.uWinOn)));const O=g(()=>{D(l.uWinOn.greaterThan(.5).and(V.lessThan(1.5).not()),()=>{s.Discard()});const k=BLOOD_SHELL_TSL.thickFlipY?t(s.screenUV.x,s.screenUV.y.oneMinus()):s.screenUV,B=o(0,l.tThick.sample(k).r).mul(l.uCmPerUnit),y=s.positionGeometry,N=x.velAt(y).add(x.swirlAt(y)),A=1.2,U=H(l.uTime.div(A)),I=H(l.uTime.div(A).add(.5)),Q=c(1).sub(T(U.mul(2).sub(1))),J=y.mul(l.uNoiseScale),Z=l.uNoiseScale.mul(A*.5),_=l.uNoiseScale.mul(A*.9),$=w(b.fbm(J.sub(N.mul(I).mul(Z))),b.fbm(J.sub(N.mul(U).mul(Z))),Q),G=J.mul(2.4).add(5),ee=w(b.fbm(G.sub(N.mul(I).mul(_))),b.fbm(G.sub(N.mul(U).mul(_))),Q),te=$.mul(.65).add(ee.mul(.35)),le=c(1).sub(p(B.div(l.uAbsorb).negate())),P=w(l.uColThin,l.uColDeep,le).mul(te.mul(.7).add(.7)).toVar(),Y=m(s.normalView),K=m(s.positionView.negate()),ne=o(0,r(Y,K)),X=h(c(1).sub(ne),3),se=m(C(.35,.6,.72)),oe=m(se.add(K)),ue=h(o(0,r(Y,oe)),48);P.addAssign(C(1,.9,.85).mul(ue).mul(.45).add(l.uWallTint.mul(X).mul(l.uWallRim)));const z=c(1).sub(l.uClear),S=z.mul(c(1).sub(p(B.div(l.uAlphaDist).negate()))).toVar();return S.assign(o(S,X.mul(.35).mul(z))),D(l.uWinOn.greaterThan(.5),()=>{S.assign(o(S,z.mul(.6)))}),M(P,L(S,0,.95))})();return d.colorNode=O.rgb,d.opacityNode=O.a,d.uniforms=l,d},capMaterial(n,u,v){const i=window.TSL,{float:R,vec3:s,vec4:c,uniform:t,Fn:C,If:M,mix:e,fract:F,abs:g,exp:D,pow:j,all:w}=i,H=SHELL_COLORS[u?"art":"ven"],T=!!n.flowTex.fill,p=n.meta.fields,h=v.userData.capOffset||0,o={uFlowA:i.texture3D(T?n.flowTex.fill:n.flowTex.flow),uFlowB:i.texture3D(T?n.flowTex.eject:n.flowTex.flow),uDist:i.texture3D(n.dist),uInside:i.texture3D(n.inside),uOrigin:t(new THREE.Vector3(...n.origin)),uSize:t(new THREE.Vector3(...n.size)),uUmaxA:t(T?p.fill.umax:p.flow.umax),uUmaxB:t(T?p.eject.umax:0),uQa:t(0),uQb:t(0),uHasB:t(T?1:0),uVolScale:t(1),uTime:t(0),uJetA:t(new THREE.Vector4),uJetAN:t(new THREE.Vector4),uJetB:t(new THREE.Vector4),uJetBN:t(new THREE.Vector4),uJetLen:t(BLOOD.jetLenCm),uH:t(n.h),uColThin:t(new THREE.Color(H.thin)),uColDeep:t(new THREE.Color(H.deep)),uClear:t(BLOOD.clear),uCapThick:t(2),uAbsorb:t(BLOOD.absorbCm),uNoiseScale:t(2.2),uCapZ:t(0),uSwirl:t(new THREE.Vector4(0,1,0,0)),uSwirlC:t(new THREE.Vector3),uSwirlMax:t(BLOOD.swirlMaxCm)},W=bloodFieldFnsTSL(o),L=bloodNoiseFnsTSL(),r=new THREE.MeshBasicNodeMaterial({transparent:!1,blending:THREE.CustomBlending,blendSrc:THREE.SrcAlphaFactor,blendDst:THREE.OneMinusSrcAlphaFactor,blendEquation:THREE.AddEquation,depthWrite:!0,side:THREE.DoubleSide,fog:!1,stencilWrite:!0,stencilRef:0,stencilFunc:THREE.NotEqualStencilFunc,stencilFail:THREE.ReplaceStencilOp,stencilZFail:THREE.ReplaceStencilOp,stencilZPass:THREE.ReplaceStencilOp,polygonOffset:!0,polygonOffsetFactor:h,polygonOffsetUnits:h}),m=C(()=>{const f=s(i.positionGeometry.xy,o.uCapZ),a=f.sub(o.uOrigin).div(o.uSize),E=s(0).toVar();M(w(a.greaterThan(s(0))).and(w(a.lessThan(s(1)))),()=>{E.assign(W.velAt(f))}),E.addAssign(W.swirlAt(f));const l=1.2,x=F(o.uTime.div(l)),b=F(o.uTime.div(l).add(.5)),q=R(1).sub(g(x.mul(2).sub(1))),V=f.mul(o.uNoiseScale),d=o.uNoiseScale.mul(l*.35),O=e(L.fbm(V.sub(E.mul(b).mul(d))),L.fbm(V.sub(E.mul(x).mul(d))),q),k=R(1).sub(D(o.uCapThick.div(o.uAbsorb).negate())),B=e(o.uColThin,o.uColDeep,k).mul(O.mul(.5).add(.8)).add(s(.25,.08,.06).mul(j(O,4)));return c(B,R(.92).sub(o.uClear.mul(.45)))})();return r.colorNode=m.rgb,r.opacityNode=m.a,r.uniforms=o,r.userData.bloodCap=!0,r}};Object.assign(window,{BLOOD_SHELL_TSL});
