rayzee 7.12.0 → 7.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -639,6 +639,12 @@
639
639
  }
640
640
  `,[To]),Ao=(0,n.Fn)(([e,t,r,i])=>{let a=t.toConst(),o=e.toVar();o.y.subAssign(i);let s=r.mul(r).toConst(),c=o.dot(a).toConst(),l=o.dot(o).sub(s).toConst(),u=c.mul(c).sub(l).toConst(),d=t.toVar();return(0,n.If)(u.greaterThanEqual(0),()=>{let t=(0,n.sqrt)(u).sub(c).toVar(),i=(0,n.float)(1e6).toVar(),l=a.y.toConst();(0,n.If)(l.lessThanEqual(0),()=>{let t=e.y.negate().div(l).toConst(),r=e.add(a.mul(t)).toConst();(0,n.If)(r.dot(r).lessThan(s),()=>{i.assign(t)})}),(0,n.If)(t.greaterThan(0),()=>{d.assign(o.add(a.mul((0,n.min)(t,i))).div(r))})}),d}),jo=(0,n.Fn)(([e,t,r,i,a,o])=>{let s=t.toVar();return(0,n.If)(r,()=>{let r=(0,n.vec3)(e.x,e.y.sub(o),e.z);s.assign(Ao(r,t,i,a))}),s}),Mo=(0,n.Fn)(([e,t])=>{let r=(0,n.vec3)(0).toVar();return(0,n.If)(e.roughness.greaterThan(.98).and(e.metalness.lessThan(.02)).and(e.transmission.equal(0)).and(e.clearcoat.equal(0)).and(e.iridescence.equal(0)),()=>{r.assign(e.color.rgb.mul((0,n.float)(1).sub(e.metalness)).mul(Kt))}).Else(()=>{let i=(0,n.clamp)((0,n.mix)(En(e.ior).mul(e.specularColor),e.color.rgb,e.metalness).mul(e.specularIntensity),(0,n.vec3)(0),(0,n.vec3)(1)).toVar(),a=e.color.rgb.toVar();(0,n.If)(e.dispersion.greaterThan(0).and(e.transmission.greaterThan(.5)),()=>{let t=(0,n.clamp)(e.dispersion.mul(.1),0,.8),r=(0,n.max)((0,n.max)(a.r,a.g),a.b),i=(0,n.min)((0,n.min)(a.r,a.g),a.b);(0,n.If)(r.greaterThan(i),()=>{let e=a.sub(i).div(r.sub(i));a.assign((0,n.mix)(a,e,t.mul(.3)))})}),(0,n.If)(e.iridescence.greaterThan(0),()=>{let r=e.iridescenceThicknessRange.y,a=Bn((0,n.float)(1),e.iridescenceIOR,t.VoH,r,i);i.assign((0,n.mix)(i,a,e.iridescence))});let o=Sn(t.VoH,i),s=(0,n.vec3)(0).toVar();(0,n.If)(e.anisotropy.greaterThan(0),()=>{let n=Nn(e.roughness,e.anisotropy),r=Pn(n.x,n.y,t.NoH,t.ToH,t.BoH),i=Fn(n.x,n.y,t.ToV,t.BoV,t.ToL,t.BoL,t.NoV,t.NoL);s.assign(o.mul(r.mul(i)))}).Else(()=>{let r=Dn(t.NoH,e.roughness),i=An(t.NoV,t.NoL,e.roughness);s.assign(r.mul(i).mul(o).div((0,n.max)((0,n.float)(4).mul(t.NoV).mul(t.NoL),Jt)))});let c=Rt.wrap(jn(i,t.NoV,e.roughness)),l=s.mul(c.compensation),u=(0,n.vec3)(1).sub(c.E_total).mul((0,n.float)(1).sub(e.metalness)).mul(a).mul(Kt).add(l).toVar();(0,n.If)(e.sheen.greaterThan(0),()=>{let i=On(t.NoH,e.sheenRoughness),a=e.sheenColor.mul(e.sheen).mul(i).mul(t.NoL),o=(0,n.float)(1).sub(e.sheenRoughness).mul(.5).add(.25),s=(0,n.clamp)(e.sheenColor.mul(e.sheen).mul(o),(0,n.vec3)(0),(0,n.vec3)(1)),c=(0,n.vec3)(1).sub(s);r.assign(u.mul(c).add(a))}).Else(()=>{r.assign(u)})}),r}),No=(0,n.Fn)(([e,t,n,r])=>Mo(r,Lt.wrap(ln(n,e,t,r)))),Po=(0,n.Fn)(([e,t])=>{let r=(0,n.clamp)((0,n.mix)(En(t.ior).mul(t.specularColor),t.color.rgb,t.metalness).mul(t.specularIntensity),(0,n.vec3)(0),(0,n.vec3)(1)).toVar(),i=Sn(e.VoH,r),a=(0,n.vec3)(0).toVar();(0,n.If)(t.anisotropy.greaterThan(0),()=>{let n=Nn(t.roughness,t.anisotropy),r=Pn(n.x,n.y,e.NoH,e.ToH,e.BoH),o=Fn(n.x,n.y,e.ToV,e.BoV,e.ToL,e.BoL,e.NoV,e.NoL);a.assign(i.mul(r.mul(o)))}).Else(()=>{let r=Dn(e.NoH,t.roughness),o=An(e.NoV,e.NoL,t.roughness);a.assign(r.mul(o).mul(i).div((0,n.max)((0,n.float)(4).mul(e.NoV).mul(e.NoL),Jt)))});let o=Rt.wrap(jn(r,e.NoV,t.roughness)),s=a.mul(o.compensation),c=(0,n.vec3)(1).sub(o.E_total).mul((0,n.float)(1).sub(t.metalness)).mul(t.color.rgb).div(Gt).add(s),l=(0,n.max)(t.clearcoatRoughness,Xt),u=Dn(e.NoH,l),d=An(e.NoV,e.NoL,l),f=xn(e.VoH,(0,n.float)(.04)),p=u.mul(d).mul(f).div((0,n.max)((0,n.float)(4).mul(e.NoV).mul(e.NoL),Jt)),m=(0,n.float)(1).sub(t.clearcoat.mul(f).mul((0,n.float)(2).sub(f)));return c.mul(m).add((0,n.vec3)(p).mul(t.clearcoat))}),Fo=2*Gt,Io=(0,n.Fn)(([e,t])=>{let r=(0,n.float)(1).toVar();return(0,n.If)(t.lessThan((0,n.float)(Gt).sub(.001)).and(e.greaterThan(0)),()=>{let i=t.mul(.5).toVar(),a=(0,n.tan)(i).toVar(),o=(0,n.sqrt)((0,n.max)((0,n.float)(1).sub(e.mul(e)),0)).div((0,n.max)(e,1e-4)),s=(0,n.select)(i.greaterThan(.05),(0,n.float)(1).div((0,n.max)(a.sub(i),1e-6)),(0,n.float)(3).div((0,n.max)(i.mul(i).mul(i),1e-9)));r.assign((0,n.max)(a.sub(o).mul(s),0))}),r}),Lo=(0,n.Fn)(([e])=>{let t=(0,n.select)(e.normalize.greaterThan(.5),(0,n.float)(1).div((0,n.max)(e.area,1e-10)),(0,n.float)(1));return e.color.mul(e.intensity).mul(Kt).mul(t)}),Ro=(0,n.Fn)(([e,t,r,i])=>{let a=(0,n.bool)(!1).toVar(),o=(0,n.vec3)(0,1,0).toVar(),s=(0,n.vec3)(0).toVar(),c=(0,n.float)(0).toVar(),l=(0,n.float)(0).toVar(),u=(0,n.int)(2).toVar();return(0,n.If)(e.area.greaterThan(0),()=>{let d=(0,n.vec3)(0).toVar(),f=(0,n.float)(-1).toVar();(0,n.If)(e.shape.greaterThan(.5),()=>{let t=(0,n.sqrt)(r.x).toVar(),i=(0,n.float)(Fo).mul(r.y).toVar();d.assign(e.position.add(e.u.mul(t.mul((0,n.cos)(i)))).add(e.v.mul(t.mul((0,n.sin)(i)))))}).Else(()=>{let i=_i(t,e.position.sub(e.u).sub(e.v),e.u.mul(2),e.v.mul(2),r).toVar();(0,n.If)(i.w.greaterThan(0),()=>{d.assign(i.xyz),f.assign(i.w)}).Else(()=>{d.assign(e.position.add(e.u.mul(r.x.mul(2).sub(1))).add(e.v.mul(r.y.mul(2).sub(1))))})});let p=d.sub(t).toVar(),m=(0,n.dot)(p,p).toVar();(0,n.If)(m.greaterThanEqual(1e-10),()=>{let t=(0,n.sqrt)(m).toVar(),r=p.div(t).toVar(),d=(0,n.dot)(r.negate(),e.normal).toVar();u.assign((0,n.int)(1)),c.assign(t),o.assign(r),s.assign(Lo(e).mul(Io(d,e.spread)));let h=m.div((0,n.max)(e.area.mul((0,n.max)(d,.001)),1e-10)),g=(0,n.select)(f.greaterThan(0),f,h);l.assign(g.mul(i)),a.assign(d.greaterThan(0))})}),Qr({valid:a,direction:o,emission:s,distance:c,pdf:l,lightType:u})}),zo=(0,n.Fn)(([e,t,r])=>{let i=(0,n.bool)(!1).toVar(),a=(0,n.vec3)(0,1,0).toVar(),o=(0,n.vec3)(0).toVar(),s=(0,n.float)(0).toVar(),c=(0,n.float)(0).toVar(),l=(0,n.int)(3).toVar(),u=e.position.sub(t).toVar(),d=(0,n.dot)(u,u).toVar();return(0,n.If)(d.greaterThanEqual(1e-20),()=>{let t=(0,n.sqrt)(d).toVar(),l=u.div(t).toVar(),f=(0,n.dot)(l.negate(),e.direction).toVar(),p=(0,n.cos)(e.angle).toVar();a.assign(l),s.assign(t),c.assign(r),i.assign(f.greaterThanEqual(p)),(0,n.If)(i,()=>{let r=oi({coneCosine:p,penumbraCosine:(0,n.cos)(e.angle.mul((0,n.float)(1).sub(e.penumbra))).max(p.add(1e-5)).toVar(),angleCosine:f}),i=ai({lightDistance:t,cutoffDistance:e.distance,decayExponent:e.decay}),a=li(e,l),s=pi(e,l);o.assign(e.color.mul(e.intensity).mul(i).mul(r).mul(a).mul(s))})}),Qr({valid:i,direction:a,emission:o,distance:s,pdf:c,lightType:l})}),Bo=(0,n.Fn)(([e,t,r])=>{let i=(0,n.bool)(!1).toVar(),a=(0,n.vec3)(0,1,0).toVar(),o=(0,n.vec3)(0).toVar(),s=(0,n.float)(0).toVar(),c=(0,n.float)(0).toVar(),l=(0,n.int)(2).toVar(),u=e.position.sub(t).toVar(),d=(0,n.dot)(u,u).toVar();return(0,n.If)(d.greaterThanEqual(1e-20),()=>{let t=(0,n.sqrt)(d).toVar(),f=u.div(t),p=ai({lightDistance:t,cutoffDistance:e.distance,decayExponent:e.decay});l.assign((0,n.int)(2)),a.assign(f),s.assign(t),o.assign(e.color.mul(e.intensity).mul(p)),c.assign(r),i.assign((0,n.bool)(!0))}),Qr({valid:i,direction:a,emission:o,distance:s,pdf:c,lightType:l})}),Vo=(0,n.Fn)(([e,t,r,i,a,o,s,c,l,u,d,f,p,m])=>{let h=(0,n.bool)(!1).toVar(),g=(0,n.vec3)(0,1,0).toVar(),_=(0,n.vec3)(0).toVar(),v=(0,n.float)(0).toVar(),y=(0,n.float)(0).toVar(),b=(0,n.int)(2).toVar(),x=c.add(u).add(f).add(m).toVar();return(0,n.If)(x.greaterThan((0,n.int)(0)),()=>{let S=(0,n.float)(0).toVar(),C=(0,n.int)(-1).toVar(),w=(0,n.int)(-1).toVar(),T=(0,n.float)(0).toVar();(0,n.If)(c.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:c,type:`int`,condition:`<`},({i:e})=>{(0,n.If)(e.lessThan((0,n.int)(16)),()=>{let i=Wr(Jr.wrap(ei(s,e)),t,r,a).toVar();S.addAssign(i),(0,n.If)(i.greaterThan(0).and(F(o).mul(S).lessThan(i)),()=>{C.assign(0),w.assign(e),T.assign(i)})})})}),(0,n.If)(u.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:u,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let a=Yr.wrap(ti(l,i)),s=(0,n.select)(a.intensity.greaterThan(0),Gr(a,e,t,r),(0,n.float)(0)).toVar();S.addAssign(s),(0,n.If)(s.greaterThan(0).and(F(o).mul(S).lessThan(s)),()=>{C.assign(1),w.assign(i),T.assign(s)})})})}),(0,n.If)(f.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:f,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let a=Kr(Xr.wrap(ni(d,i)),e,t,r).toVar();S.addAssign(a),(0,n.If)(a.greaterThan(0).and(F(o).mul(S).lessThan(a)),()=>{C.assign(2),w.assign(i),T.assign(a)})})})}),(0,n.If)(m.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:m,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let a=qr(Zr.wrap(ri(p,i)),e,t,r).toVar();S.addAssign(a),(0,n.If)(a.greaterThan(0).and(F(o).mul(S).lessThan(a)),()=>{C.assign(3),w.assign(i),T.assign(a)})})})}),(0,n.If)(S.lessThanEqual(0),()=>{let t=(0,n.int)(i.x.mul((0,n.float)(x))).toVar(),r=(0,n.float)(1).div((0,n.max)((0,n.float)(x),1)).toVar();y.assign(r);let a=(0,n.bool)(!1).toVar(),S=(0,n.int)(0).toVar();(0,n.If)(c.greaterThan((0,n.int)(0)),()=>{(0,n.If)(a.not().and(t.greaterThanEqual(S)).and(t.lessThan(S.add(c))),()=>{let r=Jr.wrap(ei(s,t.sub(S)));(0,n.If)(r.intensity.greaterThan(0),()=>{let t=ui(r,e);g.assign((0,n.normalize)(r.direction)),_.assign(r.color.mul(r.intensity).mul(t)),v.assign(1e6),b.assign((0,n.int)(0)),h.assign((0,n.bool)(!0)),a.assign((0,n.bool)(!0))})}),S.addAssign(c)}),(0,n.If)(u.greaterThan((0,n.int)(0)),()=>{(0,n.If)(a.not().and(t.greaterThanEqual(S)).and(t.lessThan(S.add(u))),()=>{let s=Yr.wrap(ti(l,t.sub(S)));(0,n.If)(s.intensity.greaterThan(0),()=>{let t=(0,n.vec2)(i.y,F(o)).toVar(),c=Qr.wrap(Ro(s,e,t,r));h.assign(c.valid),g.assign(c.direction),_.assign(c.emission),v.assign(c.distance),y.assign(c.pdf),b.assign(c.lightType),a.assign((0,n.bool)(!0))})}),S.addAssign(u)}),(0,n.If)(f.greaterThan((0,n.int)(0)),()=>{(0,n.If)(a.not().and(t.greaterThanEqual(S)).and(t.lessThan(S.add(f))),()=>{let i=Xr.wrap(ni(d,t.sub(S)));(0,n.If)(i.intensity.greaterThan(0),()=>{let t=Qr.wrap(Bo(i,e,r));h.assign(t.valid),g.assign(t.direction),_.assign(t.emission),v.assign(t.distance),y.assign(t.pdf),b.assign(t.lightType),a.assign((0,n.bool)(!0))})}),S.addAssign(f)}),(0,n.If)(m.greaterThan((0,n.int)(0)),()=>{(0,n.If)(a.not().and(t.greaterThanEqual(S)).and(t.lessThan(S.add(m))),()=>{let i=Zr.wrap(ri(p,t.sub(S)));(0,n.If)(i.intensity.greaterThan(0),()=>{let t=Qr.wrap(zo(i,e,r));h.assign(t.valid),g.assign(t.direction),_.assign(t.emission),v.assign(t.distance),y.assign(t.pdf),b.assign(t.lightType),a.assign((0,n.bool)(!0))})})})}).Else(()=>{let t=T.div((0,n.max)(S,1e-10)).toVar();(0,n.If)(C.equal((0,n.int)(0)).and(w.greaterThanEqual((0,n.int)(0))),()=>{let r=Jr.wrap(ei(s,w)),a=(0,n.normalize)(r.direction).toVar(),c=(0,n.float)(1).toVar();(0,n.If)(r.angle.greaterThan(0),()=>{let e=(0,n.cos)(r.angle.mul(.5)).toVar(),t=(0,n.mix)(e,(0,n.float)(1),i.y).toVar(),s=(0,n.sqrt)((0,n.max)((0,n.float)(0),(0,n.float)(1).sub(t.mul(t)))).toVar(),l=(0,n.float)(Fo).mul(F(o)).toVar(),u=(0,n.normalize)(r.direction).toVar(),d=(0,n.normalize)((0,n.cross)((0,n.select)((0,n.abs)(u.x).greaterThan(.9),(0,n.vec3)(0,1,0),(0,n.vec3)(1,0,0)),u)).toVar(),f=(0,n.cross)(u,d).toVar();a.assign((0,n.normalize)(u.mul(t).add(d.mul((0,n.cos)(l)).add(f.mul((0,n.sin)(l))).mul(s))));let p=(0,n.float)(Fo).mul((0,n.max)((0,n.float)(1).sub(e),1e-10));c.assign((0,n.float)(1).div(p))});let l=ui(r,e);g.assign(a),_.assign(r.color.mul(r.intensity).mul(l)),v.assign(1e6),y.assign(c.mul(t)),b.assign((0,n.int)(0)),h.assign((0,n.bool)(!0))}),(0,n.If)(C.equal((0,n.int)(1)).and(w.greaterThanEqual((0,n.int)(0))),()=>{let r=Yr.wrap(ti(l,w)),a=(0,n.vec2)(i.y,F(o)).toVar(),s=Qr.wrap(Ro(r,e,a,t));h.assign(s.valid),g.assign(s.direction),_.assign(s.emission),v.assign(s.distance),y.assign(s.pdf),b.assign(s.lightType)}),(0,n.If)(C.equal((0,n.int)(2)).and(w.greaterThanEqual((0,n.int)(0))),()=>{let n=Xr.wrap(ni(d,w)),r=Qr.wrap(Bo(n,e,t));h.assign(r.valid),g.assign(r.direction),_.assign(r.emission),v.assign(r.distance),y.assign(r.pdf),b.assign(r.lightType)}),(0,n.If)(C.equal((0,n.int)(3)).and(w.greaterThanEqual((0,n.int)(0))),()=>{let n=Zr.wrap(ri(p,w)),r=Qr.wrap(zo(n,e,t));h.assign(r.valid),g.assign(r.direction),_.assign(r.emission),v.assign(r.distance),y.assign(r.pdf),b.assign(r.lightType)})})}),Qr({valid:h,direction:g,emission:_,distance:v,pdf:y,lightType:b})}),Ho=(0,n.Fn)(([e,t])=>{let r=t.NoV,i=t.NoL.toVar(),a=t.NoH,o=(0,n.float)(1).sub(e.metalness).mul((0,n.float)(1).sub(e.transmission)).toVar(),s=(0,n.float)(1).sub(o.mul((0,n.float)(1).sub(e.metalness))).toVar(),c=o.add(s).toVar(),l=(0,n.float)(0).toVar();return(0,n.If)(c.greaterThan(0),()=>{let u=(0,n.float)(1).div((0,n.max)(c,1e-10)).toVar();o.mulAssign(u),s.mulAssign(u),(0,n.If)(o.greaterThan(0).and(i.greaterThan(0)),()=>{l.addAssign(o.mul(i).mul(Kt))}),(0,n.If)(s.greaterThan(0).and(i.greaterThan(0)),()=>{let i=(0,n.max)(e.roughness,.02),o=(0,n.float)(0).toVar();(0,n.If)(e.anisotropy.greaterThan(0),()=>{let n=Nn(e.roughness,e.anisotropy);o.assign(Ln(n.x,n.y,t.NoH,t.ToH,t.BoH,t.NoV,t.ToV,t.BoV))}).Else(()=>{o.assign(Mn(a,r,i))}),l.addAssign(s.mul(o))})}),(0,n.max)(l,1e-8)}),Uo=(0,n.Fn)(([e,t,n,r])=>Ho(r,Lt.wrap(ln(n,e,t,r)))),Wo=(0,n.Fn)(([e,t,r,i,a,o,s,c,l,u,d,f])=>{let p=(0,n.float)(0).toVar();return(0,n.If)(o.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:o,type:`int`,condition:`<`},({i:e})=>{(0,n.If)(e.lessThan((0,n.int)(16)),()=>{let n=Jr.wrap(ei(a,e));p.addAssign(Wr(n,t,r,i))})})}),(0,n.If)(c.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:c,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let a=Yr.wrap(ti(s,i));p.addAssign((0,n.select)(a.intensity.greaterThan(0),Gr(a,e,t,r),(0,n.float)(0)))})})}),(0,n.If)(u.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:u,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let n=Xr.wrap(ni(l,i));p.addAssign(Kr(n,e,t,r))})})}),(0,n.If)(f.greaterThan((0,n.int)(0)),()=>{(0,n.Loop)({start:(0,n.int)(0),end:f,type:`int`,condition:`<`},({i})=>{(0,n.If)(i.lessThan((0,n.int)(16)),()=>{let n=Zr.wrap(ri(d,i));p.addAssign(qr(n,e,t,r))})})}),p}),Go=(0,n.Fn)(([e,t,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k])=>{let A=(0,n.vec3)(0).toVar(),j=(0,n.vec3)(0).toVar(),M=e.add(t.mul(.001)).toVar(),N=(0,n.Fn)(([e,t,n])=>Hr(e,t,n,xo,v,y,b));return(0,n.If)(r.emissiveIntensity.lessThanEqual(10),()=>{let v=(0,n.vec3)(1).toVar(),y=Wt.wrap(mn(r.roughness,r.metalness,c,v)),b=y.useBRDFSampling.toVar(),P=y.useLightSampling.toVar(),ee=y.brdfWeight.toVar(),te=y.lightWeight.toVar(),ne=d.add(p).add(h).add(_).toVar(),re=(0,n.float)(.001).mul((0,n.float)(1).add((0,n.float)(c).mul(.5))).toVar(),ie=ne.greaterThan((0,n.int)(0)).toVar(),ae=(0,n.float)(0).toVar();(0,n.If)(P.and(ie),()=>{ae.addAssign(te)}),(0,n.If)(b,()=>{ae.addAssign(ee)}),(0,n.If)(ae.lessThanEqual(0),()=>{ae.assign(1),b.assign((0,n.bool)(!0)),ee.assign(1)});let oe=F(l).toVar(),se=F(l).toVar(),ce=oe,le=(0,n.bool)(!1).toVar(),ue=(0,n.bool)(!1).toVar(),de=(0,n.select)(ie,te,(0,n.float)(0)),fe=(0,n.float)(1).div((0,n.max)(ae,1e-10)),pe=de.mul(fe);(0,n.If)(ce.lessThan(pe).and(P).and(ie),()=>{le.assign((0,n.bool)(!0))}).ElseIf(b,()=>{ue.assign((0,n.bool)(!0))}).ElseIf(ie,()=>{le.assign((0,n.bool)(!0))}),(0,n.If)(le,()=>{let e=(0,n.vec2)(se,F(l)).toVar(),a=Qr.wrap(Vo(M,t,r,e,c,l,u,d,f,p,m,h,g,_));(0,n.If)(a.valid.and(a.pdf.greaterThan(0)),()=>{let e=(0,n.max)((0,n.float)(0),(0,n.dot)(t,a.direction)).toVar(),o=a.emission.x.add(a.emission.y).add(a.emission.z);(0,n.If)(e.greaterThan(0).and(o.mul(e).greaterThan(re)).and(ii({direction:a.direction,surfaceNormal:t})),()=>{let o=(0,n.min)(a.distance.sub(.001),(0,n.float)(1e3)),s=N(M,a.direction,o);(0,n.If)(s.greaterThan(0).or(k),()=>{let o=Lt.wrap(ln(t,i,a.direction,r)),c=Mo(r,o),l=Ho(r,o).toVar(),u=(0,n.float)(1).toVar();(0,n.If)(l.greaterThan(0).and(b),()=>{let e=a.pdf.mul(te),t=l.mul(ee);(0,n.If)(a.lightType.equal((0,n.int)(1)),()=>{u.assign(an({pdf1:e,pdf2:t}))})});let d=a.emission.mul(c).mul(e).mul(u).div((0,n.max)(a.pdf,1e-10)).mul(ae).div((0,n.max)(te,1e-10));A.addAssign(d.mul(s)),(0,n.If)(k,()=>{j.addAssign(d)})})})})}),(0,n.If)(ue,()=>{(0,n.If)(o.greaterThan(0).and(b),()=>{let i=(0,n.max)((0,n.float)(0),(0,n.dot)(t,a)).toVar();(0,n.If)(i.greaterThan(0).and(ii({direction:a,surfaceNormal:t})),()=>{(0,n.If)(p.greaterThan((0,n.int)(0)),()=>{let l=(0,n.bool)(!1).toVar(),v=(0,n.float)(0).toVar(),y=(0,n.int)(-1).toVar();(0,n.Loop)({start:(0,n.int)(0),end:p,type:`int`,condition:`<`},({i})=>{let o=Yr.wrap(ti(f,i));(0,n.If)(o.intensity.greaterThan(0),()=>{let s=Gr(o,e,t,r).toVar();(0,n.If)(s.greaterThanEqual(re),()=>{(0,n.If)(hi(o,M,a).toVar().greaterThan(0),()=>{(0,n.If)(s.greaterThan(v),()=>{v.assign(s),y.assign(i)}),l.assign((0,n.bool)(!0))})})})}),(0,n.If)(l.and(y.greaterThanEqual((0,n.int)(0))),()=>{let e=Yr.wrap(ti(f,y)),l=hi(e,M,a).toVar();(0,n.If)(l.greaterThan(0),()=>{let v=N(M,a,(0,n.min)(l.sub(.001),(0,n.float)(1e3)));(0,n.If)(v.greaterThan(0).or(k),()=>{let y=(0,n.max)((0,n.float)(0),(0,n.dot)(a,e.normal).negate()).toVar();(0,n.If)(y.greaterThan(0),()=>{let a=l.mul(l),b=gi(M,e.position.sub(e.u).sub(e.v),e.u.mul(2),e.v.mul(2)).toVar(),x=a.div((0,n.max)(e.area.mul(y),Jt)),S=(0,n.select)(e.shape.lessThan(.5).and(b.greaterThan(1e-5)),(0,n.float)(1).div((0,n.max)(b,1e-10)),x).toVar(),C=Gr(e,M,t,r),w=Wo(M,t,r,c,u,d,f,p,m,h,g,_).toVar(),T=(0,n.select)(w.greaterThan(0),C.div((0,n.max)(w,1e-10)),(0,n.float)(1).div((0,n.max)((0,n.float)(ne),1))),E=S.mul(T).toVar(),D=an({pdf1:o.mul(ee),pdf2:E.mul(te)}).toVar(),O=Lo(e).mul(Io(y,e.spread)).mul(s).mul(i).mul(D).div((0,n.max)(o,1e-10)).mul(ae).div((0,n.max)(ee,1e-10));A.addAssign(O.mul(v)),(0,n.If)(k,()=>{j.addAssign(O)})})})})})})})})}),(0,n.If)(O,()=>{let e=(0,n.vec2)(F(l).toVar(),F(l).toVar()).toVar(),a=(0,n.vec3)(0).toVar(),o=Oo(x,w,C,S,T,E,D,e,a).toVar(),s=o.xyz.toVar(),c=o.w.toVar();(0,n.If)(c.greaterThan(0),()=>{let e=(0,n.max)((0,n.float)(0),(0,n.dot)(t,s)).toVar();(0,n.If)(e.greaterThan(0).and(ii({direction:s,surfaceNormal:t})),()=>{let o=N(M,s,(0,n.float)(1e3));(0,n.If)(o.greaterThan(0).or(k),()=>{let l=Lt.wrap(ln(t,i,s,r)),u=Mo(r,l),d=Ho(r,l).toVar(),f=(0,n.select)(d.greaterThan(0),on({pdf1:c,pdf2:d}),(0,n.float)(1)).toVar(),p=a.mul(u).mul(e).mul(f).div((0,n.max)(c,1e-10));A.addAssign(p.mul(o)),(0,n.If)(k,()=>{j.addAssign(p)})})})})})}),jt({shadowed:A,unoccluded:j})}),Ko=(0,n.Fn)(([e,t,r,i,a,o])=>{let s=(0,n.select)(o,i,(0,n.float)(1).div(i)).toVar(),c=e.add(t.mul(s)).toVar(),l=(0,n.dot)(c,c).toVar(),u=(0,n.select)(l.greaterThan(Jt),c.div((0,n.sqrt)(l)),r).toVar();(0,n.If)((0,n.dot)(u,r).lessThan(0),()=>{u.assign(u.negate())});let d=(0,n.abs)((0,n.dot)(e,u)),f=(0,n.abs)((0,n.dot)(t,u)).toVar(),p=(0,n.abs)((0,n.dot)(r,u)).toVar(),m=Dn(p,a),h=d.add(f.mul(s)).toVar(),g=h.mul(h),_=f.mul(s).mul(s).div((0,n.max)(g,Jt));return m.mul(p).mul(_)}),qo=(0,n.Fn)(([e,t,r,i])=>{let a=e.add(t).toVar(),o=(0,n.dot)(a,a).toVar();return Mn((0,n.max)((0,n.dot)(r,(0,n.select)(o.greaterThan(Jt),a.div((0,n.sqrt)(o)),r)),0),(0,n.max)((0,n.dot)(r,e),0),i)}),Jo=(0,n.Fn)(([e])=>{let t=e.specularImportance.toVar(),r=t.greaterThan(.001).toVar(),i=e.diffuseImportance.toVar(),a=i.greaterThan(.001).toVar(),o=e.transmissionImportance.toVar(),s=o.greaterThan(.001).toVar(),c=e.clearcoatImportance.toVar(),l=c.greaterThan(.001).toVar(),u=t.add(i).add(o).add(c).toVar();return(0,n.If)(u.lessThan(.001),()=>{t.assign(0),i.assign(1),o.assign(0),c.assign(0),u.assign(1),r.assign((0,n.bool)(!1)),a.assign((0,n.bool)(!0)),s.assign((0,n.bool)(!1)),l.assign((0,n.bool)(!1))}).Else(()=>{let e=(0,n.float)(1).div(u).toVar();t.mulAssign(e),i.mulAssign(e),o.mulAssign(e),c.mulAssign(e),u.assign(1)}),Ut({envWeight:(0,n.float)(0),specularWeight:t,diffuseWeight:i,transmissionWeight:o,clearcoatWeight:c,totalWeight:u,useEnv:(0,n.bool)(!1),useSpecular:r,useDiffuse:a,useTransmission:s,useClearcoat:l})}),Yo=(0,n.Fn)(([e,t])=>{let r=(0,n.int)(2).toVar(),i=(0,n.float)(0).toVar(),a=(0,n.bool)(!1).toVar();return(0,n.If)(e.useSpecular.and(a.not()),()=>{i.addAssign(e.specularWeight),(0,n.If)(t.lessThan(i),()=>{r.assign(1),a.assign((0,n.bool)(!0))})}),(0,n.If)(e.useDiffuse.and(a.not()),()=>{i.addAssign(e.diffuseWeight),(0,n.If)(t.lessThan(i),()=>{r.assign(2),a.assign((0,n.bool)(!0))})}),(0,n.If)(e.useTransmission.and(a.not()),()=>{i.addAssign(e.transmissionWeight),(0,n.If)(t.lessThan(i),()=>{r.assign(3),a.assign((0,n.bool)(!0))})}),(0,n.If)(e.useClearcoat.and(a.not()),()=>{r.assign(4)}),r}),Xo=(0,n.Fn)(([e])=>(0,n.max)(e,0).mul(Kt)),Zo=(0,n.Fn)(([e,t,r,i,a,o,s,c])=>{let l=(0,n.vec3)(0).toVar(),u=(0,n.vec3)(0).toVar(),d=(0,n.float)(0).toVar(),f=(0,n.float)(0).toVar(),p=(0,n.float)(0).toVar();return(0,n.If)(c.diffuseImportance.greaterThanEqual(0).and(c.specularImportance.greaterThanEqual(0)).and(c.transmissionImportance.greaterThanEqual(0)).and(c.clearcoatImportance.greaterThanEqual(0)).not(),()=>{let e=(0,n.vec2)(F(s).toVar(),F(s).toVar());l.assign(Gn(t,e)),u.assign(r.color.xyz),d.assign(1),f.assign(1)}).Else(()=>{let m=Ut.wrap(Jo(c).toVar()),h=F(s).toVar(),g=(0,n.vec2)(F(s).toVar(),F(s).toVar()).toVar(),_=Yo(m,h).toVar(),v=(0,n.vec3)(0).toVar(),y=(0,n.float)(0).toVar(),b=(0,n.vec3)(0).toVar(),x=(0,n.vec3)(1).toVar();(0,n.If)(_.equal((0,n.int)(1)),()=>{v.assign(i),y.assign(a),b.assign(o)}).ElseIf(_.equal((0,n.int)(2)),()=>{v.assign(Gn(t,g)),y.assign(Xo((0,n.max)((0,n.dot)(t,v),0))),b.assign(No(e,v,t,r))}).ElseIf(_.equal((0,n.int)(3)),()=>{let i=(0,n.dot)(e,t).greaterThan(0),a=ir.wrap(ur(e,t,r.ior,r.roughness,i,r.dispersion,g,s,(0,n.float)(0)).toVar());v.assign(a.direction),y.assign(a.pdf),x.assign(a.colorWeight)}).Else(()=>{v.assign(i),y.assign(a),b.assign(o)});let S=(0,n.max)((0,n.dot)(t,v),0).toVar(),C=(0,n.float)(0).toVar();(0,n.If)(m.useSpecular,()=>{let n=Rn(r,t,e,v);C.addAssign(m.specularWeight.mul(n))}),(0,n.If)(m.useDiffuse,()=>{C.addAssign(m.diffuseWeight.mul(Xo(S)))}),(0,n.If)(m.useTransmission.and(r.transmission.greaterThan(0)),()=>{let i=(0,n.dot)(e,t).greaterThan(0);C.addAssign(m.transmissionWeight.mul(Ko(e,v,t,r.ior,r.roughness,i)))}),(0,n.If)(m.useClearcoat.and(r.clearcoat.greaterThan(0)),()=>{C.addAssign(m.clearcoatWeight.mul(qo(e,v,t,r.clearcoatRoughness)))}),y.assign((0,n.max)(y,Zt)),C.assign((0,n.max)(C,Zt));let w=y.div(C).toVar(),T=b.mul(S).mul(w).div(y),E=r.color.xyz.mul(x).mul(w);l.assign(v),u.assign((0,n.select)(_.equal((0,n.int)(3)),E,T)),d.assign(w),f.assign(y),p.assign(C)}),$r({direction:l,throughput:u,misWeight:d,pdf:f,combinedPdf:p})}),Qo=(0,n.Fn)(([e,t,r,i,a,o,s,c,l,u])=>{let d=(0,n.vec3)(0).toVar(),f=(0,n.vec3)(0).toVar(),p=(0,n.float)(0).toVar(),m=c.toVar();(0,n.If)(s.not(),()=>{(0,n.If)(l,()=>{m.assign(Vn(r,o,u))}).Else(()=>{let e=Ht({F0:En(r.ior),NoV:(0,n.float)(1),diffuseColor:(0,n.vec3)(0),isPurelyDiffuse:!1,alpha:(0,n.float)(0),k:(0,n.float)(0),alpha2:(0,n.float)(0),invRoughness:(0,n.float)(1).sub(r.roughness),metalFactor:(0,n.float)(.5).add((0,n.float)(.5).mul(r.metalness)),iorFactor:(0,n.min)((0,n.float)(2).div(r.ior),1),maxSheenColor:(0,n.max)(r.sheenColor.x,(0,n.max)(r.sheenColor.y,r.sheenColor.z))}).toVar();m.assign(Vn(r,o,e))})});let h=i.x.toVar(),g=(0,n.vec2)(i.y,F(a)).toVar(),_=(0,n.vec3)(0).toVar(),v=m.diffuse.toVar(),y=v.add(m.specular).toVar(),b=y.add(m.sheen).toVar(),x=b.add(m.clearcoat),S=(0,n.clamp)((0,n.dot)(t,e),.001,1).toVar();return(0,n.If)(h.lessThan(v),()=>{d.assign(Wn({N:t,xi:g}));let i=(0,n.clamp)((0,n.dot)(t,d),0,1);p.assign(i.mul(Kt)),f.assign(No(e,d,t,r))}).ElseIf(h.lessThan(y),()=>{(0,n.If)(r.anisotropy.greaterThan(0),()=>{let a=It.wrap(cn(t,r.anisotropyRotation)),o=a.Ta,s=a.Ba,c=(0,n.vec3)((0,n.dot)(e,o),(0,n.dot)(e,s),(0,n.dot)(e,t)),l=Nn(r.roughness,r.anisotropy),u=qn({V:c,alphaX:l.x,alphaY:l.y,Xi:i});_.assign(o.mul(u.x).add(s.mul(u.y)).add(t.mul(u.z)));let m=(0,n.clamp)((0,n.dot)(t,_),.001,1);d.assign((0,n.reflect)(e.negate(),_)),p.assign(Ln(l.x,l.y,m,(0,n.dot)(o,_),(0,n.dot)(s,_),S,(0,n.dot)(o,e),(0,n.dot)(s,e))),f.assign(No(e,d,t,r))}).Else(()=>{let a=sn({N:t}),o=Kn({V:a.transpose().mul(e),roughness:r.roughness,Xi:i});_.assign(a.mul(o));let s=(0,n.clamp)((0,n.dot)(t,_),.001,1);d.assign((0,n.reflect)(e.negate(),_)),p.assign(Mn(s,S,r.roughness)),f.assign(No(e,d,t,r))})}).ElseIf(h.lessThan(b),()=>{_.assign(Un({N:t,roughness:r.sheenRoughness,Xi:i}));let a=(0,n.clamp)((0,n.dot)(t,_),.001,1),o=(0,n.clamp)((0,n.dot)(e,_),.001,1);d.assign((0,n.reflect)(e.negate(),_));let s=(0,n.dot)(t,d).toVar();(0,n.If)(s.lessThanEqual(0),()=>{d.assign(Wn({N:t,xi:i})),s.assign((0,n.clamp)((0,n.dot)(t,d),0,1)),p.assign(s.mul(Kt)),f.assign(No(e,d,t,r))}).Else(()=>{p.assign(On(a,r.sheenRoughness).mul(a).div((0,n.float)(4).mul(o))),p.assign((0,n.max)(p,Zt)),f.assign(No(e,d,t,r))})}).ElseIf(h.lessThan(x),()=>{let a=(0,n.clamp)(r.clearcoatRoughness,Xt,1);_.assign(Un({N:t,roughness:a,Xi:i}));let o=(0,n.clamp)((0,n.dot)(t,_),0,1);d.assign((0,n.reflect)(e.negate(),_)),p.assign(Mn(o,S,a)),p.assign((0,n.max)(p,Zt)),f.assign(No(e,d,t,r))}).Else(()=>{let o=(0,n.dot)(e,t).greaterThan(0),s=ir.wrap(ur(e,t,r.ior,r.roughness,o,r.dispersion,i,a,(0,n.float)(0)));d.assign(s.direction),p.assign((0,n.max)(s.pdf,Zt)),f.assign(No(e,d,t,r))}),p.assign((0,n.max)(p,Zt)),Nt({direction:d,value:f,pdf:p})}),$o=(0,n.wgslFn)(`
641
641
  fn regularizePathContribution( contribution: vec3f, pathLength: f32, fireflyThreshold: f32, frame: i32 ) -> vec3f {
642
+ // Indirect-only clamp: pathLength 0 is a direct/primary contribution (bounce-0 hit, direct NEE,
643
+ // or a directly-viewed backdrop/sun) — that is signal, not a firefly, and clamping it darkens
644
+ // legitimately bright pixels. Fireflies arise on indirect bounces, so only suppress pathLength>=1.
645
+ if ( pathLength < 0.5 ) {
646
+ return contribution;
647
+ }
642
648
  let threshold = calculateFireflyThreshold( fireflyThreshold, i32( pathLength ), frame );
643
649
  return applySoftSuppressionRGB( contribution, threshold, 0.5f );
644
650
  }