Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.4.14"}},"root":{"type":"root","nodes":{"ground":{"type":"geo","nodes":{"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"SDFFractalMandelbrot1":{"type":"SDFFractalMandelbrot","params":{"position":{"overriden_options":{}},"center":{"raw_input":[0,0.31899999999999995,0],"overriden_options":{}},"power":{"overriden_options":{}},"QPreMult":{"overriden_options":{}},"QPostMult":{"overriden_options":{}},"thetaMult":{"overriden_options":{}},"iterations":{"overriden_options":{}},"externalBoundingRadius":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"},{"index":1,"inputName":"center","node":"floatToVec3_2","output":"vec3"}]},"SDFSphere1":{"type":"SDFSphere","params":{"position":{"overriden_options":{}},"center":{"overriden_options":{}},"radius":{"raw_input":0.52,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"},{"index":1,"inputName":"center","node":"floatToVec3_1","output":"vec3"}]},"SDFSphere2":{"type":"SDFSphere","params":{"position":{"overriden_options":{}},"center":{"raw_input":[1.1,0,0],"overriden_options":{}},"radius":{"raw_input":0.5,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"}]},"SDFUnion1":{"type":"SDFUnion","params":{"sdf0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"sdf1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"smoothFactor":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.32},"matBlendDist":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"sdf0","node":"SDFSphere2","output":"float"},{"index":1,"inputName":"sdf1","node":"SDFSphere1","output":"float"}],"connection_points":{"in":[{"name":"sdf0","type":"float"},{"name":"sdf1","type":"float"},{"name":"smoothFactor","type":"float"},{"name":"matBlendDist","type":"float"}],"out":[{"name":"union","type":"float"}]}},"SDFUnion2":{"type":"SDFUnion","params":{"sdf0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"sdf1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"smoothFactor":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.32},"matBlendDist":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"sdf0","node":"SDFUnion1","output":"union"},{"index":1,"inputName":"sdf1","node":"SDFFractalMandelbrot1","output":"d"}],"connection_points":{"in":[{"name":"sdf0","type":"float"},{"name":"sdf1","type":"float"},{"name":"smoothFactor","type":"float"},{"name":"matBlendDist","type":"float"}],"out":[{"name":"union","type":"float"}]}},"boolToInt1":{"type":"boolToInt","params":{"bool":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"bool","node":"compare1","output":"val"}]},"compare1":{"type":"compare","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"value1":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.001}},"inputs":[{"index":0,"inputName":"value0","node":"SDFUnion2","output":"union"}],"connection_points":{"in":[{"name":"value0","type":"float"},{"name":"value1","type":"float"}],"out":[{"name":"val","type":"bool"}]}},"constant1":{"type":"constant","params":{"type":4,"color":[0.24313725490196078,0.5098039215686274,0.8549019607843137],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.047058823529411764,0.10196078431372549,0.17647058823529413],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"multAdd2","output":"val"}]},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"multAdd4","output":"val"}]},"globals1":{"type":"globals"},"intToFloat1":{"type":"intToFloat","params":{"int":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"int","node":"boolToInt1","output":"int"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"value0","node":"constant1","output":"val"},{"index":1,"inputName":"value1","node":"constant2","output":"val"},{"index":2,"inputName":"blend","node":"intToFloat1","output":"float"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true},"raw_input":0.53},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"globals1","output":"time"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"sin1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd3":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.16},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true},"raw_input":0.33},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"globals1","output":"time"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd4":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"sin2","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"sin1":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}},"sin2":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd3","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}}},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/ground/MAT/meshStandardBuilder1","color":16711422,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"lights":{"type":"geo","nodes":{"areaLight1":{"type":"areaLight","params":{"intensity":4,"height":4.2,"showHelper":true}},"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.04}},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}},"merge2":{"type":"merge","inputs":["spotLight1","areaLight1"]},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":2.2},"inputs":["merge2"]},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":true},"flags":{"bypass":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0.6853981644707956,0.08989004691800284,0.024784332004161996]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"]},"merge1":{"type":"merge","inputs":["cameraControls1","orthographicCamera1"],"flags":{"display":true}},"orthographicCamera1":{"type":"orthographicCamera","params":{"size":3.6,"position":[0,1.7,0],"rotation":[-90,0,0]}},"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"ground":{"pos":[-50,-300],"nodes":{"MAT":{"pos":[-200,300],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"SDFFractalMandelbrot1":{"pos":[-500,-100]},"SDFSphere1":{"pos":[-500,-450]},"SDFSphere2":{"pos":[-500,-600]},"SDFUnion1":{"pos":[-350,-550]},"SDFUnion2":{"pos":[-250,-300]},"boolToInt1":{"pos":[0,-200]},"compare1":{"pos":[-100,-200]},"constant1":{"pos":[50,-450]},"constant2":{"pos":[0,-300]},"floatToVec3_1":{"pos":[-650,-250]},"floatToVec3_2":{"pos":[-700,150]},"globals1":{"pos":[-1200,-500]},"intToFloat1":{"pos":[100,-200]},"mix1":{"pos":[250,-300]},"multAdd1":{"pos":[-1000,-100]},"multAdd2":{"pos":[-800,-100]},"multAdd3":{"pos":[-1000,150]},"multAdd4":{"pos":[-800,150]},"output1":{"pos":[400,0]},"sin1":{"pos":[-900,-100]},"sin2":{"pos":[-900,150]}}}}},"box1":{"pos":[0,100]},"material1":{"pos":[0,300]}}},"lights":{"pos":[-50,-200],"selection":["areaLight1"],"nodes":{"areaLight1":{"pos":[550,-250]},"hemisphereLight1":{"pos":[50,-50]},"merge1":{"pos":[100,300]},"merge2":{"pos":[400,-50]},"polarTransform1":{"pos":[300,150]},"spotLight1":{"pos":[250,-250]}}},"cameras":{"pos":[-50,-100],"selection":["orthographicCamera1"],"nodes":{"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}},"merge1":{"pos":[100,350]},"orthographicCamera1":{"pos":[250,-50]},"perspectiveCamera1":{"pos":[0,-50]}}}}},"shaders":{"/ground/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}},"jsFunctionBodies":{}}
Code editor
{"multiple_panel":{"split_ratio":0.5,"split_panel0":{"split_ratio":0.5543217692883486,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/cameras/cameras:sopGroup/orthographicCamera1","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false,"initLayoutData":{"camera":{"position":{"x":400,"y":225},"zoom":1},"history":{"2":{"position":{"x":0,"y":0},"zoom":1},"36":{"position":{"x":100,"y":-200},"zoom":1},"89":{"position":{"x":100,"y":-200},"zoom":1},"145":{"position":{"x":-50,"y":50},"zoom":1},"195":{"position":{"x":0,"y":-200},"zoom":1},"198":{"position":{"x":0,"y":-50},"zoom":1},"378":{"position":{"x":0,"y":-200},"zoom":1},"396":{"position":{"x":25,"y":-25},"zoom":1}},"paramsDisplayed":false,"linkIndex":1}}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":400,"y":225},"zoom":0.4792221069335929},"history":{"2":{"position":{"x":38.089007428934735,"y":203.59310979070793},"zoom":1.0222221069335933},"36":{"position":{"x":100,"y":-200},"zoom":1.0222221069335933},"89":{"position":{"x":88.26086824125048,"y":-275.32609545197613},"zoom":1.0222221069335933},"145":{"position":{"x":-425.4565640840058,"y":-30.021748155475933},"zoom":1.135802341037326},"195":{"position":{"x":0,"y":-200},"zoom":1.0222221069335933},"198":{"position":{"x":-192.70254352755202,"y":-147.84056562279827},"zoom":1.0218023410373267},"227":{"position":{"x":400,"y":225},"zoom":0.4792221069335929},"378":{"position":{"x":0,"y":-200},"zoom":1.0222221069335933},"396":{"position":{"x":233.4019727251968,"y":143.25251684981006},"zoom":0.8002419407978513}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/ground/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":3,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":false,"checkRemoteAssetsUse":true,"minimizeFilesCount":false,"compressJs":true,"createZip":false,"runPostExportCommand":false},"paramsModal":[]}
Used nodes
event/cameraOrbitControls;mat/meshStandardBuilder;obj/geo;sop/areaLight;sop/box;sop/cameraControls;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/orthographicCamera;sop/perspectiveCamera;sop/polarTransform;sop/spotLight
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/ground":"obj/geo","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/ground/material1":"sop/material","/lights":"obj/geo","/lights/areaLight1":"sop/areaLight","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/merge1":"sop/merge","/lights/merge2":"sop/merge","/lights/polarTransform1":"sop/polarTransform","/lights/spotLight1":"sop/spotLight","/cameras":"obj/geo","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls","/cameras/merge1":"sop/merge","/cameras/orthographicCamera1":"sop/orthographicCamera","/cameras/perspectiveCamera1":"sop/perspectiveCamera"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.4.14"}},"root":{"type":"root","nodes":{"ground":{"type":"geo","nodes":{"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"SDFFractalMandelbrot1":{"type":"SDFFractalMandelbrot","params":{"position":{"overriden_options":{}},"center":{"raw_input":[0,0.31899999999999995,0],"overriden_options":{}},"power":{"overriden_options":{}},"QPreMult":{"overriden_options":{}},"QPostMult":{"overriden_options":{}},"thetaMult":{"overriden_options":{}},"iterations":{"overriden_options":{}},"externalBoundingRadius":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"},{"index":1,"inputName":"center","node":"floatToVec3_2","output":"vec3"}]},"SDFSphere1":{"type":"SDFSphere","params":{"position":{"overriden_options":{}},"center":{"overriden_options":{}},"radius":{"raw_input":0.52,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"},{"index":1,"inputName":"center","node":"floatToVec3_1","output":"vec3"}]},"SDFSphere2":{"type":"SDFSphere","params":{"position":{"overriden_options":{}},"center":{"raw_input":[1.1,0,0],"overriden_options":{}},"radius":{"raw_input":0.5,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"globals1","output":"position"}]},"SDFUnion1":{"type":"SDFUnion","params":{"sdf0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"sdf1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"smoothFactor":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.32},"matBlendDist":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"sdf0","node":"SDFSphere2","output":"float"},{"index":1,"inputName":"sdf1","node":"SDFSphere1","output":"float"}],"connection_points":{"in":[{"name":"sdf0","type":"float"},{"name":"sdf1","type":"float"},{"name":"smoothFactor","type":"float"},{"name":"matBlendDist","type":"float"}],"out":[{"name":"union","type":"float"}]}},"SDFUnion2":{"type":"SDFUnion","params":{"sdf0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"sdf1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"smoothFactor":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.32},"matBlendDist":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"sdf0","node":"SDFUnion1","output":"union"},{"index":1,"inputName":"sdf1","node":"SDFFractalMandelbrot1","output":"d"}],"connection_points":{"in":[{"name":"sdf0","type":"float"},{"name":"sdf1","type":"float"},{"name":"smoothFactor","type":"float"},{"name":"matBlendDist","type":"float"}],"out":[{"name":"union","type":"float"}]}},"boolToInt1":{"type":"boolToInt","params":{"bool":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"bool","node":"compare1","output":"val"}]},"compare1":{"type":"compare","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"value1":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.001}},"inputs":[{"index":0,"inputName":"value0","node":"SDFUnion2","output":"union"}],"connection_points":{"in":[{"name":"value0","type":"float"},{"name":"value1","type":"float"}],"out":[{"name":"val","type":"bool"}]}},"constant1":{"type":"constant","params":{"type":4,"color":[0.24313725490196078,0.5098039215686274,0.8549019607843137],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.047058823529411764,0.10196078431372549,0.17647058823529413],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"multAdd2","output":"val"}]},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"multAdd4","output":"val"}]},"globals1":{"type":"globals"},"intToFloat1":{"type":"intToFloat","params":{"int":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"int","node":"boolToInt1","output":"int"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"value0","node":"constant1","output":"val"},{"index":1,"inputName":"value1","node":"constant2","output":"val"},{"index":2,"inputName":"blend","node":"intToFloat1","output":"float"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true},"raw_input":0.53},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"globals1","output":"time"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"sin1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd3":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true},"raw_input":0.16},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true},"raw_input":0.33},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"globals1","output":"time"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd4":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true}}},"inputs":[{"index":0,"inputName":"value","node":"sin2","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"preAdd","type":"float"},{"name":"mult","type":"float"},{"name":"postAdd","type":"float"}],"out":[{"name":"val","type":"float"}]}},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"sin1":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}},"sin2":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd3","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}}},"persisted_config":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","name":"/ground/MAT/meshStandardBuilder1","color":16711422,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","depthFunc":3,"depthTest":true,"depthWrite":true,"colorWrite":true,"stencilWrite":false,"stencilWriteMask":255,"stencilFunc":519,"stencilRef":0,"stencilFuncMask":255,"stencilFail":7680,"stencilZFail":7680,"stencilZPass":7680,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}},"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"lights":{"type":"geo","nodes":{"areaLight1":{"type":"areaLight","params":{"intensity":4,"height":4.2,"showHelper":true}},"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.04}},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}},"merge2":{"type":"merge","inputs":["spotLight1","areaLight1"]},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":2.2},"inputs":["merge2"]},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":true},"flags":{"bypass":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0.6853981644707956,0.08989004691800284,0.024784332004161996]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"]},"merge1":{"type":"merge","inputs":["cameraControls1","orthographicCamera1"],"flags":{"display":true}},"orthographicCamera1":{"type":"orthographicCamera","params":{"size":3.6,"position":[0,1.7,0],"rotation":[-90,0,0]}},"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"ground":{"pos":[-50,-300],"nodes":{"MAT":{"pos":[-200,300],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"SDFFractalMandelbrot1":{"pos":[-500,-100]},"SDFSphere1":{"pos":[-500,-450]},"SDFSphere2":{"pos":[-500,-600]},"SDFUnion1":{"pos":[-350,-550]},"SDFUnion2":{"pos":[-250,-300]},"boolToInt1":{"pos":[0,-200]},"compare1":{"pos":[-100,-200]},"constant1":{"pos":[50,-450]},"constant2":{"pos":[0,-300]},"floatToVec3_1":{"pos":[-650,-250]},"floatToVec3_2":{"pos":[-700,150]},"globals1":{"pos":[-1200,-500]},"intToFloat1":{"pos":[100,-200]},"mix1":{"pos":[250,-300]},"multAdd1":{"pos":[-1000,-100]},"multAdd2":{"pos":[-800,-100]},"multAdd3":{"pos":[-1000,150]},"multAdd4":{"pos":[-800,150]},"output1":{"pos":[400,0]},"sin1":{"pos":[-900,-100]},"sin2":{"pos":[-900,150]}}}}},"box1":{"pos":[0,100]},"material1":{"pos":[0,300]}}},"lights":{"pos":[-50,-200],"selection":["areaLight1"],"nodes":{"areaLight1":{"pos":[550,-250]},"hemisphereLight1":{"pos":[50,-50]},"merge1":{"pos":[100,300]},"merge2":{"pos":[400,-50]},"polarTransform1":{"pos":[300,150]},"spotLight1":{"pos":[250,-250]}}},"cameras":{"pos":[-50,-100],"selection":["orthographicCamera1"],"nodes":{"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}},"merge1":{"pos":[100,350]},"orthographicCamera1":{"pos":[250,-50]},"perspectiveCamera1":{"pos":[0,-50]}}}}},"shaders":{"/ground/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphcolor_vertex>\n// removed:\n//\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n// removed:\n//\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}","fragment":"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat roughnessFactor = roughness * POLY_roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n\n\tfloat metalnessFactor = metalness * POLY_metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\nif(POLY_SSSModel.isActive){\n\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\n}\n\n\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}","customDistanceMaterial.fragment":"\n// INSERT DEFINES\n\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n// removed:\n//\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n// removed:\n//\t#include <begin_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tvec3 transformed = position;\n\tvec3 objectNormal = normal;\n\t#ifdef USE_TANGENT\n\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t#endif\n\n\n\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}","customDepthDOFMaterial.fragment":"\n// INSERT DEFINES\n\n\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDFSphere2\nfloat dot2( in vec2 v ) { return dot(v,v); }\nfloat dot2( in vec3 v ) { return dot(v,v); }\nfloat ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }\n// https://iquilezles.org/articles/distfunctions/\n\n\n/*\n*\n* SDF PRIMITIVES\n*\n*/\nfloat sdSphere( vec3 p, float s )\n{\n\treturn length(p)-s;\n}\nfloat sdCutSphere( vec3 p, float r, float h )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat s = max( (h-r)*q.x*q.x+w*w*(h+r-2.0*q.y), h*q.x-w*q.y );\n\treturn (s<0.0) ? length(q)-r :\n\t\t\t\t(q.x<w) ? h - q.y :\n\t\t\t\t\tlength(q-vec2(w,h));\n}\nfloat sdCutHollowSphere( vec3 p, float r, float h, float t )\n{\n\t// sampling independent computations (only depend on shape)\n\tfloat w = sqrt(r*r-h*h);\n\t\n\t// sampling dependant computations\n\tvec2 q = vec2( length(p.xz), p.y );\n\treturn ((h*q.x<w*q.y) ? length(q-vec2(w,h)) : \n\t\t\t\t\t\t\tabs(length(q)-r) ) - t;\n}\n\nfloat sdBox( vec3 p, vec3 b )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);\n}\nfloat sdRoundBox( vec3 p, vec3 b, float r )\n{\n\tvec3 q = abs(p) - b*0.5;\n\treturn length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0) - r;\n}\n\n\nfloat sdBoxFrame( vec3 p, vec3 b, float e )\n{\n\t\tp = abs(p )-b*0.5;\n\tvec3 q = abs(p+e)-e;\n\treturn min(min(\n\t\tlength(max(vec3(p.x,q.y,q.z),0.0))+min(max(p.x,max(q.y,q.z)),0.0),\n\t\tlength(max(vec3(q.x,p.y,q.z),0.0))+min(max(q.x,max(p.y,q.z)),0.0)),\n\t\tlength(max(vec3(q.x,q.y,p.z),0.0))+min(max(q.x,max(q.y,p.z)),0.0));\n}\nfloat sdCapsule( vec3 p, vec3 a, vec3 b, float r )\n{\n\tvec3 pa = p - a, ba = b - a;\n\tfloat h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n\treturn length( pa - ba*h ) - r;\n}\nfloat sdVerticalCapsule( vec3 p, float h, float r )\n{\n\tp.y -= clamp( p.y, 0.0, h );\n\treturn length( p ) - r;\n}\nfloat sdCone( in vec3 p, in vec2 c, float h )\n{\n\t// c is the sin/cos of the angle, h is height\n\t// Alternatively pass q instead of (c,h),\n\t// which is the point at the base in 2D\n\tvec2 q = h*vec2(c.x/c.y,-1.0);\n\n\tvec2 w = vec2( length(p.xz), p.y );\n\tvec2 a = w - q*clamp( dot(w,q)/dot(q,q), 0.0, 1.0 );\n\tvec2 b = w - q*vec2( clamp( w.x/q.x, 0.0, 1.0 ), 1.0 );\n\tfloat k = sign( q.y );\n\tfloat d = min(dot( a, a ),dot(b, b));\n\tfloat s = max( k*(w.x*q.y-w.y*q.x),k*(w.y-q.y) );\n\treturn sqrt(d)*sign(s);\n}\nfloat sdConeWrapped(vec3 pos, float angle, float height){\n\treturn sdCone(pos, vec2(sin(angle), cos(angle)), height);\n}\nfloat sdRoundCone( vec3 p, float r1, float r2, float h )\n{\n\tfloat b = (r1-r2)/h;\n\tfloat a = sqrt(1.0-b*b);\n\n\tvec2 q = vec2( length(p.xz), p.y );\n\tfloat k = dot(q,vec2(-b,a));\n\tif( k<0.0 ) return length(q) - r1;\n\tif( k>a*h ) return length(q-vec2(0.0,h)) - r2;\n\treturn dot(q, vec2(a,b) ) - r1;\n}\nfloat sdOctogonPrism( in vec3 p, in float r, float h )\n{\n\tconst vec3 k = vec3(-0.9238795325, // sqrt(2+sqrt(2))/2 \n\t\t\t\t\t\t0.3826834323, // sqrt(2-sqrt(2))/2\n\t\t\t\t\t\t0.4142135623 ); // sqrt(2)-1 \n\t// reflections\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(vec2( k.x,k.y),p.xy),0.0)*vec2( k.x,k.y);\n\tp.xy -= 2.0*min(dot(vec2(-k.x,k.y),p.xy),0.0)*vec2(-k.x,k.y);\n\t// polygon side\n\tp.xy -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n\tvec2 d = vec2( length(p.xy)*sign(p.y), p.z-h );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHexPrism( vec3 p, vec2 h )\n{\n\tconst vec3 k = vec3(-0.8660254, 0.5, 0.57735);\n\tp = abs(p);\n\tp.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;\n\tvec2 d = vec2(\n\t\tlength(p.xy-vec2(clamp(p.x,-k.z*h.x,k.z*h.x), h.x))*sign(p.y-h.x),\n\t\tp.z-h.y );\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdHorseshoe( in vec3 p, in float angle, in float r, in float le, vec2 w )\n{\n\tvec2 c = vec2(cos(angle),sin(angle));\n\tp.x = abs(p.x);\n\tfloat l = length(p.xy);\n\tp.xy = mat2(-c.x, c.y, \n\t\t\tc.y, c.x)*p.xy;\n\tp.xy = vec2((p.y>0.0 || p.x>0.0)?p.x:l*sign(-c.x),\n\t\t\t\t(p.x>0.0)?p.y:l );\n\tp.xy = vec2(p.x,abs(p.y-r))-vec2(le,0.0);\n\t\n\tvec2 q = vec2(length(max(p.xy,0.0)) + min(0.0,max(p.x,p.y)),p.z);\n\tvec2 d = abs(q) - w;\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdTriPrism( vec3 p, vec2 h )\n{\n\tvec3 q = abs(p);\n\treturn max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);\n}\nfloat sdPyramid( vec3 p, float h)\n{\n\tfloat m2 = h*h + 0.25;\n\n\tp.xz = abs(p.xz);\n\tp.xz = (p.z>p.x) ? p.zx : p.xz;\n\tp.xz -= 0.5;\n\n\tvec3 q = vec3( p.z, h*p.y - 0.5*p.x, h*p.x + 0.5*p.y);\n\n\tfloat s = max(-q.x,0.0);\n\tfloat t = clamp( (q.y-0.5*p.z)/(m2+0.25), 0.0, 1.0 );\n\n\tfloat a = m2*(q.x+s)*(q.x+s) + q.y*q.y;\n\tfloat b = m2*(q.x+0.5*t)*(q.x+0.5*t) + (q.y-m2*t)*(q.y-m2*t);\n\n\tfloat d2 = min(q.y,-q.x*m2-q.y*0.5) > 0.0 ? 0.0 : min(a,b);\n\n\treturn sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));\n}\n\nfloat sdPlane( vec3 p, vec3 n, float h )\n{\n\t// n must be normalized\n\treturn dot(p,n) + h;\n}\n\nfloat sdTorus( vec3 p, vec2 t )\n{\n\tvec2 q = vec2(length(p.xz)-t.x,p.y);\n\treturn length(q)-t.y;\n}\nfloat sdCappedTorus(in vec3 p, in float an, in float ra, in float rb)\n{\n\tvec2 sc = vec2(sin(an),cos(an));\n\tp.x = abs(p.x);\n\tfloat k = (sc.y*p.x>sc.x*p.z) ? dot(p.xz,sc) : length(p.xz);\n\treturn sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;\n}\nfloat sdLink( vec3 p, float le, float r1, float r2 )\n{\n vec3 q = vec3( p.x, max(abs(p.y)-le,0.0), p.z );\n return length(vec2(length(q.xy)-r1,q.z)) - r2;\n}\n// c is the sin/cos of the desired cone angle\nfloat sdSolidAngle(vec3 pos, vec2 c, float radius)\n{\n\tvec2 p = vec2( length(pos.xz), pos.y );\n\tfloat l = length(p) - radius;\n\tfloat m = length(p - c*clamp(dot(p,c),0.0,radius) );\n\treturn max(l,m*sign(c.y*p.x-c.x*p.y));\n}\nfloat sdSolidAngleWrapped(vec3 pos, float angle, float radius){\n\treturn sdSolidAngle(pos, vec2(sin(angle), cos(angle)), radius);\n}\nfloat sdTube( vec3 p, float r )\n{\n\treturn length(p.xz)-r;\n}\nfloat sdTubeCapped( vec3 p, float h, float r )\n{\n\tvec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h);\n\treturn min(max(d.x,d.y),0.0) + length(max(d,0.0));\n}\nfloat sdOctahedron( vec3 p, float s)\n{\n p = abs(p);\n float m = p.x+p.y+p.z-s;\n vec3 q;\n if( 3.0*p.x < m ) q = p.xyz;\n else if( 3.0*p.y < m ) q = p.yzx;\n else if( 3.0*p.z < m ) q = p.zxy;\n else return m*0.57735027;\n \n float k = clamp(0.5*(q.z-q.y+s),0.0,s); \n return length(vec3(q.x,q.y-s+k,q.z-k)); \n}\nfloat udTriangle( vec3 p, vec3 a, vec3 b, vec3 c, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 ac = a - c; vec3 pc = p - c;\n\tvec3 nor = cross( ba, ac );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(ac,nor),pc))<2.0)\n\t\t?\n\t\tmin( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(ac*clamp(dot(ac,pc)/dot2(ac),0.0,1.0)-pc) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\nfloat udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d, float thickness )\n{\n\tvec3 ba = b - a; vec3 pa = p - a;\n\tvec3 cb = c - b; vec3 pb = p - b;\n\tvec3 dc = d - c; vec3 pc = p - c;\n\tvec3 ad = a - d; vec3 pd = p - d;\n\tvec3 nor = cross( ba, ad );\n\n\treturn - thickness + sqrt(\n\t\t(sign(dot(cross(ba,nor),pa)) +\n\t\tsign(dot(cross(cb,nor),pb)) +\n\t\tsign(dot(cross(dc,nor),pc)) +\n\t\tsign(dot(cross(ad,nor),pd))<3.0)\n\t\t?\n\t\tmin( min( min(\n\t\tdot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa),\n\t\tdot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ),\n\t\tdot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ),\n\t\tdot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) )\n\t\t:\n\t\tdot(nor,pa)*dot(nor,pa)/dot2(nor) );\n}\n\n/*\n*\n* SDF OPERATIONS\n*\n*/\nfloat SDFUnion( float d1, float d2 ) { return min(d1,d2); }\nfloat SDFSubtract( float d1, float d2 ) { return max(-d1,d2); }\nfloat SDFIntersect( float d1, float d2 ) { return max(d1,d2); }\n\nfloat SDFSmoothUnion( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) - k*h*(1.0-h);\n}\n\nfloat SDFSmoothSubtract( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2+d1)/k, 0.0, 1.0 );\n\treturn mix( d2, -d1, h ) + k*h*(1.0-h);\n}\n\nfloat SDFSmoothIntersect( float d1, float d2, float k ) {\n\tfloat h = clamp( 0.5 - 0.5*(d2-d1)/k, 0.0, 1.0 );\n\treturn mix( d2, d1, h ) + k*h*(1.0-h);\n}\n\nvec4 SDFElongateFast( in vec3 p, in vec3 h )\n{\n\treturn vec4( p-clamp(p,-h,h), 0.0 );\n}\nvec4 SDFElongateSlow( in vec3 p, in vec3 h )\n{\n\tvec3 q = abs(p)-h;\n\treturn vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );\n}\n\nfloat SDFOnion( in float sdf, in float thickness )\n{\n\treturn abs(sdf)-thickness;\n}\n\n// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n// https://www.shadertoy.com/view/XsXXWS\n// http://blog.hvidtfeldts.net/index.php/2011/09/distance-estimated-3d-fractals-v-the-mandelbulb-different-de-approximations/\t\n\n// A point this close to the surface is considered to be on the surface.\n// Larger numbers lead to faster convergence but \"blur\" out the shape\n// const float minimumDistanceToSurface = SURF_DIST;//0.0003;\n\nstruct MandelbrotArgs {\n\tfloat power;\n\tvec3 QPreMult;\n\tvec3 QPostMult;\n\tfloat thetaMult;\n\tfloat externalBoundingRadius;\n};\n\n#ifndef SURF_DIST\n\t#define SURF_DIST 0.001\n#endif\n\n////////////////////////////////////////////////////////////\n\nfloat mandelbrot(vec3 P, out float AO, MandelbrotArgs args) {\n\n\tAO = 1.0;\n\t\n\tvec3 Q = P;\n\t\n\t// Put the whole shape in a bounding sphere to \n\t// speed up distant ray marching. This is necessary\n\t// to ensure that we don't expend all ray march iterations\n\t// before even approaching the surface\n\t{\n\t\tfloat r = length(P) - args.externalBoundingRadius;\n\t\t// If we're more than 1 unit away from the\n\t\t// surface, return that distance\n\t\tif (r > 1.0) { return r; }\n\t}\n\tfloat escapeRadius = 2. * args.externalBoundingRadius;\n\n\t// Embed a sphere within the fractal to fill in holes under low iteration counts\n\tconst float internalBoundingRadius = 0.72;\n\n\t// Used to smooth discrete iterations into continuous distance field\n\t// (similar to the trick used for coloring the Mandelbrot set)\t\n\tfloat derivative = 1.0;\n\t\n\tfor (int i = 0; i < 8; ++i) {\n\t\t// Darken as we go deeper\n\t\tAO *= 0.725;\n\t\tfloat r = length(Q);\n\t\t\n\t\tif (r > escapeRadius) {\t\n\t\t\t// The point escaped. Remap AO for more brightness and return\n\t\t\tAO = min((AO + 0.075) * 4.1, 1.0);\n\t\t\treturn min(length(P) - internalBoundingRadius, 0.5 * log(r) * r / derivative);\n\t\t} else {\t\t\n\t\t\t// Convert to polar coordinates and then rotate by the power\n\t\t\t//float theta = acos(Q.z*(0.8+.2*sin(iTime*1.)) / r) * power;\n\t\t\tvec3 preMult = vec3(\n\t\t\t\targs.QPreMult.x,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.y,// * (1.+float(i)),\n\t\t\t\targs.QPreMult.z// * (1.+float(i))\n\t\t\t);\n\t\t\tfloat theta = acos(preMult.z * Q.z / r) * args.power;\n\t\t\tfloat phi = atan(preMult.y * Q.y, preMult.x * Q.x) * args.power;\t\t\t\n\t\t\t\n\t\t\t// Update the derivative\n\t\t\tderivative = pow(r, args.power - 1.0) * args.power * derivative + 1.0;\n\t\t\t\n\t\t\t// Convert back to Cartesian coordinates and \n\t\t\t// offset by the original point (which we're orbiting)\n\t\t\tfloat sinTheta = sin(theta * args.thetaMult);\n\t\t\t\n\t\t\tQ = vec3(sinTheta * cos(phi) * args.QPostMult.x,\n\t\t\t\t\t sinTheta * sin(phi) * args.QPostMult.y,\n\t\t\t\t\t cos(theta) * args.QPostMult.z) * pow(r, args.power) + P;\n\t\t}\t\t\t\n\t}\n\t\n\t// Never escaped, so either already in the set...or a complete miss\n\treturn SURF_DIST;\n}\n\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nuniform float time;\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvarying vec2 vHighPrecisionZW;\n\nstruct SSSModel {\n\tbool isActive;\n\tvec3 color;\n\tfloat thickness;\n\tfloat power;\n\tfloat scale;\n\tfloat distortion;\n\tfloat ambient;\n\tfloat attenuation;\n};\n\nvoid RE_Direct_Scattering(\n\tconst in IncidentLight directLight,\n\tconst in GeometricContext geometry,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\n\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\n\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tfloat v_POLY_globals1_time = time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere2\n\tfloat v_POLY_SDFSphere2_float = sdSphere(v_POLY_globals1_position - vec3(1.1, 0.0, 0.0), 0.5);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (0.53*(v_POLY_globals1_time + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (0.33*(v_POLY_globals1_time + 0.16)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin1\n\tfloat v_POLY_sin1_val = sin(v_POLY_multAdd1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/sin2\n\tfloat v_POLY_sin2_val = sin(v_POLY_multAdd3_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (1.0*(v_POLY_sin1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (1.0*(v_POLY_sin2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_1\n\tvec3 v_POLY_floatToVec3_1_vec3 = vec3(v_POLY_multAdd2_val, 0.0, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(0.0, v_POLY_multAdd4_val, 0.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFSphere1\n\tfloat v_POLY_SDFSphere1_float = sdSphere(v_POLY_globals1_position - v_POLY_floatToVec3_1_vec3, 0.52);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFFractalMandelbrot1\n\tfloat v_POLY_SDFFractalMandelbrot1_ao;\n\tfloat v_POLY_SDFFractalMandelbrot1_d = mandelbrot(v_POLY_globals1_position - v_POLY_floatToVec3_2_vec3, v_POLY_SDFFractalMandelbrot1_ao, MandelbrotArgs(8.0, vec3(1.0, 1.0, 1.0), vec3(1.0, 1.0, 1.0), 1.0, 1.2));\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion1\n\tfloat v_POLY_SDFUnion1_union = SDFSmoothUnion(v_POLY_SDFSphere2_float, v_POLY_SDFSphere1_float, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDFUnion2\n\tfloat v_POLY_SDFUnion2_union = SDFSmoothUnion(v_POLY_SDFUnion1_union, v_POLY_SDFFractalMandelbrot1_d, 0.32);\n\t\n\t// /ground/MAT/meshStandardBuilder1/compare1\n\tbool v_POLY_compare1_val = (v_POLY_SDFUnion2_union < 0.001);\n\t\n\t// /ground/MAT/meshStandardBuilder1/boolToInt1\n\tint v_POLY_boolToInt1_int = int(v_POLY_compare1_val);\n\t\n\t// /ground/MAT/meshStandardBuilder1/intToFloat1\n\tfloat v_POLY_intToFloat1_float = float(v_POLY_boolToInt1_int);\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_intToFloat1_float);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}},"jsFunctionBodies":{}}
Code editor
{"multiple_panel":{"split_ratio":0.5,"split_panel0":{"split_ratio":0.5543217692883486,"split_panel0":{"panelTypes":["viewer"],"currentPanelIndex":0,"panel_data":{"camera":"/cameras/cameras:sopGroup/orthographicCamera1","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false,"initLayoutData":{"camera":{"position":{"x":400,"y":225},"zoom":1},"history":{"2":{"position":{"x":0,"y":0},"zoom":1},"36":{"position":{"x":100,"y":-200},"zoom":1},"89":{"position":{"x":100,"y":-200},"zoom":1},"145":{"position":{"x":-50,"y":50},"zoom":1},"195":{"position":{"x":0,"y":-200},"zoom":1},"198":{"position":{"x":0,"y":-50},"zoom":1},"378":{"position":{"x":0,"y":-200},"zoom":1},"396":{"position":{"x":25,"y":-25},"zoom":1}},"paramsDisplayed":false,"linkIndex":1}}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":400,"y":225},"zoom":0.4792221069335929},"history":{"2":{"position":{"x":38.089007428934735,"y":203.59310979070793},"zoom":1.0222221069335933},"36":{"position":{"x":100,"y":-200},"zoom":1.0222221069335933},"89":{"position":{"x":88.26086824125048,"y":-275.32609545197613},"zoom":1.0222221069335933},"145":{"position":{"x":-425.4565640840058,"y":-30.021748155475933},"zoom":1.135802341037326},"195":{"position":{"x":0,"y":-200},"zoom":1.0222221069335933},"198":{"position":{"x":-192.70254352755202,"y":-147.84056562279827},"zoom":1.0218023410373267},"227":{"position":{"x":400,"y":225},"zoom":0.4792221069335929},"378":{"position":{"x":0,"y":-200},"zoom":1.0222221069335933},"396":{"position":{"x":233.4019727251968,"y":143.25251684981006},"zoom":0.8002419407978513}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/ground/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":3,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"createExport":false,"checkRemoteAssetsUse":true,"minimizeFilesCount":false,"compressJs":true,"createZip":false,"runPostExportCommand":false},"paramsModal":[]}
Used nodes
event/cameraOrbitControls;mat/meshStandardBuilder;obj/geo;sop/areaLight;sop/box;sop/cameraControls;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/orthographicCamera;sop/perspectiveCamera;sop/polarTransform;sop/spotLight
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD
Used integrations
[]
Used assets
Nodes map
{"/ground":"obj/geo","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/ground/material1":"sop/material","/lights":"obj/geo","/lights/areaLight1":"sop/areaLight","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/merge1":"sop/merge","/lights/merge2":"sop/merge","/lights/polarTransform1":"sop/polarTransform","/lights/spotLight1":"sop/spotLight","/cameras":"obj/geo","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls","/cameras/merge1":"sop/merge","/cameras/orthographicCamera1":"sop/orthographicCamera","/cameras/perspectiveCamera1":"sop/perspectiveCamera"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source