[{"data":1,"prerenderedAt":1982},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fobjects\u002Frefractor":498,"\u002Fapi\u002Fobjects\u002Frefractor-surround":1977},[4,26],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation Guide","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17},"Usage","\u002Fgetting-started\u002Fusage","1.getting-started\u002F3.usage",{"title":19,"path":20,"stem":21},"Loading Models","\u002Fgetting-started\u002Floading-models","1.getting-started\u002F4.loading-models",{"title":23,"path":24,"stem":25},"Upgrade Guide","\u002Fgetting-started\u002Fupgrade-guide","1.getting-started\u002F5.upgrade-guide",{"title":27,"path":28,"stem":29,"children":30},"Api","\u002Fapi","2.api",[31,34,96,126,168,210,308,334,368,418,464],{"title":32,"path":28,"stem":33},"All","2.api\u002Findex",{"title":35,"path":36,"stem":37,"children":38},"Abstractions","\u002Fapi\u002Fabstractions","2.api\u002F1.abstractions\u002Findex",[39,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Align","\u002Fapi\u002Fabstractions\u002Falign","2.api\u002F1.abstractions\u002Falign",{"title":45,"path":46,"stem":47},"Billboard","\u002Fapi\u002Fabstractions\u002Fbillboard","2.api\u002F1.abstractions\u002Fbillboard",{"title":49,"path":50,"stem":51},"Camera Shake","\u002Fapi\u002Fabstractions\u002Fcamera-shake","2.api\u002F1.abstractions\u002Fcamera-shake",{"title":53,"path":54,"stem":55},"Decal","\u002Fapi\u002Fabstractions\u002Fdecal","2.api\u002F1.abstractions\u002Fdecal",{"title":57,"path":58,"stem":59},"Edges","\u002Fapi\u002Fabstractions\u002Fedges","2.api\u002F1.abstractions\u002Fedges",{"title":61,"path":62,"stem":63},"Fit","\u002Fapi\u002Fabstractions\u002Ffit","2.api\u002F1.abstractions\u002Ffit",{"title":65,"path":66,"stem":67},"Instances","\u002Fapi\u002Fabstractions\u002Finstances","2.api\u002F1.abstractions\u002Finstances",{"title":69,"path":70,"stem":71},"Levioso (Float)","\u002Fapi\u002Fabstractions\u002Flevioso","2.api\u002F1.abstractions\u002Flevioso",{"title":73,"path":74,"stem":75},"Mask","\u002Fapi\u002Fabstractions\u002Fmask","2.api\u002F1.abstractions\u002Fmask",{"title":77,"path":78,"stem":79},"Merged","\u002Fapi\u002Fabstractions\u002Fmerged","2.api\u002F1.abstractions\u002Fmerged",{"title":81,"path":82,"stem":83},"Outline","\u002Fapi\u002Fabstractions\u002Foutline","2.api\u002F1.abstractions\u002Foutline",{"title":85,"path":86,"stem":87},"Sampler","\u002Fapi\u002Fabstractions\u002Fsampler","2.api\u002F1.abstractions\u002Fsampler",{"title":89,"path":90,"stem":91},"ScreenSizer","\u002Fapi\u002Fabstractions\u002Fscreen-sizer","2.api\u002F1.abstractions\u002Fscreen-sizer",{"title":93,"path":94,"stem":95},"ScreenSpace","\u002Fapi\u002Fabstractions\u002Fscreen-space","2.api\u002F1.abstractions\u002Fscreen-space",{"title":97,"path":98,"stem":99,"children":100},"Controls","\u002Fapi\u002Fcontrols","2.api\u002F2.controls\u002Findex",[101,102,106,110,114,118,122],{"title":97,"path":98,"stem":99},{"title":103,"path":104,"stem":105},"Camera Controls","\u002Fapi\u002Fcontrols\u002Fcamera-controls","2.api\u002F2.controls\u002Fcamera-controls",{"title":107,"path":108,"stem":109},"Keyboard Controls","\u002Fapi\u002Fcontrols\u002Fkeyboard-controls","2.api\u002F2.controls\u002Fkeyboard-controls",{"title":111,"path":112,"stem":113},"Map Controls","\u002Fapi\u002Fcontrols\u002Fmap-controls","2.api\u002F2.controls\u002Fmap-controls",{"title":115,"path":116,"stem":117},"Orbit Controls","\u002Fapi\u002Fcontrols\u002Forbit-controls","2.api\u002F2.controls\u002Forbit-controls",{"title":119,"path":120,"stem":121},"PointerLock Controls","\u002Fapi\u002Fcontrols\u002Fpointer-lock-controls","2.api\u002F2.controls\u002Fpointer-lock-controls",{"title":123,"path":124,"stem":125},"Transform Controls","\u002Fapi\u002Fcontrols\u002Ftransform-controls","2.api\u002F2.controls\u002Ftransform-controls",{"title":127,"path":128,"stem":129,"children":130},"Loaders","\u002Fapi\u002Floaders","2.api\u002F3.loaders\u002Findex",[131,132,136,140,144,148,152,156,160,164],{"title":127,"path":128,"stem":129},{"title":133,"path":134,"stem":135},"useGLTF","\u002Fapi\u002Floaders\u002Fuse-gltf","2.api\u002F3.loaders\u002F1.use-gltf",{"title":137,"path":138,"stem":139},"GLTFModel","\u002Fapi\u002Floaders\u002Fgltf-model","2.api\u002F3.loaders\u002F2.gltf-model",{"title":141,"path":142,"stem":143},"useFBX","\u002Fapi\u002Floaders\u002Fuse-fbx","2.api\u002F3.loaders\u002F3.use-fbx",{"title":145,"path":146,"stem":147},"FBXModel","\u002Fapi\u002Floaders\u002Ffbx-model","2.api\u002F3.loaders\u002F4.fbx-model",{"title":149,"path":150,"stem":151},"useTexture","\u002Fapi\u002Floaders\u002Fuse-texture","2.api\u002F3.loaders\u002F5.use-texture",{"title":153,"path":154,"stem":155},"useTextures","\u002Fapi\u002Floaders\u002Fuse-textures","2.api\u002F3.loaders\u002F6.use-textures",{"title":157,"path":158,"stem":159},"useSVG","\u002Fapi\u002Floaders\u002Fuse-svg","2.api\u002F3.loaders\u002F7.use-svg",{"title":161,"path":162,"stem":163},"useProgress","\u002Fapi\u002Floaders\u002Fuse-progress","2.api\u002F3.loaders\u002Fuse-progress",{"title":165,"path":166,"stem":167},"useVideoTexture","\u002Fapi\u002Floaders\u002Fuse-video-texture","2.api\u002F3.loaders\u002Fuse-video-texture",{"title":169,"path":170,"stem":171,"children":172},"Materials","\u002Fapi\u002Fmaterials","2.api\u002F4.materials\u002Findex",[173,174,178,182,186,190,194,198,202,206],{"title":169,"path":170,"stem":171},{"title":175,"path":176,"stem":177},"Custom Shader Material","\u002Fapi\u002Fmaterials\u002Fcustom-shader-material","2.api\u002F4.materials\u002Fcustom-shader-material",{"title":179,"path":180,"stem":181},"Mesh Glass Material","\u002Fapi\u002Fmaterials\u002Fglass-material","2.api\u002F4.materials\u002Fglass-material",{"title":183,"path":184,"stem":185},"Holographic Material","\u002Fapi\u002Fmaterials\u002Fholographic-material","2.api\u002F4.materials\u002Fholographic-material",{"title":187,"path":188,"stem":189},"Mesh Discard Material","\u002Fapi\u002Fmaterials\u002Fmesh-discard-material","2.api\u002F4.materials\u002Fmesh-discard-material",{"title":191,"path":192,"stem":193},"Mesh Portal Material","\u002Fapi\u002Fmaterials\u002Fmesh-portal-material","2.api\u002F4.materials\u002Fmesh-portal-material",{"title":195,"path":196,"stem":197},"Mesh Reflection Material","\u002Fapi\u002Fmaterials\u002Fmesh-reflection-material","2.api\u002F4.materials\u002Fmesh-reflection-material",{"title":199,"path":200,"stem":201},"Mesh Transmission Material","\u002Fapi\u002Fmaterials\u002Fmesh-transmission-material","2.api\u002F4.materials\u002Fmesh-transmission-material",{"title":203,"path":204,"stem":205},"Point Material","\u002Fapi\u002Fmaterials\u002Fpoint-material","2.api\u002F4.materials\u002Fpoint-material",{"title":207,"path":208,"stem":209},"Wobble Material","\u002Fapi\u002Fmaterials\u002Fwobble-material","2.api\u002F4.materials\u002Fwobble-material",{"title":211,"path":212,"stem":213,"children":214},"Shapes","\u002Fapi\u002Fshapes","2.api\u002F5.shapes\u002Findex",[215,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304],{"title":211,"path":212,"stem":213},{"title":217,"path":218,"stem":219},"Box","\u002Fapi\u002Fshapes\u002Fbox","2.api\u002F5.shapes\u002Fbox",{"title":221,"path":222,"stem":223},"CatmullRomCurve3","\u002Fapi\u002Fshapes\u002Fcatmullromcurve3","2.api\u002F5.shapes\u002Fcatmullromcurve3",{"title":225,"path":226,"stem":227},"Circle","\u002Fapi\u002Fshapes\u002Fcircle","2.api\u002F5.shapes\u002Fcircle",{"title":229,"path":230,"stem":231},"Cone","\u002Fapi\u002Fshapes\u002Fcone","2.api\u002F5.shapes\u002Fcone",{"title":233,"path":234,"stem":235},"Cubic Bezier Line","\u002Fapi\u002Fshapes\u002Fcubic-bezier-line","2.api\u002F5.shapes\u002Fcubic-bezier-line",{"title":237,"path":238,"stem":239},"Cylinder","\u002Fapi\u002Fshapes\u002Fcylinder","2.api\u002F5.shapes\u002Fcylinder",{"title":241,"path":242,"stem":243},"Dodecahedron","\u002Fapi\u002Fshapes\u002Fdodecahedron","2.api\u002F5.shapes\u002Fdodecahedron",{"title":245,"path":246,"stem":247},"Grid","\u002Fapi\u002Fshapes\u002Fgrid","2.api\u002F5.shapes\u002Fgrid",{"title":249,"path":250,"stem":251},"Icosahedron","\u002Fapi\u002Fshapes\u002Ficosahedron","2.api\u002F5.shapes\u002Ficosahedron",{"title":253,"path":254,"stem":255},"Line2","\u002Fapi\u002Fshapes\u002Fline2","2.api\u002F5.shapes\u002Fline2",{"title":257,"path":258,"stem":259},"Octahedron","\u002Fapi\u002Fshapes\u002Foctahedron","2.api\u002F5.shapes\u002Foctahedron",{"title":261,"path":262,"stem":263},"Plane","\u002Fapi\u002Fshapes\u002Fplane","2.api\u002F5.shapes\u002Fplane",{"title":265,"path":266,"stem":267},"Quadratic Bezier Line","\u002Fapi\u002Fshapes\u002Fquadratic-bezier-line","2.api\u002F5.shapes\u002Fquadratic-bezier-line",{"title":269,"path":270,"stem":271},"Ring","\u002Fapi\u002Fshapes\u002Fring","2.api\u002F5.shapes\u002Fring",{"title":273,"path":274,"stem":275},"Rounded Box","\u002Fapi\u002Fshapes\u002Frounded-box","2.api\u002F5.shapes\u002Frounded-box",{"title":277,"path":278,"stem":279},"Rounded Plane","\u002Fapi\u002Fshapes\u002Frounded-plane","2.api\u002F5.shapes\u002Frounded-plane",{"title":281,"path":282,"stem":283},"Screen Quad","\u002Fapi\u002Fshapes\u002Fscreen-quad","2.api\u002F5.shapes\u002Fscreen-quad",{"title":285,"path":286,"stem":287},"Sphere","\u002Fapi\u002Fshapes\u002Fsphere","2.api\u002F5.shapes\u002Fsphere",{"title":289,"path":290,"stem":291},"Superformula","\u002Fapi\u002Fshapes\u002Fsuperformula","2.api\u002F5.shapes\u002Fsuperformula",{"title":293,"path":294,"stem":295},"Tetrahedron","\u002Fapi\u002Fshapes\u002Ftetrahedron","2.api\u002F5.shapes\u002Ftetrahedron",{"title":297,"path":298,"stem":299},"Torus","\u002Fapi\u002Fshapes\u002Ftorus","2.api\u002F5.shapes\u002Ftorus",{"title":301,"path":302,"stem":303},"Torus Knot","\u002Fapi\u002Fshapes\u002Ftorus-knot","2.api\u002F5.shapes\u002Ftorus-knot",{"title":305,"path":306,"stem":307},"Tube","\u002Fapi\u002Fshapes\u002Ftube","2.api\u002F5.shapes\u002Ftube",{"title":309,"path":310,"stem":311,"children":312},"Debug\u002FPerformance","\u002Fapi\u002Fdebug-performance","2.api\u002F6.debug-performance\u002Findex",[313,314,318,322,326,330],{"title":309,"path":310,"stem":311},{"title":315,"path":316,"stem":317},"Helper","\u002Fapi\u002Fdebug-performance\u002Fhelper","2.api\u002F6.debug-performance\u002Fhelper",{"title":319,"path":320,"stem":321},"LOD","\u002Fapi\u002Fdebug-performance\u002Flod","2.api\u002F6.debug-performance\u002Flod",{"title":323,"path":324,"stem":325},"Stats","\u002Fapi\u002Fdebug-performance\u002Fstats","2.api\u002F6.debug-performance\u002Fstats",{"title":327,"path":328,"stem":329},"StatsGl","\u002Fapi\u002Fdebug-performance\u002Fstats-gl","2.api\u002F6.debug-performance\u002Fstats-gl",{"title":331,"path":332,"stem":333},"useBVH","\u002Fapi\u002Fdebug-performance\u002Fuse-bvh","2.api\u002F6.debug-performance\u002Fuse-bvh",{"title":335,"path":336,"stem":337,"children":338},"Light\u002FShadow","\u002Fapi\u002Flight-shadow","2.api\u002F7.light-shadow\u002Findex",[339,340,344,348,352,356,360,364],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Accumulative Shadows","\u002Fapi\u002Flight-shadow\u002Faccumulative-shadows","2.api\u002F7.light-shadow\u002Faccumulative-shadows",{"title":345,"path":346,"stem":347},"Bake Shadows","\u002Fapi\u002Flight-shadow\u002Fbake-shadows","2.api\u002F7.light-shadow\u002Fbake-shadows",{"title":349,"path":350,"stem":351},"Circle Shadow","\u002Fapi\u002Flight-shadow\u002Fcircle-shadow","2.api\u002F7.light-shadow\u002Fcircle-shadow",{"title":353,"path":354,"stem":355},"Contact Shadows","\u002Fapi\u002Flight-shadow\u002Fcontact-shadows","2.api\u002F7.light-shadow\u002Fcontact-shadows",{"title":357,"path":358,"stem":359},"Lensflare","\u002Fapi\u002Flight-shadow\u002Flensflare","2.api\u002F7.light-shadow\u002Flensflare",{"title":361,"path":362,"stem":363},"Randomized Lights","\u002Fapi\u002Flight-shadow\u002Frandomized-lights","2.api\u002F7.light-shadow\u002Frandomized-lights",{"title":365,"path":366,"stem":367},"Soft Shadows","\u002Fapi\u002Flight-shadow\u002Fsoft-shadows","2.api\u002F7.light-shadow\u002Fsoft-shadows",{"title":369,"path":370,"stem":371,"children":372},"Staging","\u002Fapi\u002Fstaging","2.api\u002F8.staging\u002Findex",[373,374,378,382,386,390,394,398,402,406,410,414],{"title":369,"path":370,"stem":371},{"title":375,"path":376,"stem":377},"Environment","\u002Fapi\u002Fstaging\u002Fenvironment","2.api\u002F8.staging\u002F1.environment",{"title":379,"path":380,"stem":381},"useEnvironment","\u002Fapi\u002Fstaging\u002Fuse-environment","2.api\u002F8.staging\u002F2.use-environment",{"title":383,"path":384,"stem":385},"Lightformer","\u002Fapi\u002Fstaging\u002Flightformer","2.api\u002F8.staging\u002F3.lightformer",{"title":387,"path":388,"stem":389},"Backdrop","\u002Fapi\u002Fstaging\u002Fbackdrop","2.api\u002F8.staging\u002Fbackdrop",{"title":391,"path":392,"stem":393},"Ocean","\u002Fapi\u002Fstaging\u002Focean","2.api\u002F8.staging\u002Focean",{"title":395,"path":396,"stem":397},"Precipitation","\u002Fapi\u002Fstaging\u002Fprecipitation","2.api\u002F8.staging\u002Fprecipitation",{"title":399,"path":400,"stem":401},"Sky","\u002Fapi\u002Fstaging\u002Fsky","2.api\u002F8.staging\u002Fsky",{"title":403,"path":404,"stem":405},"Smoke","\u002Fapi\u002Fstaging\u002Fsmoke","2.api\u002F8.staging\u002Fsmoke",{"title":407,"path":408,"stem":409},"Sparkles","\u002Fapi\u002Fstaging\u002Fsparkles","2.api\u002F8.staging\u002Fsparkles",{"title":411,"path":412,"stem":413},"Stage","\u002Fapi\u002Fstaging\u002Fstage","2.api\u002F8.staging\u002Fstage",{"title":415,"path":416,"stem":417},"Stars","\u002Fapi\u002Fstaging\u002Fstars","2.api\u002F8.staging\u002Fstars",{"title":419,"path":420,"stem":421,"children":422},"Objects","\u002Fapi\u002Fobjects","2.api\u002F9.objects\u002Findex",[423,424,428,432,436,440,444,448,452,456,460],{"title":419,"path":420,"stem":421},{"title":425,"path":426,"stem":427},"AnimatedSprite","\u002Fapi\u002Fobjects\u002Fanimated-sprite","2.api\u002F9.objects\u002Fanimated-sprite",{"title":429,"path":430,"stem":431},"CubeCamera","\u002Fapi\u002Fobjects\u002Fcube-camera","2.api\u002F9.objects\u002Fcube-camera",{"title":433,"path":434,"stem":435},"Fbo","\u002Fapi\u002Fobjects\u002Ffbo","2.api\u002F9.objects\u002Ffbo",{"title":437,"path":438,"stem":439},"GradientTexture","\u002Fapi\u002Fobjects\u002Fgradient-texture","2.api\u002F9.objects\u002Fgradient-texture",{"title":441,"path":442,"stem":443},"HTML","\u002Fapi\u002Fobjects\u002Fhtml","2.api\u002F9.objects\u002Fhtml",{"title":445,"path":446,"stem":447},"Image","\u002Fapi\u002Fobjects\u002Fimage","2.api\u002F9.objects\u002Fimage",{"title":449,"path":450,"stem":451},"MarchingCubes","\u002Fapi\u002Fobjects\u002Fmarching-cubes","2.api\u002F9.objects\u002Fmarching-cubes",{"title":453,"path":454,"stem":455},"Reflector","\u002Fapi\u002Fobjects\u002Freflector","2.api\u002F9.objects\u002Freflector",{"title":457,"path":458,"stem":459},"Refractor","\u002Fapi\u002Fobjects\u002Frefractor","2.api\u002F9.objects\u002Frefractor",{"title":461,"path":462,"stem":463},"Text3D","\u002Fapi\u002Fobjects\u002Ftext-3d","2.api\u002F9.objects\u002Ftext-3d",{"title":465,"path":466,"stem":467,"children":468},"Miscellaneous","\u002Fapi\u002Fmiscellaneous","2.api\u002Fmiscellaneous\u002Findex",[469,470,474,478,482,486,490,494],{"title":465,"path":466,"stem":467},{"title":471,"path":472,"stem":473},"Bounds","\u002Fapi\u002Fmiscellaneous\u002Fbounds","2.api\u002Fmiscellaneous\u002Fbounds",{"title":475,"path":476,"stem":477},"GlobalAudio","\u002Fapi\u002Fmiscellaneous\u002Fglobal-audio","2.api\u002Fmiscellaneous\u002Fglobal-audio",{"title":479,"path":480,"stem":481},"MouseParallax","\u002Fapi\u002Fmiscellaneous\u002Fmouse-parallax","2.api\u002Fmiscellaneous\u002Fmouse-parallax",{"title":483,"path":484,"stem":485},"PositionalAudio","\u002Fapi\u002Fmiscellaneous\u002Fpositional-audio","2.api\u002Fmiscellaneous\u002Fpositional-audio",{"title":487,"path":488,"stem":489},"useAnimations","\u002Fapi\u002Fmiscellaneous\u002Fuse-animations","2.api\u002Fmiscellaneous\u002Fuse-animations",{"title":491,"path":492,"stem":493},"useGLTFExporter","\u002Fapi\u002Fmiscellaneous\u002Fuse-gltf-exporter","2.api\u002Fmiscellaneous\u002Fuse-gltf-exporter",{"title":495,"path":496,"stem":497},"useIntersect","\u002Fapi\u002Fmiscellaneous\u002Fuse-intersect","2.api\u002Fmiscellaneous\u002Fuse-intersect",{"id":499,"title":457,"body":500,"description":1971,"extension":1972,"links":1973,"meta":1974,"navigation":622,"path":458,"seo":1975,"stem":459,"__hash__":1976},"docs\u002F2.api\u002F9.objects\u002Frefractor.md",{"type":501,"value":502,"toc":1964},"minimark",[503,509,530,534,903,907,1020,1029,1033,1047,1717,1720,1725,1960],[504,505,506],"scene-controls-wrapper",{},[507,508],"objects-refractor",{},[510,511,512,513,517,518,525,526,529],"p",{},"The ",[514,515,516],"code",{},"cientos"," package provides an abstraction of the ",[519,520,524],"a",{"href":521,"rel":522},"https:\u002F\u002Fgithub.com\u002Fmrdoob\u002Fthree.js\u002Fblob\u002Fdev\u002Fexamples\u002Fjsm\u002Fobjects\u002FRefractor.js",[523],"nofollow","Refractor class",", which creates a Mesh that renders what is behind it with a refractive distortion effect — useful for glass panels, water surfaces, and other transmissive materials. This Mesh extends from ",[514,527,528],{},"Mesh"," so all the default props can be passed as well.",[531,532,15],"h2",{"id":533},"usage",[535,536,541],"pre",{"className":537,"code":538,"language":539,"meta":540,"style":540},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { Refractor } from '@tresjs\u002Fcientos'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CTresCanvas shadows alpha>\n    \u003CTresPerspectiveCamera :position=\"[0, 2, 8]\" \u002F>\n    \u003COrbitControls \u002F>\n\n    \u003C!-- Place objects behind the refracting plane -->\n    \u003CTresMesh :position=\"[-2, 0, -2]\">\n      \u003CTresTorusKnotGeometry \u002F>\n      \u003CTresMeshStandardMaterial color=\"hotpink\" \u002F>\n    \u003C\u002FTresMesh>\n\n    \u003CSuspense>\n      \u003CRefractor color=\"#9ec8d4\">\n        \u003CTresPlaneGeometry :args=\"[8, 5]\" \u002F>\n      \u003C\u002FRefractor>\n    \u003C\u002FSuspense>\n  \u003C\u002FTresCanvas>\n\u003C\u002Ftemplate>\n","vue","",[514,542,543,578,607,617,624,634,651,696,706,711,718,754,765,787,797,802,812,832,865,875,884,894],{"__ignoreMap":540},[544,545,548,552,556,560,563,566,569,573,575],"span",{"class":546,"line":547},"line",1,[544,549,551],{"class":550},"sMK4o","\u003C",[544,553,555],{"class":554},"swJcz","script",[544,557,559],{"class":558},"spNyl"," setup",[544,561,562],{"class":558}," lang",[544,564,565],{"class":550},"=",[544,567,568],{"class":550},"\"",[544,570,572],{"class":571},"sfazB","ts",[544,574,568],{"class":550},[544,576,577],{"class":550},">\n",[544,579,581,585,588,592,595,598,601,604],{"class":546,"line":580},2,[544,582,584],{"class":583},"s7zQu","import",[544,586,587],{"class":550}," {",[544,589,591],{"class":590},"sTEyZ"," Refractor",[544,593,594],{"class":550}," }",[544,596,597],{"class":583}," from",[544,599,600],{"class":550}," '",[544,602,603],{"class":571},"@tresjs\u002Fcientos",[544,605,606],{"class":550},"'\n",[544,608,610,613,615],{"class":546,"line":609},3,[544,611,612],{"class":550},"\u003C\u002F",[544,614,555],{"class":554},[544,616,577],{"class":550},[544,618,620],{"class":546,"line":619},4,[544,621,623],{"emptyLinePlaceholder":622},true,"\n",[544,625,627,629,632],{"class":546,"line":626},5,[544,628,551],{"class":550},[544,630,631],{"class":554},"template",[544,633,577],{"class":550},[544,635,637,640,643,646,649],{"class":546,"line":636},6,[544,638,639],{"class":550},"  \u003C",[544,641,642],{"class":554},"TresCanvas",[544,644,645],{"class":558}," shadows",[544,647,648],{"class":558}," alpha",[544,650,577],{"class":550},[544,652,654,657,660,663,666,668,670,673,677,680,683,685,688,691,693],{"class":546,"line":653},7,[544,655,656],{"class":550},"    \u003C",[544,658,659],{"class":554},"TresPerspectiveCamera",[544,661,662],{"class":550}," :",[544,664,665],{"class":558},"position",[544,667,565],{"class":550},[544,669,568],{"class":550},[544,671,672],{"class":550},"[",[544,674,676],{"class":675},"sbssI","0",[544,678,679],{"class":550},", ",[544,681,682],{"class":675},"2",[544,684,679],{"class":550},[544,686,687],{"class":675},"8",[544,689,690],{"class":550},"]",[544,692,568],{"class":550},[544,694,695],{"class":550}," \u002F>\n",[544,697,699,701,704],{"class":546,"line":698},8,[544,700,656],{"class":550},[544,702,703],{"class":554},"OrbitControls",[544,705,695],{"class":550},[544,707,709],{"class":546,"line":708},9,[544,710,623],{"emptyLinePlaceholder":622},[544,712,714],{"class":546,"line":713},10,[544,715,717],{"class":716},"sHwdD","    \u003C!-- Place objects behind the refracting plane -->\n",[544,719,721,723,726,728,730,732,734,737,739,741,743,746,748,750,752],{"class":546,"line":720},11,[544,722,656],{"class":550},[544,724,725],{"class":554},"TresMesh",[544,727,662],{"class":550},[544,729,665],{"class":558},[544,731,565],{"class":550},[544,733,568],{"class":550},[544,735,736],{"class":550},"[-",[544,738,682],{"class":675},[544,740,679],{"class":550},[544,742,676],{"class":675},[544,744,745],{"class":550},", -",[544,747,682],{"class":675},[544,749,690],{"class":550},[544,751,568],{"class":550},[544,753,577],{"class":550},[544,755,757,760,763],{"class":546,"line":756},12,[544,758,759],{"class":550},"      \u003C",[544,761,762],{"class":554},"TresTorusKnotGeometry",[544,764,695],{"class":550},[544,766,768,770,773,776,778,780,783,785],{"class":546,"line":767},13,[544,769,759],{"class":550},[544,771,772],{"class":554},"TresMeshStandardMaterial",[544,774,775],{"class":558}," color",[544,777,565],{"class":550},[544,779,568],{"class":550},[544,781,782],{"class":571},"hotpink",[544,784,568],{"class":550},[544,786,695],{"class":550},[544,788,790,793,795],{"class":546,"line":789},14,[544,791,792],{"class":550},"    \u003C\u002F",[544,794,725],{"class":554},[544,796,577],{"class":550},[544,798,800],{"class":546,"line":799},15,[544,801,623],{"emptyLinePlaceholder":622},[544,803,805,807,810],{"class":546,"line":804},16,[544,806,656],{"class":550},[544,808,809],{"class":554},"Suspense",[544,811,577],{"class":550},[544,813,815,817,819,821,823,825,828,830],{"class":546,"line":814},17,[544,816,759],{"class":550},[544,818,457],{"class":554},[544,820,775],{"class":558},[544,822,565],{"class":550},[544,824,568],{"class":550},[544,826,827],{"class":571},"#9ec8d4",[544,829,568],{"class":550},[544,831,577],{"class":550},[544,833,835,838,841,843,846,848,850,852,854,856,859,861,863],{"class":546,"line":834},18,[544,836,837],{"class":550},"        \u003C",[544,839,840],{"class":554},"TresPlaneGeometry",[544,842,662],{"class":550},[544,844,845],{"class":558},"args",[544,847,565],{"class":550},[544,849,568],{"class":550},[544,851,672],{"class":550},[544,853,687],{"class":675},[544,855,679],{"class":550},[544,857,858],{"class":675},"5",[544,860,690],{"class":550},[544,862,568],{"class":550},[544,864,695],{"class":550},[544,866,868,871,873],{"class":546,"line":867},19,[544,869,870],{"class":550},"      \u003C\u002F",[544,872,457],{"class":554},[544,874,577],{"class":550},[544,876,878,880,882],{"class":546,"line":877},20,[544,879,792],{"class":550},[544,881,809],{"class":554},[544,883,577],{"class":550},[544,885,887,890,892],{"class":546,"line":886},21,[544,888,889],{"class":550},"  \u003C\u002F",[544,891,642],{"class":554},[544,893,577],{"class":550},[544,895,897,899,901],{"class":546,"line":896},22,[544,898,612],{"class":550},[544,900,631],{"class":554},[544,902,577],{"class":550},[531,904,906],{"id":905},"props","Props",[908,909,910,927],"table",{},[911,912,913],"thead",{},[914,915,916,921,924],"tr",{},[917,918,920],"th",{"align":919},"left","Prop",[917,922,923],{"align":919},"Description",[917,925,926],{},"Default",[928,929,930,947,962,976,990,1005],"tbody",{},[914,931,932,939,942],{},[933,934,935],"td",{"align":919},[936,937,938],"strong",{},"color",[933,940,941],{"align":919},"Color tint blended with the refracted image",[933,943,944],{},[514,945,946],{},"'#7f7f7f'",[914,948,949,954,957],{},[933,950,951],{"align":919},[936,952,953],{},"textureWidth",[933,955,956],{"align":919},"Width of the internal render target texture",[933,958,959],{},[514,960,961],{},"512",[914,963,964,969,972],{},[933,965,966],{"align":919},[936,967,968],{},"textureHeight",[933,970,971],{"align":919},"Height of the internal render target texture",[933,973,974],{},[514,975,961],{},[914,977,978,983,986],{},[933,979,980],{"align":919},[936,981,982],{},"clipBias",[933,984,985],{"align":919},"Clip bias for the virtual camera projection",[933,987,988],{},[514,989,676],{},[914,991,992,997,1000],{},[933,993,994],{"align":919},[936,995,996],{},"multisample",[933,998,999],{"align":919},"Number of MSAA samples for the render target",[933,1001,1002],{},[514,1003,1004],{},"4",[914,1006,1007,1012,1015],{},[933,1008,1009],{"align":919},[936,1010,1011],{},"shader",[933,1013,1014],{"align":919},"Custom shader object to override the built-in shader",[933,1016,1017],{},[514,1018,1019],{},"Refractor.RefractorShader",[1021,1022,1023],"prose-warning",{},[510,1024,1025,1026,1028],{},"All the props except ",[514,1027,938],{}," are not reactive",[531,1030,1032],{"id":1031},"custom-refraction-effect","Custom refraction effect",[510,1034,1035,1036,679,1039,1042,1043,1046],{},"You can provide your own shader by passing a full shader object with ",[514,1037,1038],{},"uniforms",[514,1040,1041],{},"vertexShader",", and ",[514,1044,1045],{},"fragmentShader",". The example below adds animated circular ripples emanating from the center of the surface, while preserving the color tint:",[535,1048,1050],{"className":537,"code":1049,"language":539,"meta":540,"style":540},"\u003Cscript setup lang=\"ts\">\nimport { Refractor } from '@tresjs\u002Fcientos'\nimport { useLoop } from '@tresjs\u002Fcore'\nimport { shallowRef } from 'vue'\n\nconst refractorRef = shallowRef()\n\nconst customShader = {\n  uniforms: {\n    color: { value: null },\n    tDiffuse: { value: null },\n    textureMatrix: { value: null },\n    time: { value: 0 },\n  },\n  vertexShader: \u002F* glsl *\u002F`\n    uniform mat4 textureMatrix;\n    varying vec4 vUv;\n    varying vec2 vPos;\n    void main() {\n      vUv = textureMatrix * vec4(position, 1.0);\n      vPos = position.xy;\n      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n    }`,\n  fragmentShader: \u002F* glsl *\u002F`\n    uniform vec3 color;\n    uniform sampler2D tDiffuse;\n    uniform float time;\n    varying vec4 vUv;\n    varying vec2 vPos;\n    float blendOverlay(float base, float blend) {\n      return(base \u003C 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)));\n    }\n    vec3 blendOverlay(vec3 base, vec3 blend) {\n      return vec3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b));\n    }\n    void main() {\n      float dist = length(vPos);\n      float wave = sin(dist * 6.0 - time * 4.0) * 0.02;\n      vec2 dir = dist > 0.001 ? normalize(vPos) : vec2(0.0);\n      vec4 distortedUv = vUv + vec4(dir * wave, 0.0, 0.0);\n      vec4 base = texture2DProj(tDiffuse, distortedUv);\n      gl_FragColor = vec4(blendOverlay(base.rgb, color), 1.0);\n      #include \u003Ctonemapping_fragment>\n      #include \u003Ccolorspace_fragment>\n    }`,\n}\n\nconst { onBeforeRender } = useLoop()\nonBeforeRender(({ elapsed }) => {\n  const uniforms = refractorRef.value?.instance?.material?.uniforms\n  if (uniforms?.time) { uniforms.time.value = elapsed }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CRefractor\n    ref=\"refractorRef\"\n    color=\"#9ec8d4\"\n    :shader=\"customShader\"\n  >\n    \u003CTresPlaneGeometry :args=\"[8, 5]\" \u002F>\n  \u003C\u002FRefractor>\n\u003C\u002Ftemplate>\n",[514,1051,1052,1072,1090,1110,1129,1133,1149,1153,1165,1175,1195,1212,1229,1247,1252,1265,1270,1275,1280,1285,1290,1295,1300,1312,1324,1330,1336,1342,1347,1352,1358,1364,1370,1376,1382,1387,1392,1398,1404,1410,1416,1422,1428,1434,1440,1449,1455,1460,1480,1504,1540,1579,1587,1596,1601,1610,1618,1634,1647,1664,1670,1699,1708],{"__ignoreMap":540},[544,1053,1054,1056,1058,1060,1062,1064,1066,1068,1070],{"class":546,"line":547},[544,1055,551],{"class":550},[544,1057,555],{"class":554},[544,1059,559],{"class":558},[544,1061,562],{"class":558},[544,1063,565],{"class":550},[544,1065,568],{"class":550},[544,1067,572],{"class":571},[544,1069,568],{"class":550},[544,1071,577],{"class":550},[544,1073,1074,1076,1078,1080,1082,1084,1086,1088],{"class":546,"line":580},[544,1075,584],{"class":583},[544,1077,587],{"class":550},[544,1079,591],{"class":590},[544,1081,594],{"class":550},[544,1083,597],{"class":583},[544,1085,600],{"class":550},[544,1087,603],{"class":571},[544,1089,606],{"class":550},[544,1091,1092,1094,1096,1099,1101,1103,1105,1108],{"class":546,"line":609},[544,1093,584],{"class":583},[544,1095,587],{"class":550},[544,1097,1098],{"class":590}," useLoop",[544,1100,594],{"class":550},[544,1102,597],{"class":583},[544,1104,600],{"class":550},[544,1106,1107],{"class":571},"@tresjs\u002Fcore",[544,1109,606],{"class":550},[544,1111,1112,1114,1116,1119,1121,1123,1125,1127],{"class":546,"line":619},[544,1113,584],{"class":583},[544,1115,587],{"class":550},[544,1117,1118],{"class":590}," shallowRef",[544,1120,594],{"class":550},[544,1122,597],{"class":583},[544,1124,600],{"class":550},[544,1126,539],{"class":571},[544,1128,606],{"class":550},[544,1130,1131],{"class":546,"line":626},[544,1132,623],{"emptyLinePlaceholder":622},[544,1134,1135,1138,1141,1143,1146],{"class":546,"line":636},[544,1136,1137],{"class":558},"const",[544,1139,1140],{"class":590}," refractorRef ",[544,1142,565],{"class":550},[544,1144,1118],{"class":1145},"s2Zo4",[544,1147,1148],{"class":590},"()\n",[544,1150,1151],{"class":546,"line":653},[544,1152,623],{"emptyLinePlaceholder":622},[544,1154,1155,1157,1160,1162],{"class":546,"line":698},[544,1156,1137],{"class":558},[544,1158,1159],{"class":590}," customShader ",[544,1161,565],{"class":550},[544,1163,1164],{"class":550}," {\n",[544,1166,1167,1170,1173],{"class":546,"line":708},[544,1168,1169],{"class":554},"  uniforms",[544,1171,1172],{"class":550},":",[544,1174,1164],{"class":550},[544,1176,1177,1180,1182,1184,1187,1189,1192],{"class":546,"line":713},[544,1178,1179],{"class":554},"    color",[544,1181,1172],{"class":550},[544,1183,587],{"class":550},[544,1185,1186],{"class":554}," value",[544,1188,1172],{"class":550},[544,1190,1191],{"class":550}," null",[544,1193,1194],{"class":550}," },\n",[544,1196,1197,1200,1202,1204,1206,1208,1210],{"class":546,"line":720},[544,1198,1199],{"class":554},"    tDiffuse",[544,1201,1172],{"class":550},[544,1203,587],{"class":550},[544,1205,1186],{"class":554},[544,1207,1172],{"class":550},[544,1209,1191],{"class":550},[544,1211,1194],{"class":550},[544,1213,1214,1217,1219,1221,1223,1225,1227],{"class":546,"line":756},[544,1215,1216],{"class":554},"    textureMatrix",[544,1218,1172],{"class":550},[544,1220,587],{"class":550},[544,1222,1186],{"class":554},[544,1224,1172],{"class":550},[544,1226,1191],{"class":550},[544,1228,1194],{"class":550},[544,1230,1231,1234,1236,1238,1240,1242,1245],{"class":546,"line":767},[544,1232,1233],{"class":554},"    time",[544,1235,1172],{"class":550},[544,1237,587],{"class":550},[544,1239,1186],{"class":554},[544,1241,1172],{"class":550},[544,1243,1244],{"class":675}," 0",[544,1246,1194],{"class":550},[544,1248,1249],{"class":546,"line":789},[544,1250,1251],{"class":550},"  },\n",[544,1253,1254,1257,1259,1262],{"class":546,"line":799},[544,1255,1256],{"class":554},"  vertexShader",[544,1258,1172],{"class":550},[544,1260,1261],{"class":716}," \u002F* glsl *\u002F",[544,1263,1264],{"class":550},"`\n",[544,1266,1267],{"class":546,"line":804},[544,1268,1269],{"class":571},"    uniform mat4 textureMatrix;\n",[544,1271,1272],{"class":546,"line":814},[544,1273,1274],{"class":571},"    varying vec4 vUv;\n",[544,1276,1277],{"class":546,"line":834},[544,1278,1279],{"class":571},"    varying vec2 vPos;\n",[544,1281,1282],{"class":546,"line":867},[544,1283,1284],{"class":571},"    void main() {\n",[544,1286,1287],{"class":546,"line":877},[544,1288,1289],{"class":571},"      vUv = textureMatrix * vec4(position, 1.0);\n",[544,1291,1292],{"class":546,"line":886},[544,1293,1294],{"class":571},"      vPos = position.xy;\n",[544,1296,1297],{"class":546,"line":896},[544,1298,1299],{"class":571},"      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n",[544,1301,1303,1306,1309],{"class":546,"line":1302},23,[544,1304,1305],{"class":571},"    }",[544,1307,1308],{"class":550},"`",[544,1310,1311],{"class":550},",\n",[544,1313,1315,1318,1320,1322],{"class":546,"line":1314},24,[544,1316,1317],{"class":554},"  fragmentShader",[544,1319,1172],{"class":550},[544,1321,1261],{"class":716},[544,1323,1264],{"class":550},[544,1325,1327],{"class":546,"line":1326},25,[544,1328,1329],{"class":571},"    uniform vec3 color;\n",[544,1331,1333],{"class":546,"line":1332},26,[544,1334,1335],{"class":571},"    uniform sampler2D tDiffuse;\n",[544,1337,1339],{"class":546,"line":1338},27,[544,1340,1341],{"class":571},"    uniform float time;\n",[544,1343,1345],{"class":546,"line":1344},28,[544,1346,1274],{"class":571},[544,1348,1350],{"class":546,"line":1349},29,[544,1351,1279],{"class":571},[544,1353,1355],{"class":546,"line":1354},30,[544,1356,1357],{"class":571},"    float blendOverlay(float base, float blend) {\n",[544,1359,1361],{"class":546,"line":1360},31,[544,1362,1363],{"class":571},"      return(base \u003C 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)));\n",[544,1365,1367],{"class":546,"line":1366},32,[544,1368,1369],{"class":571},"    }\n",[544,1371,1373],{"class":546,"line":1372},33,[544,1374,1375],{"class":571},"    vec3 blendOverlay(vec3 base, vec3 blend) {\n",[544,1377,1379],{"class":546,"line":1378},34,[544,1380,1381],{"class":571},"      return vec3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b));\n",[544,1383,1385],{"class":546,"line":1384},35,[544,1386,1369],{"class":571},[544,1388,1390],{"class":546,"line":1389},36,[544,1391,1284],{"class":571},[544,1393,1395],{"class":546,"line":1394},37,[544,1396,1397],{"class":571},"      float dist = length(vPos);\n",[544,1399,1401],{"class":546,"line":1400},38,[544,1402,1403],{"class":571},"      float wave = sin(dist * 6.0 - time * 4.0) * 0.02;\n",[544,1405,1407],{"class":546,"line":1406},39,[544,1408,1409],{"class":571},"      vec2 dir = dist > 0.001 ? normalize(vPos) : vec2(0.0);\n",[544,1411,1413],{"class":546,"line":1412},40,[544,1414,1415],{"class":571},"      vec4 distortedUv = vUv + vec4(dir * wave, 0.0, 0.0);\n",[544,1417,1419],{"class":546,"line":1418},41,[544,1420,1421],{"class":571},"      vec4 base = texture2DProj(tDiffuse, distortedUv);\n",[544,1423,1425],{"class":546,"line":1424},42,[544,1426,1427],{"class":571},"      gl_FragColor = vec4(blendOverlay(base.rgb, color), 1.0);\n",[544,1429,1431],{"class":546,"line":1430},43,[544,1432,1433],{"class":571},"      #include \u003Ctonemapping_fragment>\n",[544,1435,1437],{"class":546,"line":1436},44,[544,1438,1439],{"class":571},"      #include \u003Ccolorspace_fragment>\n",[544,1441,1443,1445,1447],{"class":546,"line":1442},45,[544,1444,1305],{"class":571},[544,1446,1308],{"class":550},[544,1448,1311],{"class":550},[544,1450,1452],{"class":546,"line":1451},46,[544,1453,1454],{"class":550},"}\n",[544,1456,1458],{"class":546,"line":1457},47,[544,1459,623],{"emptyLinePlaceholder":622},[544,1461,1463,1465,1467,1470,1473,1476,1478],{"class":546,"line":1462},48,[544,1464,1137],{"class":558},[544,1466,587],{"class":550},[544,1468,1469],{"class":590}," onBeforeRender ",[544,1471,1472],{"class":550},"}",[544,1474,1475],{"class":550}," =",[544,1477,1098],{"class":1145},[544,1479,1148],{"class":590},[544,1481,1483,1486,1489,1492,1496,1499,1502],{"class":546,"line":1482},49,[544,1484,1485],{"class":1145},"onBeforeRender",[544,1487,1488],{"class":590},"(",[544,1490,1491],{"class":550},"({",[544,1493,1495],{"class":1494},"sHdIc"," elapsed",[544,1497,1498],{"class":550}," })",[544,1500,1501],{"class":558}," =>",[544,1503,1164],{"class":550},[544,1505,1507,1510,1513,1515,1518,1521,1524,1527,1530,1532,1535,1537],{"class":546,"line":1506},50,[544,1508,1509],{"class":558},"  const",[544,1511,1512],{"class":590}," uniforms",[544,1514,1475],{"class":550},[544,1516,1517],{"class":590}," refractorRef",[544,1519,1520],{"class":550},".",[544,1522,1523],{"class":590},"value",[544,1525,1526],{"class":550},"?.",[544,1528,1529],{"class":590},"instance",[544,1531,1526],{"class":550},[544,1533,1534],{"class":590},"material",[544,1536,1526],{"class":550},[544,1538,1539],{"class":590},"uniforms\n",[544,1541,1543,1546,1549,1551,1553,1556,1559,1562,1564,1566,1568,1570,1572,1574,1576],{"class":546,"line":1542},51,[544,1544,1545],{"class":583},"  if",[544,1547,1548],{"class":554}," (",[544,1550,1038],{"class":590},[544,1552,1526],{"class":550},[544,1554,1555],{"class":590},"time",[544,1557,1558],{"class":554},") ",[544,1560,1561],{"class":550},"{",[544,1563,1512],{"class":590},[544,1565,1520],{"class":550},[544,1567,1555],{"class":590},[544,1569,1520],{"class":550},[544,1571,1523],{"class":590},[544,1573,1475],{"class":550},[544,1575,1495],{"class":590},[544,1577,1578],{"class":550}," }\n",[544,1580,1582,1584],{"class":546,"line":1581},52,[544,1583,1472],{"class":550},[544,1585,1586],{"class":590},")\n",[544,1588,1590,1592,1594],{"class":546,"line":1589},53,[544,1591,612],{"class":550},[544,1593,555],{"class":554},[544,1595,577],{"class":550},[544,1597,1599],{"class":546,"line":1598},54,[544,1600,623],{"emptyLinePlaceholder":622},[544,1602,1604,1606,1608],{"class":546,"line":1603},55,[544,1605,551],{"class":550},[544,1607,631],{"class":554},[544,1609,577],{"class":550},[544,1611,1613,1615],{"class":546,"line":1612},56,[544,1614,639],{"class":550},[544,1616,1617],{"class":554},"Refractor\n",[544,1619,1621,1624,1626,1628,1631],{"class":546,"line":1620},57,[544,1622,1623],{"class":558},"    ref",[544,1625,565],{"class":550},[544,1627,568],{"class":550},[544,1629,1630],{"class":571},"refractorRef",[544,1632,1633],{"class":550},"\"\n",[544,1635,1637,1639,1641,1643,1645],{"class":546,"line":1636},58,[544,1638,1179],{"class":558},[544,1640,565],{"class":550},[544,1642,568],{"class":550},[544,1644,827],{"class":571},[544,1646,1633],{"class":550},[544,1648,1650,1653,1655,1657,1659,1662],{"class":546,"line":1649},59,[544,1651,1652],{"class":550},"    :",[544,1654,1011],{"class":558},[544,1656,565],{"class":550},[544,1658,568],{"class":550},[544,1660,1661],{"class":590},"customShader",[544,1663,1633],{"class":550},[544,1665,1667],{"class":546,"line":1666},60,[544,1668,1669],{"class":550},"  >\n",[544,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697],{"class":546,"line":1672},61,[544,1674,656],{"class":550},[544,1676,840],{"class":554},[544,1678,662],{"class":550},[544,1680,845],{"class":558},[544,1682,565],{"class":550},[544,1684,568],{"class":550},[544,1686,672],{"class":550},[544,1688,687],{"class":675},[544,1690,679],{"class":550},[544,1692,858],{"class":675},[544,1694,690],{"class":550},[544,1696,568],{"class":550},[544,1698,695],{"class":550},[544,1700,1702,1704,1706],{"class":546,"line":1701},62,[544,1703,889],{"class":550},[544,1705,457],{"class":554},[544,1707,577],{"class":550},[544,1709,1711,1713,1715],{"class":546,"line":1710},63,[544,1712,612],{"class":550},[544,1714,631],{"class":554},[544,1716,577],{"class":550},[510,1718,1719],{},"The Refractor shader uses the following configuration by default:",[1721,1722,1724],"h3",{"id":1723},"default-shader","Default shader",[535,1726,1730],{"className":1727,"code":1728,"language":1729,"meta":540,"style":540},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const shader = {\n  uniforms: {\n    color: {\n      value: null\n    },\n    tDiffuse: {\n      value: null\n    },\n    textureMatrix: {\n      value: null\n    }\n  },\n  vertexShader: \u002F* glsl *\u002F`\n    uniform mat4 textureMatrix;\n    varying vec4 vUv;\n\n    void main() {\n      vUv = textureMatrix * vec4( position, 1.0 );\n      gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n    }`,\n  fragmentShader: \u002F* glsl *\u002F`\n    uniform vec3 color;\n    uniform sampler2D tDiffuse;\n    varying vec4 vUv;\n\n    float blendOverlay( float base, float blend ) {\n      return( base \u003C 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n    }\n\n    vec3 blendOverlay( vec3 base, vec3 blend ) {\n      return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n    }\n\n    void main() {\n      vec4 base = texture2DProj( tDiffuse, vUv );\n      gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n      #include \u003Ctonemapping_fragment>\n      #include \u003Ccolorspace_fragment>\n    }`\n}\n","js",[514,1731,1732,1743,1751,1759,1769,1774,1782,1790,1794,1802,1810,1814,1818,1828,1832,1836,1840,1844,1849,1854,1862,1872,1876,1880,1884,1888,1893,1898,1902,1906,1911,1916,1920,1924,1928,1933,1938,1942,1946,1950,1956],{"__ignoreMap":540},[544,1733,1734,1736,1739,1741],{"class":546,"line":547},[544,1735,1137],{"class":558},[544,1737,1738],{"class":590}," shader ",[544,1740,565],{"class":550},[544,1742,1164],{"class":550},[544,1744,1745,1747,1749],{"class":546,"line":580},[544,1746,1169],{"class":554},[544,1748,1172],{"class":550},[544,1750,1164],{"class":550},[544,1752,1753,1755,1757],{"class":546,"line":609},[544,1754,1179],{"class":554},[544,1756,1172],{"class":550},[544,1758,1164],{"class":550},[544,1760,1761,1764,1766],{"class":546,"line":619},[544,1762,1763],{"class":554},"      value",[544,1765,1172],{"class":550},[544,1767,1768],{"class":550}," null\n",[544,1770,1771],{"class":546,"line":626},[544,1772,1773],{"class":550},"    },\n",[544,1775,1776,1778,1780],{"class":546,"line":636},[544,1777,1199],{"class":554},[544,1779,1172],{"class":550},[544,1781,1164],{"class":550},[544,1783,1784,1786,1788],{"class":546,"line":653},[544,1785,1763],{"class":554},[544,1787,1172],{"class":550},[544,1789,1768],{"class":550},[544,1791,1792],{"class":546,"line":698},[544,1793,1773],{"class":550},[544,1795,1796,1798,1800],{"class":546,"line":708},[544,1797,1216],{"class":554},[544,1799,1172],{"class":550},[544,1801,1164],{"class":550},[544,1803,1804,1806,1808],{"class":546,"line":713},[544,1805,1763],{"class":554},[544,1807,1172],{"class":550},[544,1809,1768],{"class":550},[544,1811,1812],{"class":546,"line":720},[544,1813,1369],{"class":550},[544,1815,1816],{"class":546,"line":756},[544,1817,1251],{"class":550},[544,1819,1820,1822,1824,1826],{"class":546,"line":767},[544,1821,1256],{"class":554},[544,1823,1172],{"class":550},[544,1825,1261],{"class":716},[544,1827,1264],{"class":550},[544,1829,1830],{"class":546,"line":789},[544,1831,1269],{"class":571},[544,1833,1834],{"class":546,"line":799},[544,1835,1274],{"class":571},[544,1837,1838],{"class":546,"line":804},[544,1839,623],{"emptyLinePlaceholder":622},[544,1841,1842],{"class":546,"line":814},[544,1843,1284],{"class":571},[544,1845,1846],{"class":546,"line":834},[544,1847,1848],{"class":571},"      vUv = textureMatrix * vec4( position, 1.0 );\n",[544,1850,1851],{"class":546,"line":867},[544,1852,1853],{"class":571},"      gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n",[544,1855,1856,1858,1860],{"class":546,"line":877},[544,1857,1305],{"class":571},[544,1859,1308],{"class":550},[544,1861,1311],{"class":550},[544,1863,1864,1866,1868,1870],{"class":546,"line":886},[544,1865,1317],{"class":554},[544,1867,1172],{"class":550},[544,1869,1261],{"class":716},[544,1871,1264],{"class":550},[544,1873,1874],{"class":546,"line":896},[544,1875,1329],{"class":571},[544,1877,1878],{"class":546,"line":1302},[544,1879,1335],{"class":571},[544,1881,1882],{"class":546,"line":1314},[544,1883,1274],{"class":571},[544,1885,1886],{"class":546,"line":1326},[544,1887,623],{"emptyLinePlaceholder":622},[544,1889,1890],{"class":546,"line":1332},[544,1891,1892],{"class":571},"    float blendOverlay( float base, float blend ) {\n",[544,1894,1895],{"class":546,"line":1338},[544,1896,1897],{"class":571},"      return( base \u003C 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n",[544,1899,1900],{"class":546,"line":1344},[544,1901,1369],{"class":571},[544,1903,1904],{"class":546,"line":1349},[544,1905,623],{"emptyLinePlaceholder":622},[544,1907,1908],{"class":546,"line":1354},[544,1909,1910],{"class":571},"    vec3 blendOverlay( vec3 base, vec3 blend ) {\n",[544,1912,1913],{"class":546,"line":1360},[544,1914,1915],{"class":571},"      return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n",[544,1917,1918],{"class":546,"line":1366},[544,1919,1369],{"class":571},[544,1921,1922],{"class":546,"line":1372},[544,1923,623],{"emptyLinePlaceholder":622},[544,1925,1926],{"class":546,"line":1378},[544,1927,1284],{"class":571},[544,1929,1930],{"class":546,"line":1384},[544,1931,1932],{"class":571},"      vec4 base = texture2DProj( tDiffuse, vUv );\n",[544,1934,1935],{"class":546,"line":1389},[544,1936,1937],{"class":571},"      gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n",[544,1939,1940],{"class":546,"line":1394},[544,1941,623],{"emptyLinePlaceholder":622},[544,1943,1944],{"class":546,"line":1400},[544,1945,1433],{"class":571},[544,1947,1948],{"class":546,"line":1406},[544,1949,1439],{"class":571},[544,1951,1952,1954],{"class":546,"line":1412},[544,1953,1305],{"class":571},[544,1955,1264],{"class":550},[544,1957,1958],{"class":546,"line":1418},[544,1959,1454],{"class":550},[1961,1962,1963],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":540,"searchDepth":547,"depth":580,"links":1965},[1966,1967,1968],{"id":533,"depth":580,"text":15},{"id":905,"depth":580,"text":906},{"id":1031,"depth":580,"text":1032,"children":1969},[1970],{"id":1723,"depth":609,"text":1724},"Create real-time refractive (glass-like) surfaces in your scene.","md",null,{},{"title":457,"description":1971},"0S_zvDpr4VfCZrIb3n88oUTHkrLHsw7pJnIv_3ITHzM",[1978,1980],{"title":453,"path":454,"stem":455,"description":1979,"children":-1},"Create real-time reflections of your scene.",{"title":461,"path":462,"stem":463,"description":1981,"children":-1},"Render text in 3D using TextGeometry.",1791549576218]