[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"guide-nav":3,"doc-\u002Fdocs\u002Fprimitives\u002Fmath":145},[4,10,16,20,24,28,32,36,40,44,48,52,56,60,64,69,73,78,82,86,90,94,98,102,106,110,114,117,120,124,127,131,134,138,141],{"path":5,"title":6,"description":7,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide","Getting started","Shaders is a library of GPU effect components for Vue, React, Svelte, Solid, JavaScript and Framer, with a design editor for building with them.","code",null,{"path":11,"title":12,"description":13,"category":8,"exclude":14,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fquickstart","Quickstart","Install Shaders, render your first effect, and drive a prop from state.",[15],"js",{"path":17,"title":18,"description":19,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcomposing-effects","Composing effects","Stack components as layers and nest them to control which layers an effect touches.",{"path":21,"title":22,"description":23,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fblending-masking","Blending and masking","Control how a layer mixes with the layers below it, and reveal one layer through another.",{"path":25,"title":26,"description":27,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fprops-reactivity","Props and reactivity","Bind props to your framework's state so effects update when it changes, and animate props with an animation library.",{"path":29,"title":30,"description":31,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fdynamic-props","Dynamic props","Drive any numeric or position prop from time, the cursor, or another layer, without writing animation code.",{"path":33,"title":34,"description":35,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Flayout-positioning","Layout and positioning","Size and place a shader in your page with CSS, as a background, a fill, or an inline block.",{"path":37,"title":38,"description":39,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Ftransforms","Transforms","Position, size, and rotate any layer inside the canvas with a bounding box, in % or px units.",{"path":41,"title":42,"description":43,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fshape-effects","Shape effects","Pick the 2D, 3D or custom SVG shape that Glass, Neon, Emboss and other shape effects draw inside.",{"path":45,"title":46,"description":47,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcolor-space","Color space","Match colors to your design tool with the output color space, and keep bright layers from clipping with tone mapping.",{"path":49,"title":50,"description":51,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fhooks-events","Hooks and events","Run code when an effect is ready to show, and show a fallback when the GPU can't run it.",{"path":53,"title":54,"description":55,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fperformance","Performance","Learn what makes an effect expensive on the GPU and how to keep it inside the frame budget.",{"path":57,"title":58,"description":59,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcustom-shaders","Custom components","Write your own component in TypeScript, use it like any component in the library, and write WGSL by hand when you need to.",{"path":61,"title":62,"description":63,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Ftelemetry","Telemetry","The `\u003CShader>` component occasionally sends an anonymous performance report to help us improve the engine over time.",{"path":65,"title":66,"description":67,"category":68,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fmcp","Shaders MCP","Connect your AI coding agent to Shaders so it can find, install and edit effects in your codebase.","workflows",{"path":70,"title":71,"description":72,"category":68,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcli","Shaders CLI","Install shaders and presets into your codebase as component files, and keep them in sync with the design editor.",{"path":74,"title":75,"description":76,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fquick-tour-of-the-design-editor","Quick tour of the design editor","A short walkthrough of the full Shaders workflow, from designing on the infinite canvas to exporting code.","editor",{"path":79,"title":80,"description":81,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fintro-to-the-interface","Intro to the interface","A tour of the design editor interface: the canvas, layers, the Properties panel, and the ways to share and export.",{"path":83,"title":84,"description":85,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcomposing-your-first-shader-effect","Composing your first shader effect","Building a first shader effect in the design editor by stacking and nesting components as layers.",{"path":87,"title":88,"description":89,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fmasking-and-blending","Masking and blending","How blend modes and masks combine components in the design editor.",{"path":91,"title":92,"description":93,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fdynamic-prop-mapping","Dynamic prop mapping","Turning static props into dynamic ones in the design editor: mapping one layer's output into another's prop, following the cursor, or animating automatically.",{"path":95,"title":96,"description":97,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fcustom-media-and-transformations","Custom media and transformations","Uploading images, videos, and SVG files to the media gallery, adding them to a composition, and placing them with transformations.",{"path":99,"title":100,"description":101,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Finstalling-a-shader-via-mcp","Installing a shader via MCP","Installing a shader from the design editor into a hero section with the Shaders MCP.",{"path":103,"title":104,"description":105,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fexploring-shape-effects","Exploring shape effects","Applying shape effects such as liquid glass, liquid metal, and glowing edges to built-in shapes and your own SVG.",{"path":107,"title":108,"description":109,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fglass-component-spotlight","Component spotlight: Glass","A short look at the Glass component and the liquid-glass look it creates.",{"path":111,"title":112,"description":113,"category":77,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fdigital-looks-component-spotlight","Component spotlight: Digital looks","A look at the digital stylization components for glitchy, futuristic, or technical effects.",{"path":115,"title":12,"description":116,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fjs\u002Fquickstart","Install Shaders without a framework, render your first effect on a canvas, and update props at runtime.",{"path":118,"title":12,"description":119,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Freact\u002Fquickstart","Install Shaders in a React app, render your first effect, and drive a prop from state.",{"path":121,"title":122,"description":123,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Freact\u002Fssr","Next.js and SSR","Render Shaders in Next.js and other React SSR apps by keeping each shader on the client.",{"path":125,"title":12,"description":126,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fsolid\u002Fquickstart","Install Shaders in a Solid app, render your first effect, and drive a prop from a signal.",{"path":128,"title":129,"description":130,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fsolid\u002Fssr","SolidStart and SSR","Render Shaders in SolidStart and other Solid SSR apps by keeping each shader on the client.",{"path":132,"title":12,"description":133,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fsvelte\u002Fquickstart","Install Shaders in a Svelte app, render your first effect, and drive a prop from state.",{"path":135,"title":136,"description":137,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fsvelte\u002Fssr","SvelteKit and SSR","Render Shaders in SvelteKit and other Svelte SSR apps, where each shader already waits for the browser.",{"path":139,"title":12,"description":140,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fvue\u002Fquickstart","Install Shaders in a Vue app, render your first effect, and drive a prop from a ref.",{"path":142,"title":143,"description":144,"category":8,"exclude":9,"forceFramework":9},"\u002Fdocs\u002Fguide\u002Fvue\u002Fssr","Nuxt and SSR","Render Shaders in Nuxt and other Vue SSR apps by keeping each shader on the client.",{"id":146,"title":147,"body":148,"categoryId":154,"categorySlug":154,"categoryTitle":9,"curated":566,"description":1539,"editUrl":1540,"extension":1541,"group":1542,"groupTitle":1543,"kind":9,"meta":1544,"navigation":566,"path":1545,"seo":1546,"sourceUrl":1547,"stem":1548,"wordCount":1549,"__hash__":1550},"primitives\u002Fdocs\u002Fprimitives\u002F22.math\u002Findex.md","Math",{"type":149,"value":150,"toc":1534},"minimark",[151,155,198,227,232,541,545,1076,1080,1530],[152,153,147],"h1",{"id":154},"math",[156,157,158,159,162,163,166,167,170,171,174,175,178,179,186,187,190,191,197],"p",{},"The arithmetic you write your own paint with. Every word takes expressions or plain numbers\nand returns an expression the GPU works out once per pixel: ",[8,160,161],{},"mul(color, coverage)"," fades a\ncolor, ",[8,164,165],{},"smoothstep(a, b, dist)"," turns a distance into a soft mask, ",[8,168,169],{},"mix(a, b, t)"," blends two\ncolors. Props reach you as ",[8,172,173],{},"params.uniforms.\u003Cname>"," (or ",[8,176,177],{},"uniformOf(p('name'), params)","), a\nframe gives you the coordinate, and the words compose by nesting until you return a ",[180,181,183],"a",{"href":182},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec4",[8,184,185],{},"vec4","\ncolor from ",[8,188,189],{},"paint:",". Wrap anything you read twice in ",[180,192,194],{"href":193},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flocal",[8,195,196],{},"local"," so it is computed once.",[199,200,205],"pre",{"className":201,"code":202,"language":203,"meta":204,"style":204},"language-ts shiki shiki-themes github-dark","import {math} from 'shaders\u002Fstd'\n","ts","",[8,206,207],{"__ignoreMap":204},[208,209,212,216,220,223],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"snl16","import",[208,217,219],{"class":218},"s95oV"," {math} ",[208,221,222],{"class":214},"from",[208,224,226],{"class":225},"sU2Wk"," 'shaders\u002Fstd'\n",[228,229,231],"h2",{"id":230},"reach-for-it-when","Reach for it when",[233,234,235,248],"table",{},[236,237,238],"thead",{},[239,240,241,245],"tr",{},[242,243,244],"th",{},"When you need",[242,246,247],{},"Use",[249,250,251,284,305,326,351,362,381,402,427,440,459,472,509,522],"tbody",{},[239,252,253,257],{},[254,255,256],"td",{},"combining numbers, colors or coordinates",[254,258,259,265,266,265,272,265,278],{},[180,260,262],{"href":261},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fadd",[8,263,264],{},"add",", ",[180,267,269],{"href":268},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsub",[8,270,271],{},"sub",[180,273,275],{"href":274},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmul",[8,276,277],{},"mul",[180,279,281],{"href":280},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdiv",[8,282,283],{},"div",[239,285,286,289],{},[254,287,288],{},"blending two colors or values by an amount",[254,290,291,297,298,304],{},[180,292,294],{"href":293},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmix",[8,295,296],{},"mix"," with ",[180,299,301],{"href":300},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsplat3",[8,302,303],{},"splat3"," for colors",[239,306,307,310],{},[254,308,309],{},"a soft edge from a distance",[254,311,312,318,319,325],{},[180,313,315],{"href":314},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsmoothstep",[8,316,317],{},"smoothstep","; ",[180,320,322],{"href":321},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fstep",[8,323,324],{},"step"," for a hard one",[239,327,328,331],{},[254,329,330],{},"keeping a value in range",[254,332,333,265,339,265,345],{},[180,334,336],{"href":335},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fclamp",[8,337,338],{},"clamp",[180,340,342],{"href":341},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmin",[8,343,344],{},"min",[180,346,348],{"href":347},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmax",[8,349,350],{},"max",[239,352,353,356],{},[254,354,355],{},"a value you read more than once",[254,357,358],{},[180,359,360],{"href":193},[8,361,196],{},[239,363,364,367],{},[254,365,366],{},"the distance from a center or between points",[254,368,369,265,375],{},[180,370,372],{"href":371},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flength",[8,373,374],{},"length",[180,376,378],{"href":377},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdistance",[8,379,380],{},"distance",[239,382,383,386],{},[254,384,385],{},"a pattern that repeats across the canvas",[254,387,388,394,395,401],{},[180,389,391],{"href":390},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffract",[8,392,393],{},"fract"," and ",[180,396,398],{"href":397},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffloor",[8,399,400],{},"floor"," on a scaled coordinate",[239,403,404,407],{},[254,405,406],{},"a wave or a rotation over time",[254,408,409,265,415,265,421],{},[180,410,412],{"href":411},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsin",[8,413,414],{},"sin",[180,416,418],{"href":417},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fcos",[8,419,420],{},"cos",[180,422,424],{"href":423},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Frotate2",[8,425,426],{},"rotate2",[239,428,429,432],{},[254,430,431],{},"an angle around a center",[254,433,434],{},[180,435,437],{"href":436},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fatan2",[8,438,439],{},"atan2",[239,441,442,445],{},[254,443,444],{},"a smooth falloff or a bell shape",[254,446,447,265,453],{},[180,448,450],{"href":449},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fexp",[8,451,452],{},"exp",[180,454,456],{"href":455},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fgaussbell",[8,457,458],{},"gaussBell",[239,460,461,464],{},[254,462,463],{},"a hinge that bends instead of creasing",[254,465,466],{},[180,467,469],{"href":468},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsoftplus",[8,470,471],{},"softPlus",[239,473,474,477],{},[254,475,476],{},"picking one of two values per pixel",[254,478,479,297,485,265,491,265,497,265,503],{},[180,480,482],{"href":481},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fselect",[8,483,484],{},"select",[180,486,488],{"href":487},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flt",[8,489,490],{},"lt",[180,492,494],{"href":493},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fgt",[8,495,496],{},"gt",[180,498,500],{"href":499},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fle",[8,501,502],{},"le",[180,504,506],{"href":505},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fge",[8,507,508],{},"ge",[239,510,511,514],{},[254,512,513],{},"several motions that must not move in step",[254,515,516],{},[180,517,519],{"href":518},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fhashphase",[8,520,521],{},"hashPhase",[239,523,524,527],{},[254,525,526],{},"the final color",[254,528,529,533,534,540],{},[180,530,531],{"href":182},[8,532,185],{}," from a ",[180,535,537],{"href":536},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec3",[8,538,539],{},"vec3"," and an alpha",[228,542,544],{"id":543},"example","Example",[199,546,548],{"className":201,"code":547,"language":203,"meta":204,"style":204},"import {defineShader, p, uniformOf, animatedTime, math, frames, transformColor, transformPosition} from 'shaders\u002Fstd'\n\nconst {add, sub, mul, sin, smoothstep, mix, splat3, local, vec4} = math\n\n\u002F\u002F Rings: concentric waves spreading from a draggable center, blended between two colors.\nexport const Rings = defineShader({\n  name: 'Rings',\n  animatedTime: {speed: 'speed'},\n  props: {\n    center: {default: {x: 0.5, y: 0.5}, transform: transformPosition},\n    colorA: {default: '#0b1026', transform: transformColor},\n    colorB: {default: '#7dd3fc', transform: transformColor},\n    frequency: {default: 24},\n    softness: {default: 0.25},\n    speed: {default: 1},\n  },\n  paint: (params) => {\n    const u = (name: string) => uniformOf(p(name), params)\n    const {dist} = frames.centredFrame({center: p('center')})(params, frames.surfaceOf(params))\n    \u002F\u002F A −1..1 wave along the distance, moved into 0..1 and computed once.\n    const wave = local(add(mul(sin(sub(mul(dist, u('frequency')), animatedTime(params))), 0.5), 0.5), 'wave')\n    \u002F\u002F softness 0 is a hard ring, 0.5 a smooth gradient between rings.\n    const band = smoothstep(sub(0.5, u('softness')), add(0.5, u('softness')), wave)\n    const rgb = mix(u('colorA').member('rgb'), u('colorB').member('rgb'), splat3(band))\n    return vec4(rgb, 1)\n  },\n})\n",[8,549,550,561,568,621,626,633,655,667,679,685,702,714,725,736,747,758,764,786,824,863,869,937,943,992,1049,1065,1070],{"__ignoreMap":204},[208,551,552,554,557,559],{"class":210,"line":211},[208,553,215],{"class":214},[208,555,556],{"class":218}," {defineShader, p, uniformOf, animatedTime, math, frames, transformColor, transformPosition} ",[208,558,222],{"class":214},[208,560,226],{"class":225},[208,562,564],{"class":210,"line":563},2,[208,565,567],{"emptyLinePlaceholder":566},true,"\n",[208,569,571,574,577,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,615,618],{"class":210,"line":570},3,[208,572,573],{"class":214},"const",[208,575,576],{"class":218}," {",[208,578,264],{"class":579},"sDLfK",[208,581,265],{"class":218},[208,583,271],{"class":579},[208,585,265],{"class":218},[208,587,277],{"class":579},[208,589,265],{"class":218},[208,591,414],{"class":579},[208,593,265],{"class":218},[208,595,317],{"class":579},[208,597,265],{"class":218},[208,599,296],{"class":579},[208,601,265],{"class":218},[208,603,303],{"class":579},[208,605,265],{"class":218},[208,607,196],{"class":579},[208,609,265],{"class":218},[208,611,185],{"class":579},[208,613,614],{"class":218},"} ",[208,616,617],{"class":214},"=",[208,619,620],{"class":218}," math\n",[208,622,624],{"class":210,"line":623},4,[208,625,567],{"emptyLinePlaceholder":566},[208,627,629],{"class":210,"line":628},5,[208,630,632],{"class":631},"sAwPA","\u002F\u002F Rings: concentric waves spreading from a draggable center, blended between two colors.\n",[208,634,636,639,642,645,648,652],{"class":210,"line":635},6,[208,637,638],{"class":214},"export",[208,640,641],{"class":214}," const",[208,643,644],{"class":579}," Rings",[208,646,647],{"class":214}," =",[208,649,651],{"class":650},"svObZ"," defineShader",[208,653,654],{"class":218},"({\n",[208,656,658,661,664],{"class":210,"line":657},7,[208,659,660],{"class":218},"  name: ",[208,662,663],{"class":225},"'Rings'",[208,665,666],{"class":218},",\n",[208,668,670,673,676],{"class":210,"line":669},8,[208,671,672],{"class":218},"  animatedTime: {speed: ",[208,674,675],{"class":225},"'speed'",[208,677,678],{"class":218},"},\n",[208,680,682],{"class":210,"line":681},9,[208,683,684],{"class":218},"  props: {\n",[208,686,688,691,694,697,699],{"class":210,"line":687},10,[208,689,690],{"class":218},"    center: {default: {x: ",[208,692,693],{"class":579},"0.5",[208,695,696],{"class":218},", y: ",[208,698,693],{"class":579},[208,700,701],{"class":218},"}, transform: transformPosition},\n",[208,703,705,708,711],{"class":210,"line":704},11,[208,706,707],{"class":218},"    colorA: {default: ",[208,709,710],{"class":225},"'#0b1026'",[208,712,713],{"class":218},", transform: transformColor},\n",[208,715,717,720,723],{"class":210,"line":716},12,[208,718,719],{"class":218},"    colorB: {default: ",[208,721,722],{"class":225},"'#7dd3fc'",[208,724,713],{"class":218},[208,726,728,731,734],{"class":210,"line":727},13,[208,729,730],{"class":218},"    frequency: {default: ",[208,732,733],{"class":579},"24",[208,735,678],{"class":218},[208,737,739,742,745],{"class":210,"line":738},14,[208,740,741],{"class":218},"    softness: {default: ",[208,743,744],{"class":579},"0.25",[208,746,678],{"class":218},[208,748,750,753,756],{"class":210,"line":749},15,[208,751,752],{"class":218},"    speed: {default: ",[208,754,755],{"class":579},"1",[208,757,678],{"class":218},[208,759,761],{"class":210,"line":760},16,[208,762,763],{"class":218},"  },\n",[208,765,767,770,773,777,780,783],{"class":210,"line":766},17,[208,768,769],{"class":650},"  paint",[208,771,772],{"class":218},": (",[208,774,776],{"class":775},"s9osk","params",[208,778,779],{"class":218},") ",[208,781,782],{"class":214},"=>",[208,784,785],{"class":218}," {\n",[208,787,789,792,795,797,800,803,806,809,811,813,816,819,821],{"class":210,"line":788},18,[208,790,791],{"class":214},"    const",[208,793,794],{"class":650}," u",[208,796,647],{"class":214},[208,798,799],{"class":218}," (",[208,801,802],{"class":775},"name",[208,804,805],{"class":214},":",[208,807,808],{"class":579}," string",[208,810,779],{"class":218},[208,812,782],{"class":214},[208,814,815],{"class":650}," uniformOf",[208,817,818],{"class":218},"(",[208,820,156],{"class":650},[208,822,823],{"class":218},"(name), params)\n",[208,825,827,829,831,834,836,838,841,844,847,849,851,854,857,860],{"class":210,"line":826},19,[208,828,791],{"class":214},[208,830,576],{"class":218},[208,832,833],{"class":579},"dist",[208,835,614],{"class":218},[208,837,617],{"class":214},[208,839,840],{"class":218}," frames.",[208,842,843],{"class":650},"centredFrame",[208,845,846],{"class":218},"({center: ",[208,848,156],{"class":650},[208,850,818],{"class":218},[208,852,853],{"class":225},"'center'",[208,855,856],{"class":218},")})(params, frames.",[208,858,859],{"class":650},"surfaceOf",[208,861,862],{"class":218},"(params))\n",[208,864,866],{"class":210,"line":865},20,[208,867,868],{"class":631},"    \u002F\u002F A −1..1 wave along the distance, moved into 0..1 and computed once.\n",[208,870,872,874,877,879,882,884,886,888,890,892,894,896,898,900,902,905,908,910,913,916,919,922,924,927,929,931,934],{"class":210,"line":871},21,[208,873,791],{"class":214},[208,875,876],{"class":579}," wave",[208,878,647],{"class":214},[208,880,881],{"class":650}," local",[208,883,818],{"class":218},[208,885,264],{"class":650},[208,887,818],{"class":218},[208,889,277],{"class":650},[208,891,818],{"class":218},[208,893,414],{"class":650},[208,895,818],{"class":218},[208,897,271],{"class":650},[208,899,818],{"class":218},[208,901,277],{"class":650},[208,903,904],{"class":218},"(dist, ",[208,906,907],{"class":650},"u",[208,909,818],{"class":218},[208,911,912],{"class":225},"'frequency'",[208,914,915],{"class":218},")), ",[208,917,918],{"class":650},"animatedTime",[208,920,921],{"class":218},"(params))), ",[208,923,693],{"class":579},[208,925,926],{"class":218},"), ",[208,928,693],{"class":579},[208,930,926],{"class":218},[208,932,933],{"class":225},"'wave'",[208,935,936],{"class":218},")\n",[208,938,940],{"class":210,"line":939},22,[208,941,942],{"class":631},"    \u002F\u002F softness 0 is a hard ring, 0.5 a smooth gradient between rings.\n",[208,944,946,948,951,953,956,958,960,962,964,966,968,970,973,975,977,979,981,983,985,987,989],{"class":210,"line":945},23,[208,947,791],{"class":214},[208,949,950],{"class":579}," band",[208,952,647],{"class":214},[208,954,955],{"class":650}," smoothstep",[208,957,818],{"class":218},[208,959,271],{"class":650},[208,961,818],{"class":218},[208,963,693],{"class":579},[208,965,265],{"class":218},[208,967,907],{"class":650},[208,969,818],{"class":218},[208,971,972],{"class":225},"'softness'",[208,974,915],{"class":218},[208,976,264],{"class":650},[208,978,818],{"class":218},[208,980,693],{"class":579},[208,982,265],{"class":218},[208,984,907],{"class":650},[208,986,818],{"class":218},[208,988,972],{"class":225},[208,990,991],{"class":218},")), wave)\n",[208,993,995,997,1000,1002,1005,1007,1009,1011,1014,1017,1020,1022,1025,1027,1029,1031,1034,1036,1038,1040,1042,1044,1046],{"class":210,"line":994},24,[208,996,791],{"class":214},[208,998,999],{"class":579}," rgb",[208,1001,647],{"class":214},[208,1003,1004],{"class":650}," mix",[208,1006,818],{"class":218},[208,1008,907],{"class":650},[208,1010,818],{"class":218},[208,1012,1013],{"class":225},"'colorA'",[208,1015,1016],{"class":218},").",[208,1018,1019],{"class":650},"member",[208,1021,818],{"class":218},[208,1023,1024],{"class":225},"'rgb'",[208,1026,926],{"class":218},[208,1028,907],{"class":650},[208,1030,818],{"class":218},[208,1032,1033],{"class":225},"'colorB'",[208,1035,1016],{"class":218},[208,1037,1019],{"class":650},[208,1039,818],{"class":218},[208,1041,1024],{"class":225},[208,1043,926],{"class":218},[208,1045,303],{"class":650},[208,1047,1048],{"class":218},"(band))\n",[208,1050,1052,1055,1058,1061,1063],{"class":210,"line":1051},25,[208,1053,1054],{"class":214},"    return",[208,1056,1057],{"class":650}," vec4",[208,1059,1060],{"class":218},"(rgb, ",[208,1062,755],{"class":579},[208,1064,936],{"class":218},[208,1066,1068],{"class":210,"line":1067},26,[208,1069,763],{"class":218},[208,1071,1073],{"class":210,"line":1072},27,[208,1074,1075],{"class":218},"})\n",[228,1077,1079],{"id":1078},"words","Words",[1081,1082,1084],"primitive-words",{":words":1083},"[{\"name\":\"add\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fadd\",\"summary\":\"The sum of two values.\"},{\"name\":\"sub\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsub\",\"summary\":\"The first value minus the second.\"},{\"name\":\"mul\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmul\",\"summary\":\"The product of two values.\"},{\"name\":\"div\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdiv\",\"summary\":\"The first value divided by the second.\"},{\"name\":\"mix\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmix\",\"summary\":\"A blend from `a` to `b` by `t`, where 0 gives `a` and 1 gives `b`.\"},{\"name\":\"smoothstep\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsmoothstep\",\"summary\":\"A soft edge: 0 below `e0`, 1 above `e1`, an S-curve between.\"},{\"name\":\"clamp\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fclamp\",\"summary\":\"The value limited to the range `lo`..`hi`.\"},{\"name\":\"local\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flocal\",\"summary\":\"A value computed once per pixel and shared by everything that reads it.\"},{\"name\":\"vec4\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec4\",\"summary\":\"A 4D vector, usually the final color with alpha.\"},{\"name\":\"vec3\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec3\",\"summary\":\"A 3D vector from three values, often a color without alpha.\"},{\"name\":\"vec2\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec2\",\"summary\":\"A 2D vector from two values.\"},{\"name\":\"splat3\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsplat3\",\"summary\":\"One number copied into all three channels of a vec3.\"},{\"name\":\"length\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flength\",\"summary\":\"The length of a vector.\"},{\"name\":\"distance\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdistance\",\"summary\":\"The distance between two points.\"},{\"name\":\"abs\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fabs\",\"summary\":\"The value without its sign.\"},{\"name\":\"fract\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffract\",\"summary\":\"The fractional part of a value, 0..1.\"},{\"name\":\"floor\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffloor\",\"summary\":\"The value rounded down to a whole number.\"},{\"name\":\"min\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmin\",\"summary\":\"The smaller of two values.\"},{\"name\":\"max\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fmax\",\"summary\":\"The larger of two values.\"},{\"name\":\"sin\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsin\",\"summary\":\"The sine of an angle in radians, −1..1.\"},{\"name\":\"cos\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fcos\",\"summary\":\"The cosine of an angle in radians, −1..1.\"},{\"name\":\"step\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fstep\",\"summary\":\"A hard edge: 0 when `x` is below `edge`, 1 from `edge` on.\"},{\"name\":\"pow\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fpow\",\"summary\":\"The first value raised to the power of the second.\"},{\"name\":\"exp\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fexp\",\"summary\":\"e raised to the value.\"},{\"name\":\"sqrt\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsqrt\",\"summary\":\"The square root of a value.\"},{\"name\":\"neg\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fneg\",\"summary\":\"The value with its sign flipped.\"},{\"name\":\"select\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fselect\",\"summary\":\"`ifTrue` when the condition holds, otherwise `ifFalse`.\"},{\"name\":\"lt\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flt\",\"summary\":\"True when `a` is less than `b`.\"},{\"name\":\"gt\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fgt\",\"summary\":\"True when `a` is greater than `b`.\"},{\"name\":\"le\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fle\",\"summary\":\"True when `a` is less than or equal to `b`.\"},{\"name\":\"ge\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fge\",\"summary\":\"True when `a` is greater than or equal to `b`.\"},{\"name\":\"atan2\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fatan2\",\"summary\":\"The angle of the point (x, y) in radians, −π..π.\"},{\"name\":\"dot\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdot\",\"summary\":\"The dot product of two vectors.\"},{\"name\":\"normalize\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fnormalize\",\"summary\":\"The vector scaled to length 1.\"},{\"name\":\"rotate2\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Frotate2\",\"summary\":\"A 2D point rotated around the origin.\"},{\"name\":\"gaussBell\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fgaussbell\",\"summary\":\"A bell curve: 1 at zero, falling toward 0 on both sides.\"},{\"name\":\"softPlus\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsoftplus\",\"summary\":\"A soft hinge: about 0 for values well below zero, about `x` above, rounded near zero.\"},{\"name\":\"hashPhase\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fhashphase\",\"summary\":\"A random but stable angle in radians, 0..2π, from a seed.\"},{\"name\":\"sign\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsign\",\"summary\":\"−1, 0 or 1 by the sign of the value.\"},{\"name\":\"ceil\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fceil\",\"summary\":\"The value rounded up to a whole number.\"},{\"name\":\"log\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flog\",\"summary\":\"The natural logarithm of a value.\"},{\"name\":\"exp2\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fexp2\",\"summary\":\"2 raised to the value.\"},{\"name\":\"tan\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ftan\",\"summary\":\"The tangent of an angle in radians.\"},{\"name\":\"cross\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fcross\",\"summary\":\"The cross product of two 3D vectors.\"},{\"name\":\"reflect\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Freflect\",\"summary\":\"The direction `i` bounced off a surface with unit normal `n`.\"},{\"name\":\"refract\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Frefract\",\"summary\":\"The direction `i` bent through a surface with unit normal `n`.\"},{\"name\":\"float\",\"path\":\"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffloat\",\"summary\":\"A plain number as an expression.\"}]",[1085,1086,1087,1095,1102,1109,1116,1140,1155,1169,1176,1183,1190,1199,1206,1213,1220,1229,1236,1243,1250,1257,1264,1271,1289,1298,1305,1314,1323,1337,1349,1360,1371,1382,1389,1398,1407,1414,1421,1431,1438,1447,1456,1465,1474,1483,1492,1508,1521],"ul",{},[1088,1089,1090,1094],"li",{},[180,1091,1092],{"href":261},[8,1093,264],{}," — The sum of two values.",[1088,1096,1097,1101],{},[180,1098,1099],{"href":268},[8,1100,271],{}," — The first value minus the second.",[1088,1103,1104,1108],{},[180,1105,1106],{"href":274},[8,1107,277],{}," — The product of two values.",[1088,1110,1111,1115],{},[180,1112,1113],{"href":280},[8,1114,283],{}," — The first value divided by the second.",[1088,1117,1118,1122,1123,1125,1126,1129,1130,1133,1134,1136,1137,1139],{},[180,1119,1120],{"href":293},[8,1121,296],{}," — A blend from ",[8,1124,180],{}," to ",[8,1127,1128],{},"b"," by ",[8,1131,1132],{},"t",", where 0 gives ",[8,1135,180],{}," and 1 gives ",[8,1138,1128],{},".",[1088,1141,1142,1146,1147,1150,1151,1154],{},[180,1143,1144],{"href":314},[8,1145,317],{}," — A soft edge: 0 below ",[8,1148,1149],{},"e0",", 1 above ",[8,1152,1153],{},"e1",", an S-curve between.",[1088,1156,1157,1161,1162,1165,1166,1139],{},[180,1158,1159],{"href":335},[8,1160,338],{}," — The value limited to the range ",[8,1163,1164],{},"lo","..",[8,1167,1168],{},"hi",[1088,1170,1171,1175],{},[180,1172,1173],{"href":193},[8,1174,196],{}," — A value computed once per pixel and shared by everything that reads it.",[1088,1177,1178,1182],{},[180,1179,1180],{"href":182},[8,1181,185],{}," — A 4D vector, usually the final color with alpha.",[1088,1184,1185,1189],{},[180,1186,1187],{"href":536},[8,1188,539],{}," — A 3D vector from three values, often a color without alpha.",[1088,1191,1192,1198],{},[180,1193,1195],{"href":1194},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fvec2",[8,1196,1197],{},"vec2"," — A 2D vector from two values.",[1088,1200,1201,1205],{},[180,1202,1203],{"href":300},[8,1204,303],{}," — One number copied into all three channels of a vec3.",[1088,1207,1208,1212],{},[180,1209,1210],{"href":371},[8,1211,374],{}," — The length of a vector.",[1088,1214,1215,1219],{},[180,1216,1217],{"href":377},[8,1218,380],{}," — The distance between two points.",[1088,1221,1222,1228],{},[180,1223,1225],{"href":1224},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fabs",[8,1226,1227],{},"abs"," — The value without its sign.",[1088,1230,1231,1235],{},[180,1232,1233],{"href":390},[8,1234,393],{}," — The fractional part of a value, 0..1.",[1088,1237,1238,1242],{},[180,1239,1240],{"href":397},[8,1241,400],{}," — The value rounded down to a whole number.",[1088,1244,1245,1249],{},[180,1246,1247],{"href":341},[8,1248,344],{}," — The smaller of two values.",[1088,1251,1252,1256],{},[180,1253,1254],{"href":347},[8,1255,350],{}," — The larger of two values.",[1088,1258,1259,1263],{},[180,1260,1261],{"href":411},[8,1262,414],{}," — The sine of an angle in radians, −1..1.",[1088,1265,1266,1270],{},[180,1267,1268],{"href":417},[8,1269,420],{}," — The cosine of an angle in radians, −1..1.",[1088,1272,1273,1277,1278,1281,1282,1285,1286,1288],{},[180,1274,1275],{"href":321},[8,1276,324],{}," — A hard edge: 0 when ",[8,1279,1280],{},"x"," is below ",[8,1283,1284],{},"edge",", 1 from ",[8,1287,1284],{}," on.",[1088,1290,1291,1297],{},[180,1292,1294],{"href":1293},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fpow",[8,1295,1296],{},"pow"," — The first value raised to the power of the second.",[1088,1299,1300,1304],{},[180,1301,1302],{"href":449},[8,1303,452],{}," — e raised to the value.",[1088,1306,1307,1313],{},[180,1308,1310],{"href":1309},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsqrt",[8,1311,1312],{},"sqrt"," — The square root of a value.",[1088,1315,1316,1322],{},[180,1317,1319],{"href":1318},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fneg",[8,1320,1321],{},"neg"," — The value with its sign flipped.",[1088,1324,1325,1329,1330,1333,1334,1139],{},[180,1326,1327],{"href":481},[8,1328,484],{}," — ",[8,1331,1332],{},"ifTrue"," when the condition holds, otherwise ",[8,1335,1336],{},"ifFalse",[1088,1338,1339,1343,1344,1346,1347,1139],{},[180,1340,1341],{"href":487},[8,1342,490],{}," — True when ",[8,1345,180],{}," is less than ",[8,1348,1128],{},[1088,1350,1351,1343,1355,1357,1358,1139],{},[180,1352,1353],{"href":493},[8,1354,496],{},[8,1356,180],{}," is greater than ",[8,1359,1128],{},[1088,1361,1362,1343,1366,1368,1369,1139],{},[180,1363,1364],{"href":499},[8,1365,502],{},[8,1367,180],{}," is less than or equal to ",[8,1370,1128],{},[1088,1372,1373,1343,1377,1379,1380,1139],{},[180,1374,1375],{"href":505},[8,1376,508],{},[8,1378,180],{}," is greater than or equal to ",[8,1381,1128],{},[1088,1383,1384,1388],{},[180,1385,1386],{"href":436},[8,1387,439],{}," — The angle of the point (x, y) in radians, −π..π.",[1088,1390,1391,1397],{},[180,1392,1394],{"href":1393},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fdot",[8,1395,1396],{},"dot"," — The dot product of two vectors.",[1088,1399,1400,1406],{},[180,1401,1403],{"href":1402},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fnormalize",[8,1404,1405],{},"normalize"," — The vector scaled to length 1.",[1088,1408,1409,1413],{},[180,1410,1411],{"href":423},[8,1412,426],{}," — A 2D point rotated around the origin.",[1088,1415,1416,1420],{},[180,1417,1418],{"href":455},[8,1419,458],{}," — A bell curve: 1 at zero, falling toward 0 on both sides.",[1088,1422,1423,1427,1428,1430],{},[180,1424,1425],{"href":468},[8,1426,471],{}," — A soft hinge: about 0 for values well below zero, about ",[8,1429,1280],{}," above, rounded near zero.",[1088,1432,1433,1437],{},[180,1434,1435],{"href":518},[8,1436,521],{}," — A random but stable angle in radians, 0..2π, from a seed.",[1088,1439,1440,1446],{},[180,1441,1443],{"href":1442},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fsign",[8,1444,1445],{},"sign"," — −1, 0 or 1 by the sign of the value.",[1088,1448,1449,1455],{},[180,1450,1452],{"href":1451},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fceil",[8,1453,1454],{},"ceil"," — The value rounded up to a whole number.",[1088,1457,1458,1464],{},[180,1459,1461],{"href":1460},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Flog",[8,1462,1463],{},"log"," — The natural logarithm of a value.",[1088,1466,1467,1473],{},[180,1468,1470],{"href":1469},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fexp2",[8,1471,1472],{},"exp2"," — 2 raised to the value.",[1088,1475,1476,1482],{},[180,1477,1479],{"href":1478},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ftan",[8,1480,1481],{},"tan"," — The tangent of an angle in radians.",[1088,1484,1485,1491],{},[180,1486,1488],{"href":1487},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Fcross",[8,1489,1490],{},"cross"," — The cross product of two 3D vectors.",[1088,1493,1494,1500,1501,1504,1505,1139],{},[180,1495,1497],{"href":1496},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Freflect",[8,1498,1499],{},"reflect"," — The direction ",[8,1502,1503],{},"i"," bounced off a surface with unit normal ",[8,1506,1507],{},"n",[1088,1509,1510,1500,1516,1518,1519,1139],{},[180,1511,1513],{"href":1512},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Frefract",[8,1514,1515],{},"refract",[8,1517,1503],{}," bent through a surface with unit normal ",[8,1520,1507],{},[1088,1522,1523,1529],{},[180,1524,1526],{"href":1525},"\u002Fdocs\u002Fprimitives\u002Fmath\u002Ffloat",[8,1527,1528],{},"float"," — A plain number as an expression.",[1531,1532,1533],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":204,"searchDepth":563,"depth":563,"links":1535},[1536,1537,1538],{"id":230,"depth":563,"text":231},{"id":543,"depth":563,"text":544},{"id":1078,"depth":563,"text":1079},"The arithmetic you write your own paint with.","https:\u002F\u002Fgithub.com\u002Fshader-effects-inc\u002Fshaders\u002Fedit\u002Fmain\u002Fpackages\u002Fcore\u002Fdocs\u002Fstd\u002Fmath.md","md","space","Shapes, frames & warps",{},"\u002Fdocs\u002Fprimitives\u002Fmath",{"title":147,"description":1539},"https:\u002F\u002Fgithub.com\u002Fshader-effects-inc\u002Fshaders\u002Fblob\u002Fmain\u002Fpackages\u002Fcore\u002Fsrc\u002Fstd\u002Fmath.ts","docs\u002Fprimitives\u002F22.math\u002Findex",47,"KLQgzNLx2F75QgF4_3wR9bVHG5jfpfY6Ye_E38ol6jE"]