[{"data":1,"prerenderedAt":2083},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fobjects\u002Freflector":498,"\u002Fapi\u002Fobjects\u002Freflector-surround":2078},[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":453,"body":500,"description":2072,"extension":2073,"links":2074,"meta":2075,"navigation":622,"path":454,"seo":2076,"stem":455,"__hash__":2077},"docs\u002F2.api\u002F9.objects\u002Freflector.md",{"type":501,"value":502,"toc":2065},"minimark",[503,509,530,534,886,890,991,1000,1004,1018,1740,1743,1746,1751,2061],[504,505,506],"scene-controls-wrapper",{},[507,508],"objects-reflector",{},[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\u002FReflector.js",[523],"nofollow","Reflector class",", which creates a Mesh showing a real-time reflection of your scene.  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 { Reflector } from '@tresjs\u002Fcientos'\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CTresCanvas shadows alpha>\n    \u003CTresPerspectiveCamera :position=\"[0, 0, 3]\" \u002F>\n    \u003COrbitControls \u002F>\n\n    \u003CSuspense>\n      \u003CReflector\n        :rotation=\"[-Math.PI * 0.5, 0, 0]\"\n        :position-y=\"-2\"\n        color=\"#fff\"\n      >\n        \u003CTresCircleGeometry :args=\"[10, 10]\" \u002F>\n      \u003C\u002FReflector>\n    \u003C\u002FSuspense>\n  \u003C\u002FTresCanvas>\n\u003C\u002Ftemplate>\n","vue","",[514,542,543,578,607,617,624,634,651,695,705,710,720,729,773,793,808,814,847,857,867,877],{"__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"," Reflector",[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,682,684,687,690,692],{"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,676],{"class":675},[544,683,679],{"class":550},[544,685,686],{"class":675},"3",[544,688,689],{"class":550},"]",[544,691,568],{"class":550},[544,693,694],{"class":550}," \u002F>\n",[544,696,698,700,703],{"class":546,"line":697},8,[544,699,656],{"class":550},[544,701,702],{"class":554},"OrbitControls",[544,704,694],{"class":550},[544,706,708],{"class":546,"line":707},9,[544,709,623],{"emptyLinePlaceholder":622},[544,711,713,715,718],{"class":546,"line":712},10,[544,714,656],{"class":550},[544,716,717],{"class":554},"Suspense",[544,719,577],{"class":550},[544,721,723,726],{"class":546,"line":722},11,[544,724,725],{"class":550},"      \u003C",[544,727,728],{"class":554},"Reflector\n",[544,730,732,735,738,740,742,745,748,751,754,757,760,762,764,766,768,770],{"class":546,"line":731},12,[544,733,734],{"class":550},"        :",[544,736,737],{"class":558},"rotation",[544,739,565],{"class":550},[544,741,568],{"class":550},[544,743,744],{"class":550},"[-",[544,746,747],{"class":590},"Math",[544,749,750],{"class":550},".",[544,752,753],{"class":590},"PI",[544,755,756],{"class":550}," * ",[544,758,759],{"class":675},"0.5",[544,761,679],{"class":550},[544,763,676],{"class":675},[544,765,679],{"class":550},[544,767,676],{"class":675},[544,769,689],{"class":550},[544,771,772],{"class":550},"\"\n",[544,774,776,778,781,783,785,788,791],{"class":546,"line":775},13,[544,777,734],{"class":550},[544,779,780],{"class":558},"position-y",[544,782,565],{"class":550},[544,784,568],{"class":550},[544,786,787],{"class":550},"-",[544,789,790],{"class":675},"2",[544,792,772],{"class":550},[544,794,796,799,801,803,806],{"class":546,"line":795},14,[544,797,798],{"class":558},"        color",[544,800,565],{"class":550},[544,802,568],{"class":550},[544,804,805],{"class":571},"#fff",[544,807,772],{"class":550},[544,809,811],{"class":546,"line":810},15,[544,812,813],{"class":550},"      >\n",[544,815,817,820,823,825,828,830,832,834,837,839,841,843,845],{"class":546,"line":816},16,[544,818,819],{"class":550},"        \u003C",[544,821,822],{"class":554},"TresCircleGeometry",[544,824,662],{"class":550},[544,826,827],{"class":558},"args",[544,829,565],{"class":550},[544,831,568],{"class":550},[544,833,672],{"class":550},[544,835,836],{"class":675},"10",[544,838,679],{"class":550},[544,840,836],{"class":675},[544,842,689],{"class":550},[544,844,568],{"class":550},[544,846,694],{"class":550},[544,848,850,853,855],{"class":546,"line":849},17,[544,851,852],{"class":550},"      \u003C\u002F",[544,854,453],{"class":554},[544,856,577],{"class":550},[544,858,860,863,865],{"class":546,"line":859},18,[544,861,862],{"class":550},"    \u003C\u002F",[544,864,717],{"class":554},[544,866,577],{"class":550},[544,868,870,873,875],{"class":546,"line":869},19,[544,871,872],{"class":550},"  \u003C\u002F",[544,874,642],{"class":554},[544,876,577],{"class":550},[544,878,880,882,884],{"class":546,"line":879},20,[544,881,612],{"class":550},[544,883,631],{"class":554},[544,885,577],{"class":550},[531,887,889],{"id":888},"props","Props",[891,892,893,910],"table",{},[894,895,896],"thead",{},[897,898,899,904,907],"tr",{},[900,901,903],"th",{"align":902},"left","Prop",[900,905,906],{"align":902},"Description",[900,908,909],{},"Default",[911,912,913,928,941,953,965,978],"tbody",{},[897,914,915,922,925],{},[916,917,918],"td",{"align":902},[919,920,921],"strong",{},"color",[916,923,924],{"align":902},"The base color that's combine with the mirror effect",[916,926,927],{},"'#333'",[897,929,930,935,938],{},[916,931,932],{"align":902},[919,933,934],{},"textureWidth",[916,936,937],{"align":902},"the width of the texture to render on the mirror",[916,939,940],{},"512",[897,942,943,948,951],{},[916,944,945],{"align":902},[919,946,947],{},"textureHeight",[916,949,950],{"align":902},"the height of the texture to render on the mirror",[916,952,940],{},[897,954,955,960,963],{},[916,956,957],{"align":902},[919,958,959],{},"clipBias",[916,961,962],{"align":902},"to use the clipBias property",[916,964,676],{},[897,966,967,972,975],{},[916,968,969],{"align":902},[919,970,971],{},"multisample",[916,973,974],{"align":902},"how many samplers will be render",[916,976,977],{},"4",[897,979,980,985,988],{},[916,981,982],{"align":902},[919,983,984],{},"shader",[916,986,987],{"align":902},"The texture of the smoke.",[916,989,990],{},"Reflector.ReflectorShader",[992,993,994],"prose-warning",{},[510,995,996,997,999],{},"All the props except the ",[514,998,921],{},", are not reactive",[531,1001,1003],{"id":1002},"custom-mirror-effect","Custom mirror effect",[510,1005,1006,1007,679,1010,1013,1014,1017],{},"You can provide your own shader by passing a full shader object with ",[514,1008,1009],{},"uniforms",[514,1011,1012],{},"vertexShader",", and ",[514,1015,1016],{},"fragmentShader",". The example below adds animated circular ripples emanating from the center of the surface, while preserving the color tint:",[535,1019,1021],{"className":537,"code":1020,"language":539,"meta":540,"style":540},"\u003Cscript setup lang=\"ts\">\nimport { Reflector } from '@tresjs\u002Fcientos'\nimport { useLoop } from '@tresjs\u002Fcore'\nimport { shallowRef } from 'vue'\n\nconst reflectorRef = 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 = reflectorRef.value?.instance?.material?.uniforms\n  if (uniforms?.time) { uniforms.time.value = elapsed }\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CReflector\n    ref=\"reflectorRef\"\n    :rotation=\"[-Math.PI * 0.5, 0, 0]\"\n    :position-y=\"-2\"\n    color=\"#fff\"\n    :shader=\"customShader\"\n  >\n    \u003CTresCircleGeometry :args=\"[10, 10]\" \u002F>\n  \u003C\u002FReflector>\n\u003C\u002Ftemplate>\n",[514,1022,1023,1043,1061,1081,1100,1104,1120,1124,1136,1146,1166,1183,1200,1218,1223,1237,1242,1247,1252,1257,1262,1268,1274,1286,1298,1304,1310,1316,1321,1326,1332,1338,1344,1350,1356,1361,1366,1372,1378,1384,1390,1396,1402,1408,1414,1423,1429,1434,1454,1478,1513,1552,1560,1569,1574,1583,1590,1605,1641,1658,1671,1687,1693,1722,1731],{"__ignoreMap":540},[544,1024,1025,1027,1029,1031,1033,1035,1037,1039,1041],{"class":546,"line":547},[544,1026,551],{"class":550},[544,1028,555],{"class":554},[544,1030,559],{"class":558},[544,1032,562],{"class":558},[544,1034,565],{"class":550},[544,1036,568],{"class":550},[544,1038,572],{"class":571},[544,1040,568],{"class":550},[544,1042,577],{"class":550},[544,1044,1045,1047,1049,1051,1053,1055,1057,1059],{"class":546,"line":580},[544,1046,584],{"class":583},[544,1048,587],{"class":550},[544,1050,591],{"class":590},[544,1052,594],{"class":550},[544,1054,597],{"class":583},[544,1056,600],{"class":550},[544,1058,603],{"class":571},[544,1060,606],{"class":550},[544,1062,1063,1065,1067,1070,1072,1074,1076,1079],{"class":546,"line":609},[544,1064,584],{"class":583},[544,1066,587],{"class":550},[544,1068,1069],{"class":590}," useLoop",[544,1071,594],{"class":550},[544,1073,597],{"class":583},[544,1075,600],{"class":550},[544,1077,1078],{"class":571},"@tresjs\u002Fcore",[544,1080,606],{"class":550},[544,1082,1083,1085,1087,1090,1092,1094,1096,1098],{"class":546,"line":619},[544,1084,584],{"class":583},[544,1086,587],{"class":550},[544,1088,1089],{"class":590}," shallowRef",[544,1091,594],{"class":550},[544,1093,597],{"class":583},[544,1095,600],{"class":550},[544,1097,539],{"class":571},[544,1099,606],{"class":550},[544,1101,1102],{"class":546,"line":626},[544,1103,623],{"emptyLinePlaceholder":622},[544,1105,1106,1109,1112,1114,1117],{"class":546,"line":636},[544,1107,1108],{"class":558},"const",[544,1110,1111],{"class":590}," reflectorRef ",[544,1113,565],{"class":550},[544,1115,1089],{"class":1116},"s2Zo4",[544,1118,1119],{"class":590},"()\n",[544,1121,1122],{"class":546,"line":653},[544,1123,623],{"emptyLinePlaceholder":622},[544,1125,1126,1128,1131,1133],{"class":546,"line":697},[544,1127,1108],{"class":558},[544,1129,1130],{"class":590}," customShader ",[544,1132,565],{"class":550},[544,1134,1135],{"class":550}," {\n",[544,1137,1138,1141,1144],{"class":546,"line":707},[544,1139,1140],{"class":554},"  uniforms",[544,1142,1143],{"class":550},":",[544,1145,1135],{"class":550},[544,1147,1148,1151,1153,1155,1158,1160,1163],{"class":546,"line":712},[544,1149,1150],{"class":554},"    color",[544,1152,1143],{"class":550},[544,1154,587],{"class":550},[544,1156,1157],{"class":554}," value",[544,1159,1143],{"class":550},[544,1161,1162],{"class":550}," null",[544,1164,1165],{"class":550}," },\n",[544,1167,1168,1171,1173,1175,1177,1179,1181],{"class":546,"line":722},[544,1169,1170],{"class":554},"    tDiffuse",[544,1172,1143],{"class":550},[544,1174,587],{"class":550},[544,1176,1157],{"class":554},[544,1178,1143],{"class":550},[544,1180,1162],{"class":550},[544,1182,1165],{"class":550},[544,1184,1185,1188,1190,1192,1194,1196,1198],{"class":546,"line":731},[544,1186,1187],{"class":554},"    textureMatrix",[544,1189,1143],{"class":550},[544,1191,587],{"class":550},[544,1193,1157],{"class":554},[544,1195,1143],{"class":550},[544,1197,1162],{"class":550},[544,1199,1165],{"class":550},[544,1201,1202,1205,1207,1209,1211,1213,1216],{"class":546,"line":775},[544,1203,1204],{"class":554},"    time",[544,1206,1143],{"class":550},[544,1208,587],{"class":550},[544,1210,1157],{"class":554},[544,1212,1143],{"class":550},[544,1214,1215],{"class":675}," 0",[544,1217,1165],{"class":550},[544,1219,1220],{"class":546,"line":795},[544,1221,1222],{"class":550},"  },\n",[544,1224,1225,1228,1230,1234],{"class":546,"line":810},[544,1226,1227],{"class":554},"  vertexShader",[544,1229,1143],{"class":550},[544,1231,1233],{"class":1232},"sHwdD"," \u002F* glsl *\u002F",[544,1235,1236],{"class":550},"`\n",[544,1238,1239],{"class":546,"line":816},[544,1240,1241],{"class":571},"    uniform mat4 textureMatrix;\n",[544,1243,1244],{"class":546,"line":849},[544,1245,1246],{"class":571},"    varying vec4 vUv;\n",[544,1248,1249],{"class":546,"line":859},[544,1250,1251],{"class":571},"    varying vec2 vPos;\n",[544,1253,1254],{"class":546,"line":869},[544,1255,1256],{"class":571},"    void main() {\n",[544,1258,1259],{"class":546,"line":879},[544,1260,1261],{"class":571},"      vUv = textureMatrix * vec4(position, 1.0);\n",[544,1263,1265],{"class":546,"line":1264},21,[544,1266,1267],{"class":571},"      vPos = position.xy;\n",[544,1269,1271],{"class":546,"line":1270},22,[544,1272,1273],{"class":571},"      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n",[544,1275,1277,1280,1283],{"class":546,"line":1276},23,[544,1278,1279],{"class":571},"    }",[544,1281,1282],{"class":550},"`",[544,1284,1285],{"class":550},",\n",[544,1287,1289,1292,1294,1296],{"class":546,"line":1288},24,[544,1290,1291],{"class":554},"  fragmentShader",[544,1293,1143],{"class":550},[544,1295,1233],{"class":1232},[544,1297,1236],{"class":550},[544,1299,1301],{"class":546,"line":1300},25,[544,1302,1303],{"class":571},"    uniform vec3 color;\n",[544,1305,1307],{"class":546,"line":1306},26,[544,1308,1309],{"class":571},"    uniform sampler2D tDiffuse;\n",[544,1311,1313],{"class":546,"line":1312},27,[544,1314,1315],{"class":571},"    uniform float time;\n",[544,1317,1319],{"class":546,"line":1318},28,[544,1320,1246],{"class":571},[544,1322,1324],{"class":546,"line":1323},29,[544,1325,1251],{"class":571},[544,1327,1329],{"class":546,"line":1328},30,[544,1330,1331],{"class":571},"    float blendOverlay(float base, float blend) {\n",[544,1333,1335],{"class":546,"line":1334},31,[544,1336,1337],{"class":571},"      return(base \u003C 0.5 ? (2.0 * base * blend) : (1.0 - 2.0 * (1.0 - base) * (1.0 - blend)));\n",[544,1339,1341],{"class":546,"line":1340},32,[544,1342,1343],{"class":571},"    }\n",[544,1345,1347],{"class":546,"line":1346},33,[544,1348,1349],{"class":571},"    vec3 blendOverlay(vec3 base, vec3 blend) {\n",[544,1351,1353],{"class":546,"line":1352},34,[544,1354,1355],{"class":571},"      return vec3(blendOverlay(base.r, blend.r), blendOverlay(base.g, blend.g), blendOverlay(base.b, blend.b));\n",[544,1357,1359],{"class":546,"line":1358},35,[544,1360,1343],{"class":571},[544,1362,1364],{"class":546,"line":1363},36,[544,1365,1256],{"class":571},[544,1367,1369],{"class":546,"line":1368},37,[544,1370,1371],{"class":571},"      float dist = length(vPos);\n",[544,1373,1375],{"class":546,"line":1374},38,[544,1376,1377],{"class":571},"      float wave = sin(dist * 6.0 - time * 4.0) * 0.02;\n",[544,1379,1381],{"class":546,"line":1380},39,[544,1382,1383],{"class":571},"      vec2 dir = dist > 0.001 ? normalize(vPos) : vec2(0.0);\n",[544,1385,1387],{"class":546,"line":1386},40,[544,1388,1389],{"class":571},"      vec4 distortedUv = vUv + vec4(dir * wave, 0.0, 0.0);\n",[544,1391,1393],{"class":546,"line":1392},41,[544,1394,1395],{"class":571},"      vec4 base = texture2DProj(tDiffuse, distortedUv);\n",[544,1397,1399],{"class":546,"line":1398},42,[544,1400,1401],{"class":571},"      gl_FragColor = vec4(blendOverlay(base.rgb, color), 1.0);\n",[544,1403,1405],{"class":546,"line":1404},43,[544,1406,1407],{"class":571},"      #include \u003Ctonemapping_fragment>\n",[544,1409,1411],{"class":546,"line":1410},44,[544,1412,1413],{"class":571},"      #include \u003Ccolorspace_fragment>\n",[544,1415,1417,1419,1421],{"class":546,"line":1416},45,[544,1418,1279],{"class":571},[544,1420,1282],{"class":550},[544,1422,1285],{"class":550},[544,1424,1426],{"class":546,"line":1425},46,[544,1427,1428],{"class":550},"}\n",[544,1430,1432],{"class":546,"line":1431},47,[544,1433,623],{"emptyLinePlaceholder":622},[544,1435,1437,1439,1441,1444,1447,1450,1452],{"class":546,"line":1436},48,[544,1438,1108],{"class":558},[544,1440,587],{"class":550},[544,1442,1443],{"class":590}," onBeforeRender ",[544,1445,1446],{"class":550},"}",[544,1448,1449],{"class":550}," =",[544,1451,1069],{"class":1116},[544,1453,1119],{"class":590},[544,1455,1457,1460,1463,1466,1470,1473,1476],{"class":546,"line":1456},49,[544,1458,1459],{"class":1116},"onBeforeRender",[544,1461,1462],{"class":590},"(",[544,1464,1465],{"class":550},"({",[544,1467,1469],{"class":1468},"sHdIc"," elapsed",[544,1471,1472],{"class":550}," })",[544,1474,1475],{"class":558}," =>",[544,1477,1135],{"class":550},[544,1479,1481,1484,1487,1489,1492,1494,1497,1500,1503,1505,1508,1510],{"class":546,"line":1480},50,[544,1482,1483],{"class":558},"  const",[544,1485,1486],{"class":590}," uniforms",[544,1488,1449],{"class":550},[544,1490,1491],{"class":590}," reflectorRef",[544,1493,750],{"class":550},[544,1495,1496],{"class":590},"value",[544,1498,1499],{"class":550},"?.",[544,1501,1502],{"class":590},"instance",[544,1504,1499],{"class":550},[544,1506,1507],{"class":590},"material",[544,1509,1499],{"class":550},[544,1511,1512],{"class":590},"uniforms\n",[544,1514,1516,1519,1522,1524,1526,1529,1532,1535,1537,1539,1541,1543,1545,1547,1549],{"class":546,"line":1515},51,[544,1517,1518],{"class":583},"  if",[544,1520,1521],{"class":554}," (",[544,1523,1009],{"class":590},[544,1525,1499],{"class":550},[544,1527,1528],{"class":590},"time",[544,1530,1531],{"class":554},") ",[544,1533,1534],{"class":550},"{",[544,1536,1486],{"class":590},[544,1538,750],{"class":550},[544,1540,1528],{"class":590},[544,1542,750],{"class":550},[544,1544,1496],{"class":590},[544,1546,1449],{"class":550},[544,1548,1469],{"class":590},[544,1550,1551],{"class":550}," }\n",[544,1553,1555,1557],{"class":546,"line":1554},52,[544,1556,1446],{"class":550},[544,1558,1559],{"class":590},")\n",[544,1561,1563,1565,1567],{"class":546,"line":1562},53,[544,1564,612],{"class":550},[544,1566,555],{"class":554},[544,1568,577],{"class":550},[544,1570,1572],{"class":546,"line":1571},54,[544,1573,623],{"emptyLinePlaceholder":622},[544,1575,1577,1579,1581],{"class":546,"line":1576},55,[544,1578,551],{"class":550},[544,1580,631],{"class":554},[544,1582,577],{"class":550},[544,1584,1586,1588],{"class":546,"line":1585},56,[544,1587,639],{"class":550},[544,1589,728],{"class":554},[544,1591,1593,1596,1598,1600,1603],{"class":546,"line":1592},57,[544,1594,1595],{"class":558},"    ref",[544,1597,565],{"class":550},[544,1599,568],{"class":550},[544,1601,1602],{"class":571},"reflectorRef",[544,1604,772],{"class":550},[544,1606,1608,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639],{"class":546,"line":1607},58,[544,1609,1610],{"class":550},"    :",[544,1612,737],{"class":558},[544,1614,565],{"class":550},[544,1616,568],{"class":550},[544,1618,744],{"class":550},[544,1620,747],{"class":590},[544,1622,750],{"class":550},[544,1624,753],{"class":590},[544,1626,756],{"class":550},[544,1628,759],{"class":675},[544,1630,679],{"class":550},[544,1632,676],{"class":675},[544,1634,679],{"class":550},[544,1636,676],{"class":675},[544,1638,689],{"class":550},[544,1640,772],{"class":550},[544,1642,1644,1646,1648,1650,1652,1654,1656],{"class":546,"line":1643},59,[544,1645,1610],{"class":550},[544,1647,780],{"class":558},[544,1649,565],{"class":550},[544,1651,568],{"class":550},[544,1653,787],{"class":550},[544,1655,790],{"class":675},[544,1657,772],{"class":550},[544,1659,1661,1663,1665,1667,1669],{"class":546,"line":1660},60,[544,1662,1150],{"class":558},[544,1664,565],{"class":550},[544,1666,568],{"class":550},[544,1668,805],{"class":571},[544,1670,772],{"class":550},[544,1672,1674,1676,1678,1680,1682,1685],{"class":546,"line":1673},61,[544,1675,1610],{"class":550},[544,1677,984],{"class":558},[544,1679,565],{"class":550},[544,1681,568],{"class":550},[544,1683,1684],{"class":590},"customShader",[544,1686,772],{"class":550},[544,1688,1690],{"class":546,"line":1689},62,[544,1691,1692],{"class":550},"  >\n",[544,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720],{"class":546,"line":1695},63,[544,1697,656],{"class":550},[544,1699,822],{"class":554},[544,1701,662],{"class":550},[544,1703,827],{"class":558},[544,1705,565],{"class":550},[544,1707,568],{"class":550},[544,1709,672],{"class":550},[544,1711,836],{"class":675},[544,1713,679],{"class":550},[544,1715,836],{"class":675},[544,1717,689],{"class":550},[544,1719,568],{"class":550},[544,1721,694],{"class":550},[544,1723,1725,1727,1729],{"class":546,"line":1724},64,[544,1726,872],{"class":550},[544,1728,453],{"class":554},[544,1730,577],{"class":550},[544,1732,1734,1736,1738],{"class":546,"line":1733},65,[544,1735,612],{"class":550},[544,1737,631],{"class":554},[544,1739,577],{"class":550},[510,1741,1742],{},"The Reflector shader use the following configuration by default:",[510,1744,1745],{},"You can extend, modify or just play with them",[1747,1748,1750],"h3",{"id":1749},"default-shader","Default shader",[535,1752,1756],{"className":1753,"code":1754,"language":1755,"meta":540,"style":540},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const shader = {\n  name: 'ReflectorShader',\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  #include \u003Ccommon>\n  #include \u003Clogdepthbuf_pars_vertex>\n\n  void main() {\n    vUv = textureMatrix * vec4( position, 1.0 );\n    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n    #include \u003Clogdepthbuf_vertex>\n\n  }`,\n  fragmentShader: \u002F* glsl *\u002F`\n  uniform vec3 color;\n  uniform sampler2D tDiffuse;\n  varying vec4 vUv;\n\n  #include \u003Clogdepthbuf_pars_fragment>\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    #include \u003Clogdepthbuf_fragment>\n\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}\n","js",[514,1757,1758,1769,1786,1794,1802,1812,1817,1825,1833,1837,1845,1853,1857,1861,1871,1876,1881,1885,1890,1895,1899,1904,1909,1914,1918,1923,1927,1936,1946,1951,1956,1960,1964,1969,1973,1978,1983,1988,1992,1997,2002,2006,2010,2014,2019,2023,2028,2033,2037,2042,2047,2053,2057],{"__ignoreMap":540},[544,1759,1760,1762,1765,1767],{"class":546,"line":547},[544,1761,1108],{"class":558},[544,1763,1764],{"class":590}," shader ",[544,1766,565],{"class":550},[544,1768,1135],{"class":550},[544,1770,1771,1774,1776,1778,1781,1784],{"class":546,"line":580},[544,1772,1773],{"class":554},"  name",[544,1775,1143],{"class":550},[544,1777,600],{"class":550},[544,1779,1780],{"class":571},"ReflectorShader",[544,1782,1783],{"class":550},"'",[544,1785,1285],{"class":550},[544,1787,1788,1790,1792],{"class":546,"line":609},[544,1789,1140],{"class":554},[544,1791,1143],{"class":550},[544,1793,1135],{"class":550},[544,1795,1796,1798,1800],{"class":546,"line":619},[544,1797,1150],{"class":554},[544,1799,1143],{"class":550},[544,1801,1135],{"class":550},[544,1803,1804,1807,1809],{"class":546,"line":626},[544,1805,1806],{"class":554},"      value",[544,1808,1143],{"class":550},[544,1810,1811],{"class":550}," null\n",[544,1813,1814],{"class":546,"line":636},[544,1815,1816],{"class":550},"    },\n",[544,1818,1819,1821,1823],{"class":546,"line":653},[544,1820,1170],{"class":554},[544,1822,1143],{"class":550},[544,1824,1135],{"class":550},[544,1826,1827,1829,1831],{"class":546,"line":697},[544,1828,1806],{"class":554},[544,1830,1143],{"class":550},[544,1832,1811],{"class":550},[544,1834,1835],{"class":546,"line":707},[544,1836,1816],{"class":550},[544,1838,1839,1841,1843],{"class":546,"line":712},[544,1840,1187],{"class":554},[544,1842,1143],{"class":550},[544,1844,1135],{"class":550},[544,1846,1847,1849,1851],{"class":546,"line":722},[544,1848,1806],{"class":554},[544,1850,1143],{"class":550},[544,1852,1811],{"class":550},[544,1854,1855],{"class":546,"line":731},[544,1856,1343],{"class":550},[544,1858,1859],{"class":546,"line":775},[544,1860,1222],{"class":550},[544,1862,1863,1865,1867,1869],{"class":546,"line":795},[544,1864,1227],{"class":554},[544,1866,1143],{"class":550},[544,1868,1233],{"class":1232},[544,1870,1236],{"class":550},[544,1872,1873],{"class":546,"line":810},[544,1874,1875],{"class":571},"  uniform mat4 textureMatrix;\n",[544,1877,1878],{"class":546,"line":816},[544,1879,1880],{"class":571},"  varying vec4 vUv;\n",[544,1882,1883],{"class":546,"line":849},[544,1884,623],{"emptyLinePlaceholder":622},[544,1886,1887],{"class":546,"line":859},[544,1888,1889],{"class":571},"  #include \u003Ccommon>\n",[544,1891,1892],{"class":546,"line":869},[544,1893,1894],{"class":571},"  #include \u003Clogdepthbuf_pars_vertex>\n",[544,1896,1897],{"class":546,"line":879},[544,1898,623],{"emptyLinePlaceholder":622},[544,1900,1901],{"class":546,"line":1264},[544,1902,1903],{"class":571},"  void main() {\n",[544,1905,1906],{"class":546,"line":1270},[544,1907,1908],{"class":571},"    vUv = textureMatrix * vec4( position, 1.0 );\n",[544,1910,1911],{"class":546,"line":1276},[544,1912,1913],{"class":571},"    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n",[544,1915,1916],{"class":546,"line":1288},[544,1917,623],{"emptyLinePlaceholder":622},[544,1919,1920],{"class":546,"line":1300},[544,1921,1922],{"class":571},"    #include \u003Clogdepthbuf_vertex>\n",[544,1924,1925],{"class":546,"line":1306},[544,1926,623],{"emptyLinePlaceholder":622},[544,1928,1929,1932,1934],{"class":546,"line":1312},[544,1930,1931],{"class":571},"  }",[544,1933,1282],{"class":550},[544,1935,1285],{"class":550},[544,1937,1938,1940,1942,1944],{"class":546,"line":1318},[544,1939,1291],{"class":554},[544,1941,1143],{"class":550},[544,1943,1233],{"class":1232},[544,1945,1236],{"class":550},[544,1947,1948],{"class":546,"line":1323},[544,1949,1950],{"class":571},"  uniform vec3 color;\n",[544,1952,1953],{"class":546,"line":1328},[544,1954,1955],{"class":571},"  uniform sampler2D tDiffuse;\n",[544,1957,1958],{"class":546,"line":1334},[544,1959,1880],{"class":571},[544,1961,1962],{"class":546,"line":1340},[544,1963,623],{"emptyLinePlaceholder":622},[544,1965,1966],{"class":546,"line":1346},[544,1967,1968],{"class":571},"  #include \u003Clogdepthbuf_pars_fragment>\n",[544,1970,1971],{"class":546,"line":1352},[544,1972,623],{"emptyLinePlaceholder":622},[544,1974,1975],{"class":546,"line":1358},[544,1976,1977],{"class":571},"  float blendOverlay( float base, float blend ) {\n",[544,1979,1980],{"class":546,"line":1363},[544,1981,1982],{"class":571},"    return( base \u003C 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n",[544,1984,1985],{"class":546,"line":1368},[544,1986,1987],{"class":571},"  }\n",[544,1989,1990],{"class":546,"line":1374},[544,1991,623],{"emptyLinePlaceholder":622},[544,1993,1994],{"class":546,"line":1380},[544,1995,1996],{"class":571},"  vec3 blendOverlay( vec3 base, vec3 blend ) {\n",[544,1998,1999],{"class":546,"line":1386},[544,2000,2001],{"class":571},"    return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n",[544,2003,2004],{"class":546,"line":1392},[544,2005,1987],{"class":571},[544,2007,2008],{"class":546,"line":1398},[544,2009,623],{"emptyLinePlaceholder":622},[544,2011,2012],{"class":546,"line":1404},[544,2013,1903],{"class":571},[544,2015,2016],{"class":546,"line":1410},[544,2017,2018],{"class":571},"    #include \u003Clogdepthbuf_fragment>\n",[544,2020,2021],{"class":546,"line":1416},[544,2022,623],{"emptyLinePlaceholder":622},[544,2024,2025],{"class":546,"line":1425},[544,2026,2027],{"class":571},"    vec4 base = texture2DProj( tDiffuse, vUv );\n",[544,2029,2030],{"class":546,"line":1431},[544,2031,2032],{"class":571},"    gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n",[544,2034,2035],{"class":546,"line":1436},[544,2036,623],{"emptyLinePlaceholder":622},[544,2038,2039],{"class":546,"line":1456},[544,2040,2041],{"class":571},"    #include \u003Ctonemapping_fragment>\n",[544,2043,2044],{"class":546,"line":1480},[544,2045,2046],{"class":571},"    #include \u003Ccolorspace_fragment>\n",[544,2048,2049,2051],{"class":546,"line":1515},[544,2050,1931],{"class":571},[544,2052,1236],{"class":550},[544,2054,2055],{"class":546,"line":1554},[544,2056,623],{"emptyLinePlaceholder":622},[544,2058,2059],{"class":546,"line":1562},[544,2060,1428],{"class":550},[2062,2063,2064],"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 .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 .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 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":2066},[2067,2068,2069],{"id":533,"depth":580,"text":15},{"id":888,"depth":580,"text":889},{"id":1002,"depth":580,"text":1003,"children":2070},[2071],{"id":1749,"depth":609,"text":1750},"Create real-time reflections of your scene.","md",null,{},{"title":453,"description":2072},"hu0_cWNcLItstfep2oA3fWu44BIvehGORFbqaCgBRtM",[2079,2081],{"title":449,"path":450,"stem":451,"description":2080,"children":-1},"Create organic blob-like shapes using metaballs.",{"title":457,"path":458,"stem":459,"description":2082,"children":-1},"Create real-time refractive (glass-like) surfaces in your scene.",1791549576195]