Name
*
Code
{"properties":{"frame":12554,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.82"}},"root":{"type":"root","nodes":{"geo1":{"type":"geo","nodes":{"sphere1":{"type":"sphere"},"transform1":{"type":"transform","params":{"t":[0,1,0]},"inputs":["sphere1"],"flags":{"bypass":true}},"material1":{"type":"material","params":{"material":"../MAT/meshStandard1"},"inputs":["transform1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard","params":{"useMap":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","metalness":1,"roughness":0}}}},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"setObjectPosition1":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,{"index":2,"inputName":"position","node":"rayIntersectPlane1","output":"position"}]},"plane1":{"type":"plane","params":{"normal":[0,0,1]}},"rayIntersectPlane1":{"type":"rayIntersectPlane","inputs":[{"index":0,"inputName":"Ray","node":"rayFromCursor1","output":"Ray"},{"index":1,"inputName":"Plane","node":"plane1","output":"Plane"}]},"rayFromCursor1":{"type":"rayFromCursor"}},"inputs":["material1"],"persisted_config":{"variableNames":["VAR__plane1_normal","VAR__plane1__1","VAR__rayIntersectPlane1_","VAR__setObjectPosition1_position"],"variables":[{"type":"Vector3","data":[0,0,0]},{"type":"Plane","data":{"normal":[1,0,0],"constant":0}},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]}],"functionNames":["globalsRayFromCursor","planeSet","rayIntersectPlane","globalsTime","globalsTimeDelta","setObjectPosition"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"rayFromCursor"},{"type":"touchmove","emitter":"canvas","jsType":"rayFromCursor"}]}},"objectProperties1":{"type":"objectProperties","params":{"tname":1,"name":"sphere"},"inputs":["actor1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"ground":{"type":"geo","nodes":{"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"hsvToRgb1","output":"rgb"}]},"SDF2DCircle1":{"type":"SDF2DCircle","params":{"position":{"overriden_options":{}},"center":{"overriden_options":{}},"radius":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"floatToVec2_2","output":"vec2"}]},"vec3ToFloat2":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_2":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat2","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat2","output":"z"}]},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":9.8},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"multAdd3","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"}]}},"sin1":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}},"fitTo01_1":{"type":"fitTo01","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"srcMin":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"srcMax":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"val","node":"sin1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float"},{"name":"srcMin","type":"float"},{"name":"srcMax","type":"float"}],"out":[{"name":"val","type":"float"}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"raw_input":0.18,"overriden_options":{}},"y":{"raw_input":0.12,"overriden_options":{}},"z":{"raw_input":0.21,"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"fitTo01_1","output":"val"}]},"oklabToRgb1":{"type":"oklabToRgb","params":{"oklab":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"oklab","node":"floatToVec3_1","output":"vec3"}]},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"raw_input":0.54,"overriden_options":{}},"z":{"raw_input":0.35,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"fitFrom01_1","output":"val"},{"index":1,"inputName":"y","node":"clamp1","output":"val"}]},"hsvToRgb1":{"type":"hsvToRgb","params":{"hsv":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"hsv","node":"floatToVec3_2","output":"vec3"}]},"fitFrom01_1":{"type":"fitFrom01","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"destMin":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.08},"destMax":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.22}},"inputs":[{"index":0,"inputName":"val","node":"fitTo01_1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float"},{"name":"destMin","type":"float"},{"name":"destMax","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":-1},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"param1","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,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"SDF2DCircle1","output":"float"},{"index":1,"inputName":"preAdd","node":"multAdd2","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"}]}},"param1":{"type":"param","params":{"name":"time"},"maxInputsCount":0,"connection_points":{"in":[],"out":[{"name":"val","type":"float"}]}},"param2":{"type":"param","params":{"name":"speed"},"maxInputsCount":0,"connection_points":{"in":[],"out":[{"name":"val","type":"float"}]}},"clamp1":{"type":"clamp","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"min":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"max":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.58}},"inputs":[{"index":0,"inputName":"value","node":"multAdd4","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd4":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.3},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"param2","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"}]}}},"params":{"speed":{"type":"float","default_value":0,"options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true},"overriden_options":{"callback":"{}"}},"time":{"type":"float","default_value":0,"options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true},"overriden_options":{"callback":"{}"}}},"persisted_config":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"blendColor":0,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":1,"blendColor":0,"forceSinglePass":true,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","blendColor":0},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","blendColor":0,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"getObject1":{"type":"getObject","params":{"getCurrentObject":0,"mask":"*/sphere"},"maxInputsCount":2},"getObjectProperty1":{"type":"getObjectProperty","inputs":[{"index":0,"inputName":"Object3D","node":"getObject1","output":"Object3D"}]},"length1":{"type":"length","params":{"v":{"type":"vector3","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"v","node":"getObjectProperty1","output":"position"}],"connection_points":{"in":[{"name":"v","type":"Vector3","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.2},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"length1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float","isArray":false},{"name":"preAdd","type":"float","isArray":false},{"name":"mult","type":"float","isArray":false},{"name":"postAdd","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"complement1":{"type":"complement","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"in","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"out","type":"float","isArray":false}]}},"clamp1":{"type":"clamp","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"min":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"max":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":4}},"inputs":[{"index":0,"inputName":"val","node":"length1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float","isArray":false},{"name":"min","type":"float","isArray":false},{"name":"max","type":"float","isArray":false}],"out":[{"name":"clamped","type":"float","isArray":false}]}},"setObjectAttribute1":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.25},"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,null,null,{"index":4,"inputName":"val","node":"clamp1","output":"clamped"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false},{"name":"val","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false}]}},"getObjectAttribute1":{"type":"getObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"defaultFloat","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"getObjectAttribute2":{"type":"getObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"defaultFloat","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"onTick1","output":"delta"},null,{"index":2,"inputName":"mult","node":"getObjectAttribute1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float","isArray":false},{"name":"preAdd","type":"float","isArray":false},{"name":"mult","type":"float","isArray":false},{"name":"postAdd","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"add1":{"type":"add","params":{"add0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"add1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"add2":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"add0","node":"multAdd2","output":"val"},{"index":1,"inputName":"add1","node":"getObjectAttribute2","output":"val"}],"connection_points":{"in":[{"name":"add0","type":"float","isArray":false},{"name":"add1","type":"float","isArray":false},{"name":"add2","type":"float","isArray":false}],"out":[{"name":"sum","type":"float","isArray":false}]}},"setObjectAttribute2":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,null,null,{"index":4,"inputName":"val","node":"add1","output":"sum"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false},{"name":"val","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false}]}},"setMaterialUniform1":{"type":"setMaterialUniform","params":{"float":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"uniformName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"setObjectAttribute2","output":"trigger"},null,{"index":2,"inputName":"float","node":"debug1","output":"float"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}]}},"debug1":{"type":"debug","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"maxInputsCount":1,"inputs":[{"index":0,"inputName":"in","node":"add1","output":"sum"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"float","type":"float","isArray":false}]}},"setMaterialUniform2":{"type":"setMaterialUniform","params":{"float":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"uniformName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"setObjectAttribute1","output":"trigger"},null,{"index":2,"inputName":"float","node":"clamp1","output":"clamped"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}]}}},"inputs":["attribCreate2"],"flags":{"display":true},"persisted_config":{"variableNames":["VAR__length1_v"],"variables":[{"type":"Vector3","data":[0,0,0]}],"functionNames":["globalsTime","globalsTimeDelta","getObjectAttribute","getObject","multAdd","mathFloat_4","getObjectProperty","addNumber","lengthVector","debug","clamp","mathFloat_3","setObjectAttribute","setMaterialUniformNumber"],"serializedParamConfigs":[],"eventDatas":[]}},"attribCreate1":{"type":"attribCreate","params":{"class":3,"name":"time"},"inputs":["material1"]},"attribCreate2":{"type":"attribCreate","params":{"class":3,"name":"speed"},"inputs":["attribCreate1"]}},"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"envMap":{"type":"envMap","inputs":["imageEnv"]},"imageEnv":{"type":"imageEXR","params":{"tminFilter":true,"tmagFilter":true,"tanisotropy":true,"useRendererMaxAnisotropy":true}},"image1":{"type":"image"}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.52}},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":1}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":3},"inputs":["spotLight1"]},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}},"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0,0.75,0]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"geo1":{"pos":[-50,-350],"nodes":{"sphere1":{"pos":[0,50]},"transform1":{"pos":[0,200]},"material1":{"pos":[0,350]},"MAT":{"pos":[-200,350],"selection":["meshStandard1"],"nodes":{"meshStandard1":{"pos":[0,0]}}},"actor1":{"pos":[0,500],"nodes":{"onTick1":{"pos":[-50,-50]},"setObjectPosition1":{"pos":[400,0]},"plane1":{"pos":[-50,350]},"rayIntersectPlane1":{"pos":[100,250]},"rayFromCursor1":{"pos":[-50,150]}}},"objectProperties1":{"pos":[0,600]}}},"ground":{"pos":[-50,-450],"selection":["MAT"],"nodes":{"material1":{"pos":[0,300]},"MAT":{"pos":[-200,300],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"globals1":{"pos":[-850,0]},"output1":{"pos":[750,-100]},"SDF2DCircle1":{"pos":[-400,-50]},"vec3ToFloat2":{"pos":[-700,-50]},"floatToVec2_2":{"pos":[-550,-50]},"multAdd1":{"pos":[-200,-50]},"sin1":{"pos":[50,-50]},"fitTo01_1":{"pos":[200,-50]},"floatToVec3_1":{"pos":[450,-250]},"oklabToRgb1":{"pos":[650,-250]},"floatToVec3_2":{"pos":[350,100]},"hsvToRgb1":{"pos":[500,100]},"fitFrom01_1":{"pos":[200,100]},"multAdd2":{"pos":[-550,250]},"multAdd3":{"pos":[-300,100]},"param1":{"pos":[-800,400]},"param2":{"pos":[-300,450]},"clamp1":{"pos":[50,400]},"multAdd4":{"pos":[-50,400]}}}}},"box1":{"pos":[0,100]},"actor1":{"pos":[0,800],"selection":["setMaterialUniform2"],"nodes":{"onTick1":{"pos":[-50,850]},"getObject1":{"pos":[-150,300]},"getObjectProperty1":{"pos":[0,300]},"length1":{"pos":[100,300]},"multAdd1":{"pos":[250,300]},"complement1":{"pos":[350,300]},"clamp1":{"pos":[250,450]},"setObjectAttribute1":{"pos":[650,600]},"getObjectAttribute1":{"pos":[0,1100]},"getObjectAttribute2":{"pos":[0,1250]},"multAdd2":{"pos":[200,1000]},"add1":{"pos":[350,1150]},"setObjectAttribute2":{"pos":[650,900]},"setMaterialUniform1":{"pos":[1000,900]},"debug1":{"pos":[600,1100]},"setMaterialUniform2":{"pos":[1000,550]}}},"attribCreate1":{"pos":[0,450]},"attribCreate2":{"pos":[0,600]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"selection":["hemisphereLight1"],"nodes":{"hemisphereLight1":{"pos":[50,-50]},"spotLight1":{"pos":[300,-50]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,300]}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}}}},"shaders":{"/ground/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_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\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\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 <color_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\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\t#include <batching_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 USE_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 USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\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_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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\t#include <alphahash_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, geometryNormal, geometryViewDir, 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 + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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":{"/geo1/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor1/rayFromCursor1\n\tv_POLY_rayFromCursor1_Ray = computed(() => globalsRayFromCursor());\n\n\t// /geo1/actor1/plane1\n\tv_POLY_plane1_Plane = computed(() => planeSet(VAR__plane1_normal.set(0, 0, 1), 0.0, VAR__plane1__1));\n\n\t// /geo1/actor1/rayIntersectPlane1\n\tv_POLY_rayIntersectPlane1_position = computed(() =>\n\t\trayIntersectPlane(this.v_POLY_rayFromCursor1_Ray.value, this.v_POLY_plane1_Plane.value, VAR__rayIntersectPlane1_)\n\t);\n\n\t// /geo1/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /geo1/actor1/onTick1\n\tonTick1() {\n\t\tthis.setObjectPosition1(0);\n\t}\n\n\t// /geo1/actor1/setObjectPosition1\n\tsetObjectPosition1() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition1_position.copy(this.v_POLY_rayIntersectPlane1_position.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/ground/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /ground/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\t// /ground/actor1/getObjectAttribute1\n\tv_POLY_getObjectAttribute1_val = computed(() => getObjectAttribute(this.object3D, \"speed\", \"float\", 0.0));\n\n\t// /ground/actor1/getObjectAttribute2\n\tv_POLY_getObjectAttribute2_val = computed(() => getObjectAttribute(this.object3D, \"time\", \"float\", 0.0));\n\n\t// /ground/actor1/getObject1\n\tv_POLY_getObject1_Object3D = computed(() => getObject(this.object3D, false, \"*/sphere\"));\n\n\t// /ground/actor1/multAdd2\n\tv_POLY_multAdd2_val = computed(() =>\n\t\tmathFloat_4(multAdd, this.v_POLY_onTick1_delta.value, 0.0, this.v_POLY_getObjectAttribute1_val.value, 0.0)\n\t);\n\n\t// /ground/actor1/getObjectProperty1\n\tv_POLY_getObjectProperty1_position = computed(() =>\n\t\tgetObjectProperty(this.v_POLY_getObject1_Object3D.value, \"position\")\n\t);\n\n\t// /ground/actor1/add1\n\tv_POLY_add1_sum = computed(() =>\n\t\taddNumber(this.v_POLY_multAdd2_val.value, this.v_POLY_getObjectAttribute2_val.value, 0.0)\n\t);\n\n\t// /ground/actor1/length1\n\tv_POLY_length1_val = computed(() => lengthVector(VAR__length1_v.copy(this.v_POLY_getObjectProperty1_position.value)));\n\n\t// /ground/actor1/debug1\n\tv_POLY_debug1_float = computed(() =>\n\t\tdebug(this.object3D, \"/ground/actor1/debug1\", this.v_POLY_add1_sum.value, {\n\t\t\tdisplayValue: true,\n\t\t\tdisplayFrame: true,\n\t\t\tdisplayTime: false,\n\t\t\tdisplayNodePath: true,\n\t\t\tmessage: \"\",\n\t\t\tbundleByObject: true,\n\t\t})\n\t);\n\n\t// /ground/actor1/clamp1\n\tv_POLY_clamp1_clamped = computed(() => mathFloat_3(clamp, this.v_POLY_length1_val.value, 0.0, 4.0));\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /ground/actor1/onTick1\n\tonTick1() {\n\t\tthis.setObjectAttribute2(0);\n\t\tthis.setObjectAttribute1(0);\n\t}\n\n\t// /ground/actor1/setObjectAttribute2\n\tsetObjectAttribute2() {\n\t\tsetObjectAttribute(this.object3D, \"time\", 1.0, this.v_POLY_add1_sum.value, \"float\");\n\t\tthis.setMaterialUniform1(0);\n\t}\n\n\t// /ground/actor1/setMaterialUniform1\n\tsetMaterialUniform1() {\n\t\tsetMaterialUniformNumber(this.object3D.material, \"time\", this.v_POLY_debug1_float.value, 1.0, true, true);\n\t}\n\n\t// /ground/actor1/setObjectAttribute1\n\tsetObjectAttribute1() {\n\t\tsetObjectAttribute(this.object3D, \"speed\", 0.25, this.v_POLY_clamp1_clamped.value, \"float\");\n\t\tthis.setMaterialUniform2(0);\n\t}\n\n\t// /ground/actor1/setMaterialUniform2\n\tsetMaterialUniform2() {\n\t\tsetMaterialUniformNumber(this.object3D.material, \"speed\", this.v_POLY_clamp1_clamped.value, 1.0, true, true);\n\t}\n}\nreturn CustomActorEvaluator;\n"}}
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/perspectiveCamera1","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":556,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-211.34487010673115,"y":-263.7406339241704},"zoom":0.7448023410373259},"history":{"2":{"position":{"x":62.54553192632958,"y":223.1583293886238},"zoom":1.0222221069335933},"36":{"position":{"x":-47.717407964264886,"y":-361.413061682806},"zoom":1.0222221069335933},"121":{"position":{"x":-32.06523228593218,"y":-525.7609063052995},"zoom":1.0222221069335933},"532":{"position":{"x":-34.23913429635279,"y":-332.0652322859322},"zoom":1.0222221069335933},"553":{"position":{"x":-211.34487010673115,"y":-263.7406339241704},"zoom":0.7448023410373259},"1007":{"position":{"x":-202.82609291437288,"y":-146.8478370096836},"zoom":1.0222221069335933},"1269":{"position":{"x":-647.8299995275078,"y":-920.294119696835},"zoom":0.6292221069335929}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/ground/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/actor1","/ground","/","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/actor1","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":19,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"checkRemoteAssetsUse":true,"minimizeFilesCount":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;cop/imageEXR;event/cameraOrbitControls;mat/meshStandard;mat/meshStandardBuilder;obj/copNetwork;obj/geo;sop/actor;sop/attribCreate;sop/box;sop/cameraControls;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/objectProperties;sop/perspectiveCamera;sop/polarTransform;sop/sphere;sop/spotLight;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD;JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/geo1":"obj/geo","/geo1/sphere1":"sop/sphere","/geo1/transform1":"sop/transform","/geo1/material1":"sop/material","/geo1/MAT":"sop/materialsNetwork","/geo1/MAT/meshStandard1":"mat/meshStandard","/geo1/actor1":"sop/actor","/geo1/objectProperties1":"sop/objectProperties","/ground":"obj/geo","/ground/material1":"sop/material","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/ground/actor1":"sop/actor","/ground/attribCreate1":"sop/attribCreate","/ground/attribCreate2":"sop/attribCreate","/COP":"obj/copNetwork","/COP/envMap":"cop/envMap","/COP/imageEnv":"cop/imageEXR","/COP/image1":"cop/image","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/spotLight1":"sop/spotLight","/lights/polarTransform1":"sop/polarTransform","/lights/merge1":"sop/merge","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":12554,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.82"}},"root":{"type":"root","nodes":{"geo1":{"type":"geo","nodes":{"sphere1":{"type":"sphere"},"transform1":{"type":"transform","params":{"t":[0,1,0]},"inputs":["sphere1"],"flags":{"bypass":true}},"material1":{"type":"material","params":{"material":"../MAT/meshStandard1"},"inputs":["transform1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard","params":{"useMap":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","metalness":1,"roughness":0}}}},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"setObjectPosition1":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,{"index":2,"inputName":"position","node":"rayIntersectPlane1","output":"position"}]},"plane1":{"type":"plane","params":{"normal":[0,0,1]}},"rayIntersectPlane1":{"type":"rayIntersectPlane","inputs":[{"index":0,"inputName":"Ray","node":"rayFromCursor1","output":"Ray"},{"index":1,"inputName":"Plane","node":"plane1","output":"Plane"}]},"rayFromCursor1":{"type":"rayFromCursor"}},"inputs":["material1"],"persisted_config":{"variableNames":["VAR__plane1_normal","VAR__plane1__1","VAR__rayIntersectPlane1_","VAR__setObjectPosition1_position"],"variables":[{"type":"Vector3","data":[0,0,0]},{"type":"Plane","data":{"normal":[1,0,0],"constant":0}},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]}],"functionNames":["globalsRayFromCursor","planeSet","rayIntersectPlane","globalsTime","globalsTimeDelta","setObjectPosition"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"rayFromCursor"},{"type":"touchmove","emitter":"canvas","jsType":"rayFromCursor"}]}},"objectProperties1":{"type":"objectProperties","params":{"tname":1,"name":"sphere"},"inputs":["actor1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"ground":{"type":"geo","nodes":{"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"hsvToRgb1","output":"rgb"}]},"SDF2DCircle1":{"type":"SDF2DCircle","params":{"position":{"overriden_options":{}},"center":{"overriden_options":{}},"radius":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"position","node":"floatToVec2_2","output":"vec2"}]},"vec3ToFloat2":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_2":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat2","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat2","output":"z"}]},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":9.8},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"multAdd3","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"}]}},"sin1":{"type":"sin","params":{"radians":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"radians","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"radians","type":"float"}],"out":[{"name":"val","type":"float"}]}},"fitTo01_1":{"type":"fitTo01","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"srcMin":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"srcMax":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"val","node":"sin1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float"},{"name":"srcMin","type":"float"},{"name":"srcMax","type":"float"}],"out":[{"name":"val","type":"float"}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"raw_input":0.18,"overriden_options":{}},"y":{"raw_input":0.12,"overriden_options":{}},"z":{"raw_input":0.21,"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"fitTo01_1","output":"val"}]},"oklabToRgb1":{"type":"oklabToRgb","params":{"oklab":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"oklab","node":"floatToVec3_1","output":"vec3"}]},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"raw_input":0.54,"overriden_options":{}},"z":{"raw_input":0.35,"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"fitFrom01_1","output":"val"},{"index":1,"inputName":"y","node":"clamp1","output":"val"}]},"hsvToRgb1":{"type":"hsvToRgb","params":{"hsv":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"hsv","node":"floatToVec3_2","output":"vec3"}]},"fitFrom01_1":{"type":"fitFrom01","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"destMin":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.08},"destMax":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.22}},"inputs":[{"index":0,"inputName":"val","node":"fitTo01_1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float"},{"name":"destMin","type":"float"},{"name":"destMax","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":-1},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"param1","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,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"SDF2DCircle1","output":"float"},{"index":1,"inputName":"preAdd","node":"multAdd2","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"}]}},"param1":{"type":"param","params":{"name":"time"},"maxInputsCount":0,"connection_points":{"in":[],"out":[{"name":"val","type":"float"}]}},"param2":{"type":"param","params":{"name":"speed"},"maxInputsCount":0,"connection_points":{"in":[],"out":[{"name":"val","type":"float"}]}},"clamp1":{"type":"clamp","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"min":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"max":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.58}},"inputs":[{"index":0,"inputName":"value","node":"multAdd4","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float"},{"name":"min","type":"float"},{"name":"max","type":"float"}],"out":[{"name":"val","type":"float"}]}},"multAdd4":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.3},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"param2","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"}]}}},"params":{"speed":{"type":"float","default_value":0,"options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true},"overriden_options":{"callback":"{}"}},"time":{"type":"float","default_value":0,"options":{"spare":true,"computeOnDirty":true,"cook":false,"dependentOnFoundNode":true},"overriden_options":{"callback":"{}"}}},"persisted_config":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-main","type":"MeshStandardMaterial","color":16777215,"roughness":1,"metalness":0,"emissive":0,"envMapIntensity":1,"blendColor":0,"fog":false},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false},"customMaterials":{"customDepthMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthMaterial","type":"MeshDepthMaterial","name":"customDepthMaterial","side":1,"blendColor":0,"forceSinglePass":true,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDistanceMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDistanceMaterial","type":"MeshDistanceMaterial","name":"customDistanceMaterial","blendColor":0},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}},"customDepthDOFMaterial":{"material":{"metadata":{"version":4.6,"type":"Material","generator":"Material.toJSON"},"uuid":"/ground/MAT/meshStandardBuilder1-customDepthDOFMaterial","type":"MeshDepthMaterial","name":"customDepthDOFMaterial","blendColor":0,"depthPacking":3200},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[{"type":"float","name":"time","defaultValue":0,"uniformName":"v_POLY_param_time"},{"type":"float","name":"speed","defaultValue":0,"uniformName":"v_POLY_param_speed"}],"timeDependent":true,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"getObject1":{"type":"getObject","params":{"getCurrentObject":0,"mask":"*/sphere"},"maxInputsCount":2},"getObjectProperty1":{"type":"getObjectProperty","inputs":[{"index":0,"inputName":"Object3D","node":"getObject1","output":"Object3D"}]},"length1":{"type":"length","params":{"v":{"type":"vector3","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"v","node":"getObjectProperty1","output":"position"}],"connection_points":{"in":[{"name":"v","type":"Vector3","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"multAdd1":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.2},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"length1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float","isArray":false},{"name":"preAdd","type":"float","isArray":false},{"name":"mult","type":"float","isArray":false},{"name":"postAdd","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"complement1":{"type":"complement","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"inputs":[{"index":0,"inputName":"in","node":"multAdd1","output":"val"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"out","type":"float","isArray":false}]}},"clamp1":{"type":"clamp","params":{"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"min":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"max":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":4}},"inputs":[{"index":0,"inputName":"val","node":"length1","output":"val"}],"connection_points":{"in":[{"name":"val","type":"float","isArray":false},{"name":"min","type":"float","isArray":false},{"name":"max","type":"float","isArray":false}],"out":[{"name":"clamped","type":"float","isArray":false}]}},"setObjectAttribute1":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":0.25},"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,null,null,{"index":4,"inputName":"val","node":"clamp1","output":"clamped"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false},{"name":"val","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false}]}},"getObjectAttribute1":{"type":"getObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"defaultFloat","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"getObjectAttribute2":{"type":"getObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"defaultFloat","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"multAdd2":{"type":"multAdd","params":{"value":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"preAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"mult":{"type":"float","default_value":1,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"postAdd":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"value","node":"onTick1","output":"delta"},null,{"index":2,"inputName":"mult","node":"getObjectAttribute1","output":"val"}],"connection_points":{"in":[{"name":"value","type":"float","isArray":false},{"name":"preAdd","type":"float","isArray":false},{"name":"mult","type":"float","isArray":false},{"name":"postAdd","type":"float","isArray":false}],"out":[{"name":"val","type":"float","isArray":false}]}},"add1":{"type":"add","params":{"add0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"add1":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"add2":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"add0","node":"multAdd2","output":"val"},{"index":1,"inputName":"add1","node":"getObjectAttribute2","output":"val"}],"connection_points":{"in":[{"name":"add0","type":"float","isArray":false},{"name":"add1","type":"float","isArray":false},{"name":"add2","type":"float","isArray":false}],"out":[{"name":"sum","type":"float","isArray":false}]}},"setObjectAttribute2":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}},"val":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,null,null,{"index":4,"inputName":"val","node":"add1","output":"sum"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false},{"name":"val","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Object3D","type":"Object3D","isArray":false}]}},"setMaterialUniform1":{"type":"setMaterialUniform","params":{"float":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}},"uniformName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"time"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"setObjectAttribute2","output":"trigger"},null,{"index":2,"inputName":"float","node":"debug1","output":"float"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}]}},"debug1":{"type":"debug","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"overriden_options":{}}},"maxInputsCount":1,"inputs":[{"index":0,"inputName":"in","node":"add1","output":"sum"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"float","type":"float","isArray":false}]}},"setMaterialUniform2":{"type":"setMaterialUniform","params":{"float":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"uniformName":{"type":"string","default_value":"","options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"speed"},"lerp":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"setObjectAttribute1","output":"trigger"},null,{"index":2,"inputName":"float","node":"clamp1","output":"clamped"}],"connection_points":{"in":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"Material","type":"Material","isArray":false},{"name":"float","type":"float","isArray":false},{"name":"uniformName","type":"string","isArray":false},{"name":"lerp","type":"float","isArray":false}]}}},"inputs":["attribCreate2"],"flags":{"display":true},"persisted_config":{"variableNames":["VAR__length1_v"],"variables":[{"type":"Vector3","data":[0,0,0]}],"functionNames":["globalsTime","globalsTimeDelta","getObjectAttribute","getObject","multAdd","mathFloat_4","getObjectProperty","addNumber","lengthVector","debug","clamp","mathFloat_3","setObjectAttribute","setMaterialUniformNumber"],"serializedParamConfigs":[],"eventDatas":[]}},"attribCreate1":{"type":"attribCreate","params":{"class":3,"name":"time"},"inputs":["material1"]},"attribCreate2":{"type":"attribCreate","params":{"class":3,"name":"speed"},"inputs":["attribCreate1"]}},"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"COP":{"type":"copNetwork","nodes":{"envMap":{"type":"envMap","inputs":["imageEnv"]},"imageEnv":{"type":"imageEXR","params":{"tminFilter":true,"tmagFilter":true,"tanisotropy":true,"useRendererMaxAnisotropy":true}},"image1":{"type":"image"}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.52}},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":1}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":3},"inputs":["spotLight1"]},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}},"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[0,0.75,0]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"],"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":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"geo1":{"pos":[-50,-350],"nodes":{"sphere1":{"pos":[0,50]},"transform1":{"pos":[0,200]},"material1":{"pos":[0,350]},"MAT":{"pos":[-200,350],"selection":["meshStandard1"],"nodes":{"meshStandard1":{"pos":[0,0]}}},"actor1":{"pos":[0,500],"nodes":{"onTick1":{"pos":[-50,-50]},"setObjectPosition1":{"pos":[400,0]},"plane1":{"pos":[-50,350]},"rayIntersectPlane1":{"pos":[100,250]},"rayFromCursor1":{"pos":[-50,150]}}},"objectProperties1":{"pos":[0,600]}}},"ground":{"pos":[-50,-450],"selection":["MAT"],"nodes":{"material1":{"pos":[0,300]},"MAT":{"pos":[-200,300],"selection":["meshStandardBuilder1"],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"globals1":{"pos":[-850,0]},"output1":{"pos":[750,-100]},"SDF2DCircle1":{"pos":[-400,-50]},"vec3ToFloat2":{"pos":[-700,-50]},"floatToVec2_2":{"pos":[-550,-50]},"multAdd1":{"pos":[-200,-50]},"sin1":{"pos":[50,-50]},"fitTo01_1":{"pos":[200,-50]},"floatToVec3_1":{"pos":[450,-250]},"oklabToRgb1":{"pos":[650,-250]},"floatToVec3_2":{"pos":[350,100]},"hsvToRgb1":{"pos":[500,100]},"fitFrom01_1":{"pos":[200,100]},"multAdd2":{"pos":[-550,250]},"multAdd3":{"pos":[-300,100]},"param1":{"pos":[-800,400]},"param2":{"pos":[-300,450]},"clamp1":{"pos":[50,400]},"multAdd4":{"pos":[-50,400]}}}}},"box1":{"pos":[0,100]},"actor1":{"pos":[0,800],"selection":["setMaterialUniform2"],"nodes":{"onTick1":{"pos":[-50,850]},"getObject1":{"pos":[-150,300]},"getObjectProperty1":{"pos":[0,300]},"length1":{"pos":[100,300]},"multAdd1":{"pos":[250,300]},"complement1":{"pos":[350,300]},"clamp1":{"pos":[250,450]},"setObjectAttribute1":{"pos":[650,600]},"getObjectAttribute1":{"pos":[0,1100]},"getObjectAttribute2":{"pos":[0,1250]},"multAdd2":{"pos":[200,1000]},"add1":{"pos":[350,1150]},"setObjectAttribute2":{"pos":[650,900]},"setMaterialUniform1":{"pos":[1000,900]},"debug1":{"pos":[600,1100]},"setMaterialUniform2":{"pos":[1000,550]}}},"attribCreate1":{"pos":[0,450]},"attribCreate2":{"pos":[0,600]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"selection":["hemisphereLight1"],"nodes":{"hemisphereLight1":{"pos":[50,-50]},"spotLight1":{"pos":[300,-50]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,300]}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}}}},"shaders":{"/ground/MAT/meshStandardBuilder1":{"vertex":"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <batching_pars_vertex>\n#include <uv_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\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\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 <color_vertex>\n\n\n\n\t// /ground/MAT/meshStandardBuilder1/globals1\n\tv_POLY_globals1_position = vec3(position);\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\t#include <batching_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 USE_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 USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\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_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n\n\n\n// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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\t#include <alphahash_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, geometryNormal, geometryViewDir, 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 + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}","customDepthMaterial.vertex":"#include <common>\n#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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#include <batching_pars_vertex>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n\n\n\n// /ground/MAT/meshStandardBuilder1/globals1\nvarying vec3 v_POLY_globals1_position;\n\n\n\n\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <batching_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\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/SDF2DCircle1\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; }\nfloat sdBox( in vec2 p, in vec2 b )\n{\n\tvec2 d = abs(p)-b;\n\treturn length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\nfloat sdCircle( vec2 p, float r )\n{\n\treturn length(p) - r;\n}\nfloat sdHeart( in vec2 p )\n{\n\tp.x = abs(p.x);\n\n\tif( p.y+p.x>1.0 )\n\t\treturn sqrt(dot2(p-vec2(0.25,0.75))) - sqrt(2.0)/4.0;\n\treturn sqrt(min(dot2(p-vec2(0.00,1.00)),\n\t\t\t\t\tdot2(p-0.5*max(p.x+p.y,0.0)))) * sign(p.x-p.y);\n}\nfloat sdCross( in vec2 p, in vec2 b, float r ) \n{\n\tp = abs(p); p = (p.y>p.x) ? p.yx : p.xy;\n\tvec2 q = p - b;\n\tfloat k = max(q.y,q.x);\n\tvec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);\n\treturn sign(k)*length(max(w,0.0)) + r;\n}\nfloat sdRoundedX( in vec2 p, in float w, in float r )\n{\n\tp = abs(p);\n\treturn length(p-min(p.x+p.y,w)*0.5) - r;\n}\nfloat sdStairs( in vec2 p, in vec2 wh, in float n )\n{\n\tvec2 ba = wh*n;\n\tfloat d = min(dot2(p-vec2(clamp(p.x,0.0,ba.x),0.0)), \n\t\t\t\t dot2(p-vec2(ba.x,clamp(p.y,0.0,ba.y))) );\n\tfloat s = sign(max(-p.y,p.x-ba.x) );\n\n\tfloat dia = length(wh);\n\tp = mat2(wh.x,-wh.y, wh.y,wh.x)*p/dia;\n\tfloat id = clamp(round(p.x/dia),0.0,n-1.0);\n\tp.x = p.x - id*dia;\n\tp = mat2(wh.x, wh.y,-wh.y,wh.x)*p/dia;\n\n\tfloat hh = wh.y/2.0;\n\tp.y -= hh;\n\tif( p.y>hh*sign(p.x) ) s=1.0;\n\tp = (id<0.5 || p.x>0.0) ? p : -p;\n\td = min( d, dot2(p-vec2(0.0,clamp(p.y,-hh,hh))) );\n\td = min( d, dot2(p-vec2(clamp(p.x,0.0,wh.x),hh)) );\n\t\t\n\treturn sqrt(d)*s;\n}\n\nfloat SDFExtrudeX( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.x) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeY( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.y) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\nfloat SDFExtrudeZ( in vec3 p, in float sdf, in float h )\n{\n\tvec2 w = vec2( sdf, abs(p.z) - h );\n\treturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}\n\nvec2 SDFRevolutionX( in vec3 p, float o )\n{\n\treturn vec2( length(p.yz) - o, p.x );\n}\nvec2 SDFRevolutionY( in vec3 p, float o )\n{\n\treturn vec2( length(p.xz) - o, p.y );\n}\nvec2 SDFRevolutionZ( in vec3 p, float o )\n{\n\treturn vec2( length(p.xy) - o, p.z );\n}\n\n// /ground/MAT/meshStandardBuilder1/fitTo01_1\n//\n//\n// FIT\n//\n//\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\n\tfloat src_range = srcMax - srcMin;\n\tfloat dest_range = destMax - destMin;\n\n\tfloat r = (val - srcMin) / src_range;\n\treturn (r * dest_range) + destMin;\n}\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\n\treturn vec2(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\n\t);\n}\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\n\treturn vec3(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\n\t);\n}\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\n\treturn vec4(\n\t\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\n\t\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\n\t\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\n\t\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\n\t);\n}\n\n//\n//\n// FIT TO 01\n// fits the range [srcMin, srcMax] to [0, 1]\n//\nfloat fitTo01(float val, float srcMin, float srcMax){\n\tfloat size = srcMax - srcMin;\n\treturn (val - srcMin) / size;\n}\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitTo01(val.x, srcMin.x, srcMax.x),\n\t\tfitTo01(val.y, srcMin.y, srcMax.y),\n\t\tfitTo01(val.z, srcMin.z, srcMax.z),\n\t\tfitTo01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01\n// fits the range [0, 1] to [destMin, destMax]\n//\nfloat fitFrom01(float val, float destMin, float destMax){\n\treturn fit(val, 0.0, 1.0, destMin, destMax);\n}\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\n\treturn vec2(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y)\n\t);\n}\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\n\treturn vec3(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z)\n\t);\n}\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\n\treturn vec4(\n\t\tfitFrom01(val.x, srcMin.x, srcMax.x),\n\t\tfitFrom01(val.y, srcMin.y, srcMax.y),\n\t\tfitFrom01(val.z, srcMin.z, srcMax.z),\n\t\tfitFrom01(val.w, srcMin.w, srcMax.w)\n\t);\n}\n\n//\n//\n// FIT FROM 01 TO VARIANCE\n// fits the range [0, 1] to [center - variance, center + variance]\n//\nfloat fitFrom01ToVariance(float val, float center, float variance){\n\treturn fitFrom01(val, center - variance, center + variance);\n}\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\n\treturn vec2(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y)\n\t);\n}\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\n\treturn vec3(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z)\n\t);\n}\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\n\treturn vec4(\n\t\tfitFrom01ToVariance(val.x, center.x, variance.x),\n\t\tfitFrom01ToVariance(val.y, center.y, variance.y),\n\t\tfitFrom01ToVariance(val.z, center.z, variance.z),\n\t\tfitFrom01ToVariance(val.w, center.w, variance.w)\n\t);\n}\n\n// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n// https://github.com/hughsk/glsl-hsv2rgb\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\nvec3 hsv2rgb(vec3 c) {\n\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\n\n\n\n\n\n\n// /ground/MAT/meshStandardBuilder1/param1\nuniform float v_POLY_param_time;\n\n// /ground/MAT/meshStandardBuilder1/param2\nuniform float v_POLY_param_speed;\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 vec3 geometryNormal,\n\tconst in vec3 geometryViewDir,\n\tconst in SSSModel sssModel,\n\tinout ReflectedLight reflectedLight\n\t){\n\tvec3 scatteringHalf = normalize(directLight.direction + (geometryNormal * sssModel.distortion));\n\tfloat scatteringDot = pow(saturate(dot(geometryViewDir, -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/param1\n\tfloat v_POLY_param1_val = v_POLY_param_time;\n\t\n\t// /ground/MAT/meshStandardBuilder1/param2\n\tfloat v_POLY_param2_val = v_POLY_param_speed;\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat2\n\tfloat v_POLY_vec3ToFloat2_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat2_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd2\n\tfloat v_POLY_multAdd2_val = (-1.0*(v_POLY_param1_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd4\n\tfloat v_POLY_multAdd4_val = (0.3*(v_POLY_param2_val + 0.0)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_2\n\tvec2 v_POLY_floatToVec2_2_vec2 = vec2(v_POLY_vec3ToFloat2_x, v_POLY_vec3ToFloat2_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/clamp1\n\tfloat v_POLY_clamp1_val = clamp(v_POLY_multAdd4_val, 0.0, 0.58);\n\t\n\t// /ground/MAT/meshStandardBuilder1/SDF2DCircle1\n\tfloat v_POLY_SDF2DCircle1_float = sdCircle(v_POLY_floatToVec2_2_vec2 - vec2(0.0, 0.0), 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd3\n\tfloat v_POLY_multAdd3_val = (1.0*(v_POLY_SDF2DCircle1_float + v_POLY_multAdd2_val)) + 0.0;\n\t\n\t// /ground/MAT/meshStandardBuilder1/multAdd1\n\tfloat v_POLY_multAdd1_val = (9.8*(v_POLY_multAdd3_val + 0.0)) + 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/fitTo01_1\n\tfloat v_POLY_fitTo01_1_val = fitTo01(v_POLY_sin1_val, 0.0, 1.0);\n\t\n\t// /ground/MAT/meshStandardBuilder1/fitFrom01_1\n\tfloat v_POLY_fitFrom01_1_val = fitFrom01(v_POLY_fitTo01_1_val, 0.08, 0.22);\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec3_2\n\tvec3 v_POLY_floatToVec3_2_vec3 = vec3(v_POLY_fitFrom01_1_val, v_POLY_clamp1_val, 0.35);\n\t\n\t// /ground/MAT/meshStandardBuilder1/hsvToRgb1\n\tvec3 v_POLY_hsvToRgb1_rgb = hsv2rgb(v_POLY_floatToVec3_2_vec3);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_hsvToRgb1_rgb;\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":{"/geo1/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor1/rayFromCursor1\n\tv_POLY_rayFromCursor1_Ray = computed(() => globalsRayFromCursor());\n\n\t// /geo1/actor1/plane1\n\tv_POLY_plane1_Plane = computed(() => planeSet(VAR__plane1_normal.set(0, 0, 1), 0.0, VAR__plane1__1));\n\n\t// /geo1/actor1/rayIntersectPlane1\n\tv_POLY_rayIntersectPlane1_position = computed(() =>\n\t\trayIntersectPlane(this.v_POLY_rayFromCursor1_Ray.value, this.v_POLY_plane1_Plane.value, VAR__rayIntersectPlane1_)\n\t);\n\n\t// /geo1/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /geo1/actor1/onTick1\n\tonTick1() {\n\t\tthis.setObjectPosition1(0);\n\t}\n\n\t// /geo1/actor1/setObjectPosition1\n\tsetObjectPosition1() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition1_position.copy(this.v_POLY_rayIntersectPlane1_position.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/ground/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /ground/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\t// /ground/actor1/getObjectAttribute1\n\tv_POLY_getObjectAttribute1_val = computed(() => getObjectAttribute(this.object3D, \"speed\", \"float\", 0.0));\n\n\t// /ground/actor1/getObjectAttribute2\n\tv_POLY_getObjectAttribute2_val = computed(() => getObjectAttribute(this.object3D, \"time\", \"float\", 0.0));\n\n\t// /ground/actor1/getObject1\n\tv_POLY_getObject1_Object3D = computed(() => getObject(this.object3D, false, \"*/sphere\"));\n\n\t// /ground/actor1/multAdd2\n\tv_POLY_multAdd2_val = computed(() =>\n\t\tmathFloat_4(multAdd, this.v_POLY_onTick1_delta.value, 0.0, this.v_POLY_getObjectAttribute1_val.value, 0.0)\n\t);\n\n\t// /ground/actor1/getObjectProperty1\n\tv_POLY_getObjectProperty1_position = computed(() =>\n\t\tgetObjectProperty(this.v_POLY_getObject1_Object3D.value, \"position\")\n\t);\n\n\t// /ground/actor1/add1\n\tv_POLY_add1_sum = computed(() =>\n\t\taddNumber(this.v_POLY_multAdd2_val.value, this.v_POLY_getObjectAttribute2_val.value, 0.0)\n\t);\n\n\t// /ground/actor1/length1\n\tv_POLY_length1_val = computed(() => lengthVector(VAR__length1_v.copy(this.v_POLY_getObjectProperty1_position.value)));\n\n\t// /ground/actor1/debug1\n\tv_POLY_debug1_float = computed(() =>\n\t\tdebug(this.object3D, \"/ground/actor1/debug1\", this.v_POLY_add1_sum.value, {\n\t\t\tdisplayValue: true,\n\t\t\tdisplayFrame: true,\n\t\t\tdisplayTime: false,\n\t\t\tdisplayNodePath: true,\n\t\t\tmessage: \"\",\n\t\t\tbundleByObject: true,\n\t\t})\n\t);\n\n\t// /ground/actor1/clamp1\n\tv_POLY_clamp1_clamped = computed(() => mathFloat_3(clamp, this.v_POLY_length1_val.value, 0.0, 4.0));\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /ground/actor1/onTick1\n\tonTick1() {\n\t\tthis.setObjectAttribute2(0);\n\t\tthis.setObjectAttribute1(0);\n\t}\n\n\t// /ground/actor1/setObjectAttribute2\n\tsetObjectAttribute2() {\n\t\tsetObjectAttribute(this.object3D, \"time\", 1.0, this.v_POLY_add1_sum.value, \"float\");\n\t\tthis.setMaterialUniform1(0);\n\t}\n\n\t// /ground/actor1/setMaterialUniform1\n\tsetMaterialUniform1() {\n\t\tsetMaterialUniformNumber(this.object3D.material, \"time\", this.v_POLY_debug1_float.value, 1.0, true, true);\n\t}\n\n\t// /ground/actor1/setObjectAttribute1\n\tsetObjectAttribute1() {\n\t\tsetObjectAttribute(this.object3D, \"speed\", 0.25, this.v_POLY_clamp1_clamped.value, \"float\");\n\t\tthis.setMaterialUniform2(0);\n\t}\n\n\t// /ground/actor1/setMaterialUniform2\n\tsetMaterialUniform2() {\n\t\tsetMaterialUniformNumber(this.object3D.material, \"speed\", this.v_POLY_clamp1_clamped.value, 1.0, true, true);\n\t}\n}\nreturn CustomActorEvaluator;\n"}}
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/perspectiveCamera1","isViewerInitLayoutData":true,"linkIndex":1,"overlayedNetwork":{"allowed":false,"displayed":false}}},"split_panel1":{"panelTypes":["params"],"currentPanelIndex":0,"panel_data":{"active_folder":556,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-211.34487010673115,"y":-263.7406339241704},"zoom":0.7448023410373259},"history":{"2":{"position":{"x":62.54553192632958,"y":223.1583293886238},"zoom":1.0222221069335933},"36":{"position":{"x":-47.717407964264886,"y":-361.413061682806},"zoom":1.0222221069335933},"121":{"position":{"x":-32.06523228593218,"y":-525.7609063052995},"zoom":1.0222221069335933},"532":{"position":{"x":-34.23913429635279,"y":-332.0652322859322},"zoom":1.0222221069335933},"553":{"position":{"x":-211.34487010673115,"y":-263.7406339241704},"zoom":0.7448023410373259},"1007":{"position":{"x":-202.82609291437288,"y":-146.8478370096836},"zoom":1.0222221069335933},"1269":{"position":{"x":-647.8299995275078,"y":-920.294119696835},"zoom":0.6292221069335929}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/ground/MAT/meshStandardBuilder1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/actor1","/ground","/","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1","/ground/MAT","/ground","/ground/actor1","/ground","/ground/MAT","/ground/MAT/meshStandardBuilder1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":19,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0}},"fullscreenPanelId":null,"saveOptions":{"checkRemoteAssetsUse":true,"minimizeFilesCount":false},"paramsModal":[]}
Used nodes
cop/envMap;cop/image;cop/imageEXR;event/cameraOrbitControls;mat/meshStandard;mat/meshStandardBuilder;obj/copNetwork;obj/geo;sop/actor;sop/attribCreate;sop/box;sop/cameraControls;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/objectProperties;sop/perspectiveCamera;sop/polarTransform;sop/sphere;sop/spotLight;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD;JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/geo1":"obj/geo","/geo1/sphere1":"sop/sphere","/geo1/transform1":"sop/transform","/geo1/material1":"sop/material","/geo1/MAT":"sop/materialsNetwork","/geo1/MAT/meshStandard1":"mat/meshStandard","/geo1/actor1":"sop/actor","/geo1/objectProperties1":"sop/objectProperties","/ground":"obj/geo","/ground/material1":"sop/material","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/ground/actor1":"sop/actor","/ground/attribCreate1":"sop/attribCreate","/ground/attribCreate2":"sop/attribCreate","/COP":"obj/copNetwork","/COP/envMap":"cop/envMap","/COP/imageEnv":"cop/imageEXR","/COP/image1":"cop/image","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/spotLight1":"sop/spotLight","/lights/polarTransform1":"sop/polarTransform","/lights/merge1":"sop/merge","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source