UNPKG

@tomorrowevening/hermes

Version:

An extendable set of Web Tools controlled via a separate window for non-intereference with content.

2 lines (1 loc) 1.88 kB
"use strict";const g=require("three/webgpu"),i=require("three/tsl");class N extends g.NodeMaterial{uScale;uDivisions;uColor;uDistance;uSubgridOpacity;uGridOpacity;constructor(t){super(),this.name="InfiniteGrid",this.side=g.DoubleSide,this.transparent=!0,this.uScale=i.uniform(t?.scale??.1),this.uDivisions=i.uniform(t?.divisions??10),this.uColor=i.uniform(t?.color??new g.Color(16777215)),this.uDistance=i.uniform(t?.distance??1e4),this.uSubgridOpacity=i.uniform(t?.subgridOpacity??.15),this.uGridOpacity=i.uniform(t?.gridOpacity??.25);const{uScale:e,uDivisions:u,uColor:O,uDistance:b,uSubgridOpacity:p,uGridOpacity:r}=this,c=i.varyingProperty("vec3","vWorldPosition");this.positionNode=i.Fn(()=>{const o=i.positionLocal.xzy.mul(b).add(i.vec3(i.cameraPosition.x,i.float(0),i.cameraPosition.z));return c.assign(o),o})();const l=i.Fn(([o])=>{const a=c.xz.div(o),d=i.fwidth(a),n=i.abs(i.fract(a.sub(.5)).sub(.5)).div(d).div(2),s=i.min(n.x,n.y);return i.float(1).sub(i.min(s,i.float(1)))});this.outputNode=i.Fn(()=>{const o=c,a=i.max(i.float(200),i.abs(i.cameraPosition.y.sub(o.y))),d=i.float(i.distance(i.cameraPosition,o)),n=i.log(a).div(i.log(u)),s=i.pow(u,i.floor(n)),f=s.mul(u),P=f.mul(u),w=l(s.mul(e)),x=l(f.mul(e)),G=l(P.mul(e)),D=a.sub(s).div(f.sub(s)),v=i.float(.3),h=i.max(D.sub(i.float(1)).add(v),i.float(0)).div(v),m=w.mul(i.pow(i.float(1).sub(i.min(d.div(b),i.float(1))),i.float(3))),S=i.float(.5),C=m.sub(h).mul(p),F=i.mix(C,m.mul(r).sub(h.mul(r.sub(p)).mul(S)),x),y=i.float(i.mix(F,m.mul(r),G));return i.If(i.lessThanEqual(y,i.float(1/127)),()=>{i.Discard()}),i.vec4(O,y)})()}get color(){return this.uColor.value}set color(t){this.uColor.value=t}get gridOpacity(){return this.uGridOpacity.value}set gridOpacity(t){this.uGridOpacity.value=t}get subgridOpacity(){return this.uSubgridOpacity.value}set subgridOpacity(t){this.uSubgridOpacity.value=t}}module.exports=N;