Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.73"}},"root":{"type":"root","nodes":{"ground":{"type":"geo","nodes":{"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"checkers1":{"type":"checkers","params":{"uv":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"value0","node":"constant1","output":"val"},{"index":1,"inputName":"value1","node":"constant2","output":"val"},{"index":2,"inputName":"blend","node":"checkers1","output":"checker"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"constant1":{"type":"constant","params":{"type":4,"color":[0.24313725490196078,0.5098039215686274,0.8549019607843137],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.047058823529411764,0.10196078431372549,0.17647058823529413],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}}},"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":[],"timeDependent":false,"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,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"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":[],"timeDependent":false,"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":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}}},"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","actor_toggle"],"flags":{"display":true}},"objectProperties1":{"type":"objectProperties","params":{"tname":1,"name":"spotLightToToggle"},"inputs":["polarTransform1"]},"actor_toggle":{"type":"actor","nodes":{"constant3":{"type":"constant","params":{"type":4,"string":"on"},"connection_points":{"in":[],"out":[{"name":"val","type":"string","isArray":false}]}},"setSpotLightIntensity1":{"type":"setSpotLightIntensity","params":{"intensity":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectAttributeUpdate1","output":"trigger"},null,{"index":2,"inputName":"intensity","node":"onObjectAttributeUpdate1","output":"newValue"}]},"onObjectAttributeUpdate1":{"type":"onObjectAttributeUpdate","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[null,{"index":1,"inputName":"attribName","node":"constant3","output":"val"}],"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"newValue","type":"float","isArray":false},{"name":"previousValue","type":"float","isArray":false}]}}},"inputs":["objectProperties1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["getObjectAttributeAutoDefault","getObjectAttributeRef","setSpotLightIntensity"],"serializedParamConfigs":[],"eventDatas":[]}}},"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.6095631336248215,0.3492780168039058,0.3818852299846185]}}},"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}},"buttons":{"type":"geo","nodes":{"sphere1":{"type":"sphere"},"transform1":{"type":"transform","params":{"t":[0,1,0]},"inputs":["sphere1"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandard1"},"inputs":["transform1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard","params":{"color":[0.5,0.5,0.5],"useMap":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","metalness":1,"roughness":0}},"meshStandard2":{"type":"meshStandard","params":{"color":[0.5,0.5,0.5],"useVertexColors":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","roughness":0.21}}}},"roundedBox1":{"type":"roundedBox","params":{"sizes":[2,0.6,1],"divisions":7}},"transform2":{"type":"transform","params":{"t":[2.14732766532833,0.0985634123757465,0]},"inputs":["merge2"]},"merge1":{"type":"merge","inputs":["actor_on_hover_update_material","actor_on_hover_update_material1"]},"actor_on_hover_set_cursor_to_pointer":{"type":"actor","nodes":{"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"setViewer1":{"type":"setViewer","params":{"className":{"overriden_options":{}},"set":{"overriden_options":{}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"set","node":"onObjectHover1","output":"hovered"}]}},"inputs":["merge1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["addObjectToObjectHoveredCheck","setViewer"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"actor_on_hover_update_material":{"type":"actor","nodes":{"setMaterialColor1":{"type":"setMaterialColor","params":{"color":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"color","node":"twoWaySwitch1","output":"val"}]},"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"twoWaySwitch1":{"type":"twoWaySwitch","params":{"condition":{"type":"boolean","default_value":false,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifTrue":{"type":"color","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":[0,0,0]},"ifFalse":{"type":"color","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":[0,0,0]}},"inputs":[{"index":0,"inputName":"condition","node":"onObjectHover1","output":"hovered"},{"index":1,"inputName":"ifTrue","node":"constant1","output":"val"},{"index":2,"inputName":"ifFalse","node":"constant2","output":"val"}],"connection_points":{"in":[{"name":"condition","type":"boolean","isArray":false},{"name":"ifTrue","type":"Color","isArray":false},{"name":"ifFalse","type":"Color","isArray":false}],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant1":{"type":"constant","params":{"type":1,"color":[1,1,1]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant2":{"type":"constant","params":{"type":1,"color":[0.5,0.5,0.5]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}}},"inputs":["material1"],"persisted_config":{"variableNames":["VAR__constant1_color","VAR__constant2_color","VAR__twoWaySwitch1_ifTrue","VAR__twoWaySwitch1_ifFalse","VAR__setMaterialColor1_color"],"variables":[{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]}],"functionNames":["colorSetRGB","addObjectToObjectHoveredCheck","setMaterialColor"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"actor_on_hover_update_material1":{"type":"actor","nodes":{"setMaterialColor1":{"type":"setMaterialColor","params":{"color":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"color","node":"twoWaySwitch1","output":"val"}]},"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"twoWaySwitch1":{"type":"twoWaySwitch","params":{"condition":{"type":"boolean","default_value":false,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifTrue":{"type":"color","default_value":[0,0,0],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifFalse":{"type":"color","default_value":[0,0,0],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"condition","node":"onObjectHover1","output":"hovered"},{"index":1,"inputName":"ifTrue","node":"constant1","output":"val"},{"index":2,"inputName":"ifFalse","node":"constant2","output":"val"}],"connection_points":{"in":[{"name":"condition","type":"boolean","isArray":false},{"name":"ifTrue","type":"Color","isArray":false},{"name":"ifFalse","type":"Color","isArray":false}],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant1":{"type":"constant","params":{"type":1,"color":[1,1,1]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant2":{"type":"constant","params":{"type":1,"color":[0.5,0.5,0.5]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}}},"inputs":["material2"],"persisted_config":{"variableNames":["VAR__constant1_color","VAR__constant2_color","VAR__twoWaySwitch1_ifTrue","VAR__twoWaySwitch1_ifFalse","VAR__setMaterialColor1_color"],"variables":[{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]}],"functionNames":["colorSetRGB","addObjectToObjectHoveredCheck","setMaterialColor"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"material2":{"type":"material","params":{"material":"../MAT/meshStandard2"},"inputs":["transform2"]},"text1":{"type":"text","params":{"text":"click","size":0.62,"segments":4,"justifyMode":2}},"merge2":{"type":"merge","params":{"compact":1},"inputs":["color2","color1"]},"transform3":{"type":"transform","params":{"t":[0,0.24588851617607205,0.27118340436319865],"r":[-90,0,0]},"inputs":["text1"]},"color1":{"type":"color","params":{"color":[0,0,0]},"inputs":["transform3"]},"color2":{"type":"color","inputs":["roundedBox1"]},"actor_move_down_on_click_and_update_light":{"type":"actor","nodes":{"setObjectPosition1":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectPointerdown1","output":"trigger"},null,{"index":2,"inputName":"position","node":"floatToVec3_1","output":"vec3"}]},"onObjectPointerdown1":{"type":"onObjectPointerdown","maxInputsCount":10},"constant1":{"type":"constant","params":{"float":-0.1},"connection_points":{"in":[],"out":[{"name":"val","type":"float","isArray":false}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"constant1","output":"val"}]},"setObjectPosition2":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onPointerup1","output":"trigger"},null,{"index":2,"inputName":"position","node":"floatToVec3_2","output":"vec3"}]},"constant2":{"type":"constant","connection_points":{"in":[],"out":[{"name":"val","type":"float","isArray":false}]}},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"constant2","output":"val"}]},"onPointerup1":{"type":"onPointerup"},"getObject1":{"type":"getObject","params":{"getCurrentObject":0,"mask":"*/spotLightToToggle"},"maxInputsCount":2},"setObjectAttribute1":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"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":"setObjectPosition1","output":"trigger"},{"index":1,"inputName":"Object3D","node":"getObject1","output":"Object3D"},{"index":2,"inputName":"attribName","node":"constant3","output":"val"},null,{"index":4,"inputName":"val","node":"complement1","output":"out"}],"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":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"getObjectAttribute1"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"Object3D","node":"getObject1","output":"Object3D"},{"index":1,"inputName":"attribName","node":"constant3","output":"val"}],"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}]}},"constant3":{"type":"constant","params":{"type":4,"string":"on"},"connection_points":{"in":[],"out":[{"name":"val","type":"string","isArray":false}]}},"complement1":{"type":"complement","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"in","node":"getObjectAttribute1","output":"val"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"out","type":"float","isArray":false}]}}},"inputs":["actor_on_hover_set_cursor_to_pointer"],"flags":{"display":true},"persisted_config":{"variableNames":["VAR__floatToVec3_1_","VAR__floatToVec3_2_","VAR__setObjectPosition1_position","VAR__setObjectPosition2_position"],"variables":[{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]}],"functionNames":["getObject","floatToVec3","getObjectAttribute","complement","mathFloat_1","addObjectToObjectPointerdownCheck","addObjectToPointerupCheck","setObjectPosition","setObjectAttribute"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointerdown","emitter":"canvas","jsType":"onObjectPointerdown"},{"type":"pointerup","emitter":"canvas","jsType":"onPointerup"}]}}},"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":{"ground":{"pos":[-50,-450],"nodes":{"material1":{"pos":[0,300]},"MAT":{"pos":[-200,300],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"globals1":{"pos":[-450,0]},"output1":{"pos":[400,0]},"vec3ToFloat1":{"pos":[-200,200]},"floatToVec2_1":{"pos":[-100,200]},"checkers1":{"pos":[50,200]},"mix1":{"pos":[250,0]},"constant1":{"pos":[50,-150]},"constant2":{"pos":[0,0]}}}}},"box1":{"pos":[0,100]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"nodes":{"hemisphereLight1":{"pos":[-50,0]},"spotLight1":{"pos":[300,0]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,600]},"objectProperties1":{"pos":[300,300]},"actor_toggle":{"pos":[300,450],"nodes":{"constant3":{"pos":[-250,250]},"setSpotLightIntensity1":{"pos":[350,150]},"onObjectAttributeUpdate1":{"pos":[-50,150]}}}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}},"buttons":{"pos":[-50,-350],"nodes":{"sphere1":{"pos":[0,50]},"transform1":{"pos":[0,200]},"material1":{"pos":[0,350]},"MAT":{"pos":[-200,350],"nodes":{"meshStandard1":{"pos":[0,-50]},"meshStandard2":{"pos":[0,150]}}},"roundedBox1":{"pos":[200,-200]},"transform2":{"pos":[350,200]},"merge1":{"pos":[150,650]},"actor_on_hover_set_cursor_to_pointer":{"pos":[150,800],"nodes":{"onObjectHover1":{"pos":[100,-200]},"setViewer1":{"pos":[400,-200]}}},"actor_on_hover_update_material":{"pos":[0,500],"selection":["setMaterialColor1","onObjectHover1","twoWaySwitch1","constant1","constant2"],"nodes":{"setMaterialColor1":{"pos":[400,-50]},"onObjectHover1":{"pos":[-100,-50]},"twoWaySwitch1":{"pos":[200,50]},"constant1":{"pos":[-100,100]},"constant2":{"pos":[-100,200]}}},"actor_on_hover_update_material1":{"pos":[350,500],"selection":["setMaterialColor1","onObjectHover1","twoWaySwitch1","constant1","constant2"],"nodes":{"setMaterialColor1":{"pos":[350,250]},"onObjectHover1":{"pos":[-150,250]},"twoWaySwitch1":{"pos":[150,350]},"constant1":{"pos":[-150,400]},"constant2":{"pos":[-150,500]}}},"material2":{"pos":[350,350]},"text1":{"pos":[450,-250]},"merge2":{"pos":[350,50]},"transform3":{"pos":[450,-150]},"color1":{"pos":[450,-50]},"color2":{"pos":[200,-50]},"actor_move_down_on_click_and_update_light":{"pos":[150,950],"nodes":{"setObjectPosition1":{"pos":[400,0]},"onObjectPointerdown1":{"pos":[-100,0]},"constant1":{"pos":[-100,250]},"floatToVec3_1":{"pos":[150,250]},"setObjectPosition2":{"pos":[400,550]},"constant2":{"pos":[-100,400]},"floatToVec3_2":{"pos":[150,400]},"onPointerup1":{"pos":[-100,550]},"getObject1":{"pos":[650,-250]},"setObjectAttribute1":{"pos":[1200,0]},"getObjectAttribute1":{"pos":[800,300]},"constant3":{"pos":[550,150]},"complement1":{"pos":[1050,300]}}}}}}},"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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n#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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}},"jsFunctionBodies":{"/lights/actor_toggle":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\tv_POLY_onObjectAttributeUpdate1_newValue = computed(() =>\n\t\tgetObjectAttributeAutoDefault(this.object3D, this.v_POLY_constant3_val.value, \"float\")\n\t);\n\n\t// /lights/actor_toggle/constant3\n\tv_POLY_constant3_val = { value: \"on\" };\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\n\t\tthis._watchStopHandles.push(\n\t\t\twatch(\n\t\t\t\tgetObjectAttributeRef(this.object3D, this.v_POLY_constant3_val.value, \"float\"),\n\t\t\t\t() => {\n\t\t\t\t\tthis.onObjectAttributeUpdate1();\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdeep: true,\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t}\n\t// insert body\n\n\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\tonObjectAttributeUpdate1() {\n\t\tthis.setSpotLightIntensity1(0);\n\t}\n\n\t// /lights/actor_toggle/setSpotLightIntensity1\n\tsetSpotLightIntensity1() {\n\t\tsetSpotLightIntensity(this.object3D, this.v_POLY_onObjectAttributeUpdate1_newValue.value, 1.0);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_set_cursor_to_pointer":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setViewer1(0);\n\t}\n\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/setViewer1\n\tsetViewer1() {\n\t\tsetViewer(\"active\", this.v_POLY_onObjectHover1_hovered.value);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_update_material":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_update_material/twoWaySwitch1\n\tv_POLY_twoWaySwitch1_val = computed(() =>\n\t\tthis.v_POLY_onObjectHover1_hovered.value\n\t\t\t? VAR__twoWaySwitch1_ifTrue.copy(this.v_POLY_constant1_val.value)\n\t\t\t: VAR__twoWaySwitch1_ifFalse.copy(this.v_POLY_constant2_val.value)\n\t);\n\n\t// /geo1/actor_on_hover_update_material/constant1\n\tv_POLY_constant1_val = { value: colorSetRGB(VAR__constant1_color, 1, 1, 1) };\n\n\t// /geo1/actor_on_hover_update_material/constant2\n\tv_POLY_constant2_val = { value: colorSetRGB(VAR__constant2_color, 0.5, 0.5, 0.5) };\n\n\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setMaterialColor1(0);\n\t}\n\n\t// /geo1/actor_on_hover_update_material/setMaterialColor1\n\tsetMaterialColor1() {\n\t\tsetMaterialColor(\n\t\t\tthis.object3D.material,\n\t\t\tVAR__setMaterialColor1_color.copy(this.v_POLY_twoWaySwitch1_val.value),\n\t\t\t1.0\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_update_material1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_update_material1/twoWaySwitch1\n\tv_POLY_twoWaySwitch1_val = computed(() =>\n\t\tthis.v_POLY_onObjectHover1_hovered.value\n\t\t\t? VAR__twoWaySwitch1_ifTrue.copy(this.v_POLY_constant1_val.value)\n\t\t\t: VAR__twoWaySwitch1_ifFalse.copy(this.v_POLY_constant2_val.value)\n\t);\n\n\t// /geo1/actor_on_hover_update_material1/constant1\n\tv_POLY_constant1_val = { value: colorSetRGB(VAR__constant1_color, 1, 1, 1) };\n\n\t// /geo1/actor_on_hover_update_material1/constant2\n\tv_POLY_constant2_val = { value: colorSetRGB(VAR__constant2_color, 0.5, 0.5, 0.5) };\n\n\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setMaterialColor1(0);\n\t}\n\n\t// /geo1/actor_on_hover_update_material1/setMaterialColor1\n\tsetMaterialColor1() {\n\t\tsetMaterialColor(\n\t\t\tthis.object3D.material,\n\t\t\tVAR__setMaterialColor1_color.copy(this.v_POLY_twoWaySwitch1_val.value),\n\t\t\t1.0\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_move_down_on_click_and_update_light":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_move_down_on_click_and_update_light/getObject1\n\tv_POLY_getObject1_Object3D = computed(() => getObject(this.object3D, false, \"*/spotLightToToggle\"));\n\n\t// /geo1/actor_move_down_on_click_and_update_light/floatToVec3_1\n\tv_POLY_floatToVec3_1_vec3 = computed(() =>\n\t\tfloatToVec3(0.0, this.v_POLY_constant1_val.value, 0.0, VAR__floatToVec3_1_)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/getObjectAttribute1\n\tv_POLY_getObjectAttribute1_val = computed(() =>\n\t\tgetObjectAttribute(this.v_POLY_getObject1_Object3D.value, this.v_POLY_constant3_val.value, \"float\", 0.0)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/floatToVec3_2\n\tv_POLY_floatToVec3_2_vec3 = computed(() =>\n\t\tfloatToVec3(0.0, this.v_POLY_constant2_val.value, 0.0, VAR__floatToVec3_2_)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/complement1\n\tv_POLY_complement1_out = computed(() => mathFloat_1(complement, this.v_POLY_getObjectAttribute1_val.value));\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant1\n\tv_POLY_constant1_val = { value: -0.1 };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant3\n\tv_POLY_constant3_val = { value: \"on\" };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant2\n\tv_POLY_constant2_val = { value: 0.0 };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\tv_POLY_onObjectPointerdown1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\t\taddObjectToObjectPointerdownCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectPointerdown1_Intersection,\n\t\t\t},\n\t\t\tpointerdown: { callback: this.onObjectPointerdown1.bind(this) },\n\t\t\tconfig: { button: { left: true, middle: true, right: true }, modifier: { ctrl: 1.0, shift: 1.0, alt: 1.0 } },\n\t\t});\n\n\t\t// /geo1/actor_move_down_on_click_and_update_light/onPointerup1\n\t\taddObjectToPointerupCheck(this.object3D, this, { pointerup: { callback: this.onPointerup1.bind(this) } });\n\t}\n\t// insert body\n\n\tonObjectPointerdown() {\n\t\tthis.onObjectPointerdown1();\n\t}\n\tonPointerup() {\n\t\tthis.onPointerup1();\n\t}\n\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\tonObjectPointerdown1() {\n\t\tthis.setObjectPosition1(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/onPointerup1\n\tonPointerup1() {\n\t\tthis.setObjectPosition2(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectPosition1\n\tsetObjectPosition1() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition1_position.copy(this.v_POLY_floatToVec3_1_vec3.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\n\t\tthis.setObjectAttribute1(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectAttribute1\n\tsetObjectAttribute1() {\n\t\tsetObjectAttribute(\n\t\t\tthis.v_POLY_getObject1_Object3D.value,\n\t\t\tthis.v_POLY_constant3_val.value,\n\t\t\t1.0,\n\t\t\tthis.v_POLY_complement1_out.value,\n\t\t\t\"float\"\n\t\t);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectPosition2\n\tsetObjectPosition2() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition2_position.copy(this.v_POLY_floatToVec3_2_vec3.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\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":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-350.2898240310004,"y":-579.8895220570685},"zoom":0.5962221069335927},"history":{"2":{"position":{"x":-46.218963020473396,"y":239.4247956825223},"zoom":1.0482221069335926},"36":{"position":{"x":-350.2898240310004,"y":-579.8895220570685},"zoom":0.5962221069335927},"195":{"position":{"x":-259.22612163135744,"y":-347.9750550291671},"zoom":0.8922221069335929},"273":{"position":{"x":-10.493959178345088,"y":-53.81598515576185},"zoom":1.0482221069335926},"413":{"position":{"x":-139.55104660933117,"y":-211.40942135592704},"zoom":0.960222106933593},"592":{"position":{"x":-605.1827264515325,"y":-273.5830900135215},"zoom":0.5772221069335927},"1046":{"position":{"x":-332.0729319172613,"y":-18.767114120545322},"zoom":0.968222106933593},"1142":{"position":{"x":-150,"y":-50},"zoom":0.8322221069335929},"1186":{"position":{"x":-174.03204605281638,"y":-260.2804029621435},"zoom":0.8322221069335929},"1643":{"position":{"x":125.50931490765129,"y":-60.98006810558218},"zoom":1.0362221069335928},"1659":{"position":{"x":-119.19484003710093,"y":-221.08944514617173},"zoom":0.7212221069335928},"1856":{"position":{"x":-676.564778816015,"y":-184.67288651623036},"zoom":0.6552221069335927},"2465":{"position":{"x":41.46384633399934,"y":-250.95522670098507},"zoom":0.7672221069335928},"2700":{"position":{"x":2.0445297844419486,"y":-149.25272888651062},"zoom":0.968222106933593}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/buttons","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/buttons","/buttons/actor_move_down_on_click_and_update_light","/buttons","/","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/","/buttons","/buttons/actor_move_down_on_click_and_update_light","/buttons","/","/buttons"],"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/box;sop/cameraControls;sop/color;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/objectProperties;sop/perspectiveCamera;sop/polarTransform;sop/roundedBox;sop/sphere;sop/spotLight;sop/text;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD;JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/ground":"obj/geo","/ground/material1":"sop/material","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/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","/lights/objectProperties1":"sop/objectProperties","/lights/actor_toggle":"sop/actor","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls","/buttons":"obj/geo","/buttons/sphere1":"sop/sphere","/buttons/transform1":"sop/transform","/buttons/material1":"sop/material","/buttons/MAT":"sop/materialsNetwork","/buttons/MAT/meshStandard1":"mat/meshStandard","/buttons/MAT/meshStandard2":"mat/meshStandard","/buttons/roundedBox1":"sop/roundedBox","/buttons/transform2":"sop/transform","/buttons/merge1":"sop/merge","/buttons/actor_on_hover_set_cursor_to_pointer":"sop/actor","/buttons/actor_on_hover_update_material":"sop/actor","/buttons/actor_on_hover_update_material1":"sop/actor","/buttons/material2":"sop/material","/buttons/text1":"sop/text","/buttons/merge2":"sop/merge","/buttons/transform3":"sop/transform","/buttons/color1":"sop/color","/buttons/color2":"sop/color","/buttons/actor_move_down_on_click_and_update_light":"sop/actor"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.73"}},"root":{"type":"root","nodes":{"ground":{"type":"geo","nodes":{"material1":{"type":"material","params":{"material":"../MAT/meshStandardBuilder1"},"inputs":["box1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"meshStandardBuilder1":{"type":"meshStandardBuilder","nodes":{"globals1":{"type":"globals"},"output1":{"type":"output","inputs":[null,null,{"index":2,"inputName":"color","node":"mix1","output":"mix"}]},"vec3ToFloat1":{"type":"vec3ToFloat","params":{"vec":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"vec","node":"globals1","output":"position"}]},"floatToVec2_1":{"type":"floatToVec2","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"x","node":"vec3ToFloat1","output":"x"},{"index":1,"inputName":"y","node":"vec3ToFloat1","output":"z"}]},"checkers1":{"type":"checkers","params":{"uv":{"overriden_options":{}},"freq":{"overriden_options":{}},"freqMult":{"overriden_options":{}}},"inputs":[{"index":0,"inputName":"uv","node":"floatToVec2_1","output":"vec2"}]},"mix1":{"type":"mix","params":{"value0":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"value1":{"type":"vector3","default_value":[0,0,0],"options":{"spare":true,"editable":false}},"blend":{"type":"float","default_value":0.5,"options":{"spare":true,"editable":false}}},"inputs":[{"index":0,"inputName":"value0","node":"constant1","output":"val"},{"index":1,"inputName":"value1","node":"constant2","output":"val"},{"index":2,"inputName":"blend","node":"checkers1","output":"checker"}],"connection_points":{"in":[{"name":"value0","type":"vec3"},{"name":"value1","type":"vec3"},{"name":"blend","type":"float"}],"out":[{"name":"mix","type":"vec3"}]}},"constant1":{"type":"constant","params":{"type":4,"color":[0.24313725490196078,0.5098039215686274,0.8549019607843137],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}},"constant2":{"type":"constant","params":{"type":4,"color":[0.047058823529411764,0.10196078431372549,0.17647058823529413],"asColor":true},"connection_points":{"in":[],"out":[{"name":"val","type":"vec3"}]}}},"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":[],"timeDependent":false,"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,"depthPacking":3201},"onBeforeCompileDataJSONWithoutShaders":{"paramConfigs":[],"timeDependent":false,"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":[],"timeDependent":false,"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":[],"timeDependent":false,"resolutionDependent":false,"raymarchingLightsWorldCoordsDependent":false}}}}}}},"box1":{"type":"box","params":{"sizes":[9.98,1,9.98],"center":[0,-0.5,0]}}},"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","actor_toggle"],"flags":{"display":true}},"objectProperties1":{"type":"objectProperties","params":{"tname":1,"name":"spotLightToToggle"},"inputs":["polarTransform1"]},"actor_toggle":{"type":"actor","nodes":{"constant3":{"type":"constant","params":{"type":4,"string":"on"},"connection_points":{"in":[],"out":[{"name":"val","type":"string","isArray":false}]}},"setSpotLightIntensity1":{"type":"setSpotLightIntensity","params":{"intensity":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectAttributeUpdate1","output":"trigger"},null,{"index":2,"inputName":"intensity","node":"onObjectAttributeUpdate1","output":"newValue"}]},"onObjectAttributeUpdate1":{"type":"onObjectAttributeUpdate","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[null,{"index":1,"inputName":"attribName","node":"constant3","output":"val"}],"connection_points":{"in":[{"name":"Object3D","type":"Object3D","isArray":false},{"name":"attribName","type":"string","isArray":false}],"out":[{"name":"trigger","type":"trigger","isArray":false},{"name":"newValue","type":"float","isArray":false},{"name":"previousValue","type":"float","isArray":false}]}}},"inputs":["objectProperties1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["getObjectAttributeAutoDefault","getObjectAttributeRef","setSpotLightIntensity"],"serializedParamConfigs":[],"eventDatas":[]}}},"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.6095631336248215,0.3492780168039058,0.3818852299846185]}}},"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}},"buttons":{"type":"geo","nodes":{"sphere1":{"type":"sphere"},"transform1":{"type":"transform","params":{"t":[0,1,0]},"inputs":["sphere1"]},"material1":{"type":"material","params":{"material":"../MAT/meshStandard1"},"inputs":["transform1"]},"MAT":{"type":"materialsNetwork","nodes":{"meshStandard1":{"type":"meshStandard","params":{"color":[0.5,0.5,0.5],"useMap":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","metalness":1,"roughness":0}},"meshStandard2":{"type":"meshStandard","params":{"color":[0.5,0.5,0.5],"useVertexColors":1,"map":"../../../COP/image1","useEnvMap":1,"envMap":"../../../COP/envMap","roughness":0.21}}}},"roundedBox1":{"type":"roundedBox","params":{"sizes":[2,0.6,1],"divisions":7}},"transform2":{"type":"transform","params":{"t":[2.14732766532833,0.0985634123757465,0]},"inputs":["merge2"]},"merge1":{"type":"merge","inputs":["actor_on_hover_update_material","actor_on_hover_update_material1"]},"actor_on_hover_set_cursor_to_pointer":{"type":"actor","nodes":{"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"setViewer1":{"type":"setViewer","params":{"className":{"overriden_options":{}},"set":{"overriden_options":{}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"set","node":"onObjectHover1","output":"hovered"}]}},"inputs":["merge1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["addObjectToObjectHoveredCheck","setViewer"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"actor_on_hover_update_material":{"type":"actor","nodes":{"setMaterialColor1":{"type":"setMaterialColor","params":{"color":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"color","node":"twoWaySwitch1","output":"val"}]},"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"twoWaySwitch1":{"type":"twoWaySwitch","params":{"condition":{"type":"boolean","default_value":false,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifTrue":{"type":"color","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":[0,0,0]},"ifFalse":{"type":"color","default_value":[1,1,1],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":[0,0,0]}},"inputs":[{"index":0,"inputName":"condition","node":"onObjectHover1","output":"hovered"},{"index":1,"inputName":"ifTrue","node":"constant1","output":"val"},{"index":2,"inputName":"ifFalse","node":"constant2","output":"val"}],"connection_points":{"in":[{"name":"condition","type":"boolean","isArray":false},{"name":"ifTrue","type":"Color","isArray":false},{"name":"ifFalse","type":"Color","isArray":false}],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant1":{"type":"constant","params":{"type":1,"color":[1,1,1]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant2":{"type":"constant","params":{"type":1,"color":[0.5,0.5,0.5]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}}},"inputs":["material1"],"persisted_config":{"variableNames":["VAR__constant1_color","VAR__constant2_color","VAR__twoWaySwitch1_ifTrue","VAR__twoWaySwitch1_ifFalse","VAR__setMaterialColor1_color"],"variables":[{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]}],"functionNames":["colorSetRGB","addObjectToObjectHoveredCheck","setMaterialColor"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"actor_on_hover_update_material1":{"type":"actor","nodes":{"setMaterialColor1":{"type":"setMaterialColor","params":{"color":{"overriden_options":{}},"lerp":{"overriden_options":{}}},"maxInputsCount":4,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectHover1","output":"trigger"},null,{"index":2,"inputName":"color","node":"twoWaySwitch1","output":"val"}]},"onObjectHover1":{"type":"onObjectHover","maxInputsCount":6},"twoWaySwitch1":{"type":"twoWaySwitch","params":{"condition":{"type":"boolean","default_value":false,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifTrue":{"type":"color","default_value":[0,0,0],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"ifFalse":{"type":"color","default_value":[0,0,0],"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"condition","node":"onObjectHover1","output":"hovered"},{"index":1,"inputName":"ifTrue","node":"constant1","output":"val"},{"index":2,"inputName":"ifFalse","node":"constant2","output":"val"}],"connection_points":{"in":[{"name":"condition","type":"boolean","isArray":false},{"name":"ifTrue","type":"Color","isArray":false},{"name":"ifFalse","type":"Color","isArray":false}],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant1":{"type":"constant","params":{"type":1,"color":[1,1,1]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}},"constant2":{"type":"constant","params":{"type":1,"color":[0.5,0.5,0.5]},"connection_points":{"in":[],"out":[{"name":"val","type":"Color","isArray":false}]}}},"inputs":["material2"],"persisted_config":{"variableNames":["VAR__constant1_color","VAR__constant2_color","VAR__twoWaySwitch1_ifTrue","VAR__twoWaySwitch1_ifFalse","VAR__setMaterialColor1_color"],"variables":[{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]},{"type":"Color","data":[1,1,1]}],"functionNames":["colorSetRGB","addObjectToObjectHoveredCheck","setMaterialColor"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointermove","emitter":"canvas","jsType":"onObjectHover"}]}},"material2":{"type":"material","params":{"material":"../MAT/meshStandard2"},"inputs":["transform2"]},"text1":{"type":"text","params":{"text":"click","size":0.62,"segments":4,"justifyMode":2}},"merge2":{"type":"merge","params":{"compact":1},"inputs":["color2","color1"]},"transform3":{"type":"transform","params":{"t":[0,0.24588851617607205,0.27118340436319865],"r":[-90,0,0]},"inputs":["text1"]},"color1":{"type":"color","params":{"color":[0,0,0]},"inputs":["transform3"]},"color2":{"type":"color","inputs":["roundedBox1"]},"actor_move_down_on_click_and_update_light":{"type":"actor","nodes":{"setObjectPosition1":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onObjectPointerdown1","output":"trigger"},null,{"index":2,"inputName":"position","node":"floatToVec3_1","output":"vec3"}]},"onObjectPointerdown1":{"type":"onObjectPointerdown","maxInputsCount":10},"constant1":{"type":"constant","params":{"float":-0.1},"connection_points":{"in":[],"out":[{"name":"val","type":"float","isArray":false}]}},"floatToVec3_1":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"constant1","output":"val"}]},"setObjectPosition2":{"type":"setObjectPosition","params":{"position":{"overriden_options":{}},"lerp":{"overriden_options":{}},"updateMatrix":{"overriden_options":{}}},"maxInputsCount":5,"inputs":[{"index":0,"inputName":"trigger","node":"onPointerup1","output":"trigger"},null,{"index":2,"inputName":"position","node":"floatToVec3_2","output":"vec3"}]},"constant2":{"type":"constant","connection_points":{"in":[],"out":[{"name":"val","type":"float","isArray":false}]}},"floatToVec3_2":{"type":"floatToVec3","params":{"x":{"overriden_options":{}},"y":{"overriden_options":{}},"z":{"overriden_options":{}}},"inputs":[null,{"index":1,"inputName":"y","node":"constant2","output":"val"}]},"onPointerup1":{"type":"onPointerup"},"getObject1":{"type":"getObject","params":{"getCurrentObject":0,"mask":"*/spotLightToToggle"},"maxInputsCount":2},"setObjectAttribute1":{"type":"setObjectAttribute","params":{"attribName":{"type":"string","default_value":"","options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"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":"setObjectPosition1","output":"trigger"},{"index":1,"inputName":"Object3D","node":"getObject1","output":"Object3D"},{"index":2,"inputName":"attribName","node":"constant3","output":"val"},null,{"index":4,"inputName":"val","node":"complement1","output":"out"}],"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":false,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":"getObjectAttribute1"},"defaultFloat":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false}}},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"Object3D","node":"getObject1","output":"Object3D"},{"index":1,"inputName":"attribName","node":"constant3","output":"val"}],"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}]}},"constant3":{"type":"constant","params":{"type":4,"string":"on"},"connection_points":{"in":[],"out":[{"name":"val","type":"string","isArray":false}]}},"complement1":{"type":"complement","params":{"in":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}}},"inputs":[{"index":0,"inputName":"in","node":"getObjectAttribute1","output":"val"}],"connection_points":{"in":[{"name":"in","type":"float","isArray":false}],"out":[{"name":"out","type":"float","isArray":false}]}}},"inputs":["actor_on_hover_set_cursor_to_pointer"],"flags":{"display":true},"persisted_config":{"variableNames":["VAR__floatToVec3_1_","VAR__floatToVec3_2_","VAR__setObjectPosition1_position","VAR__setObjectPosition2_position"],"variables":[{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]},{"type":"Vector3","data":[0,0,0]}],"functionNames":["getObject","floatToVec3","getObjectAttribute","complement","mathFloat_1","addObjectToObjectPointerdownCheck","addObjectToPointerupCheck","setObjectPosition","setObjectAttribute"],"serializedParamConfigs":[],"eventDatas":[{"type":"pointerdown","emitter":"canvas","jsType":"onObjectPointerdown"},{"type":"pointerup","emitter":"canvas","jsType":"onPointerup"}]}}},"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":{"ground":{"pos":[-50,-450],"nodes":{"material1":{"pos":[0,300]},"MAT":{"pos":[-200,300],"nodes":{"meshStandardBuilder1":{"pos":[0,200],"nodes":{"globals1":{"pos":[-450,0]},"output1":{"pos":[400,0]},"vec3ToFloat1":{"pos":[-200,200]},"floatToVec2_1":{"pos":[-100,200]},"checkers1":{"pos":[50,200]},"mix1":{"pos":[250,0]},"constant1":{"pos":[50,-150]},"constant2":{"pos":[0,0]}}}}},"box1":{"pos":[0,100]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"nodes":{"hemisphereLight1":{"pos":[-50,0]},"spotLight1":{"pos":[300,0]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,600]},"objectProperties1":{"pos":[300,300]},"actor_toggle":{"pos":[300,450],"nodes":{"constant3":{"pos":[-250,250]},"setSpotLightIntensity1":{"pos":[350,150]},"onObjectAttributeUpdate1":{"pos":[-50,150]}}}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}},"buttons":{"pos":[-50,-350],"nodes":{"sphere1":{"pos":[0,50]},"transform1":{"pos":[0,200]},"material1":{"pos":[0,350]},"MAT":{"pos":[-200,350],"nodes":{"meshStandard1":{"pos":[0,-50]},"meshStandard2":{"pos":[0,150]}}},"roundedBox1":{"pos":[200,-200]},"transform2":{"pos":[350,200]},"merge1":{"pos":[150,650]},"actor_on_hover_set_cursor_to_pointer":{"pos":[150,800],"nodes":{"onObjectHover1":{"pos":[100,-200]},"setViewer1":{"pos":[400,-200]}}},"actor_on_hover_update_material":{"pos":[0,500],"selection":["setMaterialColor1","onObjectHover1","twoWaySwitch1","constant1","constant2"],"nodes":{"setMaterialColor1":{"pos":[400,-50]},"onObjectHover1":{"pos":[-100,-50]},"twoWaySwitch1":{"pos":[200,50]},"constant1":{"pos":[-100,100]},"constant2":{"pos":[-100,200]}}},"actor_on_hover_update_material1":{"pos":[350,500],"selection":["setMaterialColor1","onObjectHover1","twoWaySwitch1","constant1","constant2"],"nodes":{"setMaterialColor1":{"pos":[350,250]},"onObjectHover1":{"pos":[-150,250]},"twoWaySwitch1":{"pos":[150,350]},"constant1":{"pos":[-150,400]},"constant2":{"pos":[-150,500]}}},"material2":{"pos":[350,350]},"text1":{"pos":[450,-250]},"merge2":{"pos":[350,50]},"transform3":{"pos":[450,-150]},"color1":{"pos":[450,-50]},"color2":{"pos":[200,-50]},"actor_move_down_on_click_and_update_light":{"pos":[150,950],"nodes":{"setObjectPosition1":{"pos":[400,0]},"onObjectPointerdown1":{"pos":[-100,0]},"constant1":{"pos":[-100,250]},"floatToVec3_1":{"pos":[150,250]},"setObjectPosition2":{"pos":[400,550]},"constant2":{"pos":[-100,400]},"floatToVec3_2":{"pos":[150,400]},"onPointerup1":{"pos":[-100,550]},"getObject1":{"pos":[650,-250]},"setObjectAttribute1":{"pos":[1200,0]},"getObjectAttribute1":{"pos":[800,300]},"constant3":{"pos":[550,150]},"complement1":{"pos":[1050,300]}}}}}}},"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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive * POLY_emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n","customDistanceMaterial.vertex":"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\n\t#include <alphatest_fragment>\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n","customDepthDOFMaterial.vertex":"#include <common>\n#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/checkers1\n// https://iquilezles.org/articles/checkerfiltering/\nfloat checkers(vec2 p) {\n\tvec2 s = sign(fract(p*.5)-.5);\n\treturn .5 - .5*s.x*s.y;\n}\nfloat checkersGrad( in vec2 p, in vec2 ddx, in vec2 ddy )\n{\n // filter kernel\n vec2 w = max(abs(ddx), abs(ddy)) + 0.01;\n // analytical integral (box filter)\n vec2 i = 2.0*(abs(fract((p-0.5*w)/2.0)-0.5)-abs(fract((p+0.5*w)/2.0)-0.5))/w;\n // xor pattern\n return 0.5 - 0.5*i.x*i.y;\n}\n\n\n\n\n\n\n\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/constant1\n\tvec3 v_POLY_constant1_val = vec3(0.24313725490196078, 0.5098039215686274, 0.8549019607843137);\n\t\n\t// /ground/MAT/meshStandardBuilder1/constant2\n\tvec3 v_POLY_constant2_val = vec3(0.047058823529411764, 0.10196078431372549, 0.17647058823529413);\n\t\n\t// /ground/MAT/meshStandardBuilder1/vec3ToFloat1\n\tfloat v_POLY_vec3ToFloat1_x = v_POLY_globals1_position.x;\n\tfloat v_POLY_vec3ToFloat1_z = v_POLY_globals1_position.z;\n\t\n\t// /ground/MAT/meshStandardBuilder1/floatToVec2_1\n\tvec2 v_POLY_floatToVec2_1_vec2 = vec2(v_POLY_vec3ToFloat1_x, v_POLY_vec3ToFloat1_z);\n\t\n\t// /ground/MAT/meshStandardBuilder1/checkers1\n\tvec2 v_POLY_checkers1_coord = v_POLY_floatToVec2_1_vec2*vec2(1.0, 1.0)*1.0;\n\tfloat v_POLY_checkers1_checker = checkersGrad(v_POLY_checkers1_coord, dFdx(v_POLY_checkers1_coord), dFdy(v_POLY_checkers1_coord));\n\t\n\t// /ground/MAT/meshStandardBuilder1/mix1\n\tvec3 v_POLY_mix1_mix = mix(v_POLY_constant1_val, v_POLY_constant2_val, v_POLY_checkers1_checker);\n\t\n\t// /ground/MAT/meshStandardBuilder1/output1\n\tdiffuseColor.xyz = v_POLY_mix1_mix;\n\tfloat POLY_metalness = 1.0;\n\tfloat POLY_roughness = 1.0;\n\tvec3 POLY_emissive = vec3(1.0, 1.0, 1.0);\n\tSSSModel POLY_SSSModel = SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 );\n\n\n\n\n\t// INSERT BODY\n\t// the new body lines should be added before the alphatest_fragment\n\t// so that alpha is set before (which is really how it would be set if the alphamap_fragment above was used by the material node parameters)\n\n\t#include <alphatest_fragment>\n\n\t#include <logdepthbuf_fragment>\n\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), diffuseColor.a );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n"}},"jsFunctionBodies":{"/lights/actor_toggle":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\tv_POLY_onObjectAttributeUpdate1_newValue = computed(() =>\n\t\tgetObjectAttributeAutoDefault(this.object3D, this.v_POLY_constant3_val.value, \"float\")\n\t);\n\n\t// /lights/actor_toggle/constant3\n\tv_POLY_constant3_val = { value: \"on\" };\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\n\t\tthis._watchStopHandles.push(\n\t\t\twatch(\n\t\t\t\tgetObjectAttributeRef(this.object3D, this.v_POLY_constant3_val.value, \"float\"),\n\t\t\t\t() => {\n\t\t\t\t\tthis.onObjectAttributeUpdate1();\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdeep: true,\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t}\n\t// insert body\n\n\t// /lights/actor_toggle/onObjectAttributeUpdate1\n\tonObjectAttributeUpdate1() {\n\t\tthis.setSpotLightIntensity1(0);\n\t}\n\n\t// /lights/actor_toggle/setSpotLightIntensity1\n\tsetSpotLightIntensity1() {\n\t\tsetSpotLightIntensity(this.object3D, this.v_POLY_onObjectAttributeUpdate1_newValue.value, 1.0);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_set_cursor_to_pointer":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setViewer1(0);\n\t}\n\n\t// /geo1/actor_on_hover_set_cursor_to_pointer/setViewer1\n\tsetViewer1() {\n\t\tsetViewer(\"active\", this.v_POLY_onObjectHover1_hovered.value);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_update_material":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_update_material/twoWaySwitch1\n\tv_POLY_twoWaySwitch1_val = computed(() =>\n\t\tthis.v_POLY_onObjectHover1_hovered.value\n\t\t\t? VAR__twoWaySwitch1_ifTrue.copy(this.v_POLY_constant1_val.value)\n\t\t\t: VAR__twoWaySwitch1_ifFalse.copy(this.v_POLY_constant2_val.value)\n\t);\n\n\t// /geo1/actor_on_hover_update_material/constant1\n\tv_POLY_constant1_val = { value: colorSetRGB(VAR__constant1_color, 1, 1, 1) };\n\n\t// /geo1/actor_on_hover_update_material/constant2\n\tv_POLY_constant2_val = { value: colorSetRGB(VAR__constant2_color, 0.5, 0.5, 0.5) };\n\n\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_update_material/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setMaterialColor1(0);\n\t}\n\n\t// /geo1/actor_on_hover_update_material/setMaterialColor1\n\tsetMaterialColor1() {\n\t\tsetMaterialColor(\n\t\t\tthis.object3D.material,\n\t\t\tVAR__setMaterialColor1_color.copy(this.v_POLY_twoWaySwitch1_val.value),\n\t\t\t1.0\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_on_hover_update_material1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_on_hover_update_material1/twoWaySwitch1\n\tv_POLY_twoWaySwitch1_val = computed(() =>\n\t\tthis.v_POLY_onObjectHover1_hovered.value\n\t\t\t? VAR__twoWaySwitch1_ifTrue.copy(this.v_POLY_constant1_val.value)\n\t\t\t: VAR__twoWaySwitch1_ifFalse.copy(this.v_POLY_constant2_val.value)\n\t);\n\n\t// /geo1/actor_on_hover_update_material1/constant1\n\tv_POLY_constant1_val = { value: colorSetRGB(VAR__constant1_color, 1, 1, 1) };\n\n\t// /geo1/actor_on_hover_update_material1/constant2\n\tv_POLY_constant2_val = { value: colorSetRGB(VAR__constant2_color, 0.5, 0.5, 0.5) };\n\n\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\tv_POLY_onObjectHover1_hovered = ref(false);\n\tv_POLY_onObjectHover1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\t\taddObjectToObjectHoveredCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectHover1_Intersection,\n\t\t\t},\n\t\t\thover: {\n\t\t\t\thoveredStateRef: this.v_POLY_onObjectHover1_hovered,\n\t\t\t\tonHoveredStateChange: this.onObjectHover1.bind(this),\n\t\t\t},\n\t\t});\n\t}\n\t// insert body\n\n\tonObjectHover() {\n\t\tthis.onObjectHover1();\n\t}\n\t// /geo1/actor_on_hover_update_material1/onObjectHover1\n\tonObjectHover1() {\n\t\tthis.setMaterialColor1(0);\n\t}\n\n\t// /geo1/actor_on_hover_update_material1/setMaterialColor1\n\tsetMaterialColor1() {\n\t\tsetMaterialColor(\n\t\t\tthis.object3D.material,\n\t\t\tVAR__setMaterialColor1_color.copy(this.v_POLY_twoWaySwitch1_val.value),\n\t\t\t1.0\n\t\t);\n\t}\n}\nreturn CustomActorEvaluator;\n","/buttons/actor_move_down_on_click_and_update_light":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor_move_down_on_click_and_update_light/getObject1\n\tv_POLY_getObject1_Object3D = computed(() => getObject(this.object3D, false, \"*/spotLightToToggle\"));\n\n\t// /geo1/actor_move_down_on_click_and_update_light/floatToVec3_1\n\tv_POLY_floatToVec3_1_vec3 = computed(() =>\n\t\tfloatToVec3(0.0, this.v_POLY_constant1_val.value, 0.0, VAR__floatToVec3_1_)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/getObjectAttribute1\n\tv_POLY_getObjectAttribute1_val = computed(() =>\n\t\tgetObjectAttribute(this.v_POLY_getObject1_Object3D.value, this.v_POLY_constant3_val.value, \"float\", 0.0)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/floatToVec3_2\n\tv_POLY_floatToVec3_2_vec3 = computed(() =>\n\t\tfloatToVec3(0.0, this.v_POLY_constant2_val.value, 0.0, VAR__floatToVec3_2_)\n\t);\n\n\t// /geo1/actor_move_down_on_click_and_update_light/complement1\n\tv_POLY_complement1_out = computed(() => mathFloat_1(complement, this.v_POLY_getObjectAttribute1_val.value));\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant1\n\tv_POLY_constant1_val = { value: -0.1 };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant3\n\tv_POLY_constant3_val = { value: \"on\" };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/constant2\n\tv_POLY_constant2_val = { value: 0.0 };\n\n\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\tv_POLY_onObjectPointerdown1_Intersection = ref(null);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\n\t\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\t\taddObjectToObjectPointerdownCheck(this.object3D, this, {\n\t\t\tpriority: { blockObjectsBehind: true, skipIfObjectsInFront: false },\n\t\t\tcpu: {\n\t\t\t\ttraverseChildren: true,\n\t\t\t\tpointsThreshold: 0.1,\n\t\t\t\tlineThreshold: 0.1,\n\t\t\t\tintersectionRef: this.v_POLY_onObjectPointerdown1_Intersection,\n\t\t\t},\n\t\t\tpointerdown: { callback: this.onObjectPointerdown1.bind(this) },\n\t\t\tconfig: { button: { left: true, middle: true, right: true }, modifier: { ctrl: 1.0, shift: 1.0, alt: 1.0 } },\n\t\t});\n\n\t\t// /geo1/actor_move_down_on_click_and_update_light/onPointerup1\n\t\taddObjectToPointerupCheck(this.object3D, this, { pointerup: { callback: this.onPointerup1.bind(this) } });\n\t}\n\t// insert body\n\n\tonObjectPointerdown() {\n\t\tthis.onObjectPointerdown1();\n\t}\n\tonPointerup() {\n\t\tthis.onPointerup1();\n\t}\n\t// /geo1/actor_move_down_on_click_and_update_light/onObjectPointerdown1\n\tonObjectPointerdown1() {\n\t\tthis.setObjectPosition1(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/onPointerup1\n\tonPointerup1() {\n\t\tthis.setObjectPosition2(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectPosition1\n\tsetObjectPosition1() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition1_position.copy(this.v_POLY_floatToVec3_1_vec3.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\n\t\tthis.setObjectAttribute1(0);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectAttribute1\n\tsetObjectAttribute1() {\n\t\tsetObjectAttribute(\n\t\t\tthis.v_POLY_getObject1_Object3D.value,\n\t\t\tthis.v_POLY_constant3_val.value,\n\t\t\t1.0,\n\t\t\tthis.v_POLY_complement1_out.value,\n\t\t\t\"float\"\n\t\t);\n\t}\n\n\t// /geo1/actor_move_down_on_click_and_update_light/setObjectPosition2\n\tsetObjectPosition2() {\n\t\tsetObjectPosition(\n\t\t\tthis.object3D,\n\t\t\tVAR__setObjectPosition2_position.copy(this.v_POLY_floatToVec3_2_vec3.value),\n\t\t\t1.0,\n\t\t\ttrue\n\t\t);\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":null,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-350.2898240310004,"y":-579.8895220570685},"zoom":0.5962221069335927},"history":{"2":{"position":{"x":-46.218963020473396,"y":239.4247956825223},"zoom":1.0482221069335926},"36":{"position":{"x":-350.2898240310004,"y":-579.8895220570685},"zoom":0.5962221069335927},"195":{"position":{"x":-259.22612163135744,"y":-347.9750550291671},"zoom":0.8922221069335929},"273":{"position":{"x":-10.493959178345088,"y":-53.81598515576185},"zoom":1.0482221069335926},"413":{"position":{"x":-139.55104660933117,"y":-211.40942135592704},"zoom":0.960222106933593},"592":{"position":{"x":-605.1827264515325,"y":-273.5830900135215},"zoom":0.5772221069335927},"1046":{"position":{"x":-332.0729319172613,"y":-18.767114120545322},"zoom":0.968222106933593},"1142":{"position":{"x":-150,"y":-50},"zoom":0.8322221069335929},"1186":{"position":{"x":-174.03204605281638,"y":-260.2804029621435},"zoom":0.8322221069335929},"1643":{"position":{"x":125.50931490765129,"y":-60.98006810558218},"zoom":1.0362221069335928},"1659":{"position":{"x":-119.19484003710093,"y":-221.08944514617173},"zoom":0.7212221069335928},"1856":{"position":{"x":-676.564778816015,"y":-184.67288651623036},"zoom":0.6552221069335927},"2465":{"position":{"x":41.46384633399934,"y":-250.95522670098507},"zoom":0.7672221069335928},"2700":{"position":{"x":2.0445297844419486,"y":-149.25272888651062},"zoom":0.968222106933593}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/buttons","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/buttons","/buttons/actor_move_down_on_click_and_update_light","/buttons","/","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/lights/actor_toggle","/lights","/","/buttons","/buttons/actor_move_down_on_click_and_update_light","/buttons","/","/buttons"],"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/box;sop/cameraControls;sop/color;sop/hemisphereLight;sop/material;sop/materialsNetwork;sop/merge;sop/objectProperties;sop/perspectiveCamera;sop/polarTransform;sop/roundedBox;sop/sphere;sop/spotLight;sop/text;sop/transform
Used operations
Used modules
Used assemblers
GL_MESH_STANDARD;JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/ground":"obj/geo","/ground/material1":"sop/material","/ground/MAT":"sop/materialsNetwork","/ground/MAT/meshStandardBuilder1":"mat/meshStandardBuilder","/ground/box1":"sop/box","/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","/lights/objectProperties1":"sop/objectProperties","/lights/actor_toggle":"sop/actor","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls","/buttons":"obj/geo","/buttons/sphere1":"sop/sphere","/buttons/transform1":"sop/transform","/buttons/material1":"sop/material","/buttons/MAT":"sop/materialsNetwork","/buttons/MAT/meshStandard1":"mat/meshStandard","/buttons/MAT/meshStandard2":"mat/meshStandard","/buttons/roundedBox1":"sop/roundedBox","/buttons/transform2":"sop/transform","/buttons/merge1":"sop/merge","/buttons/actor_on_hover_set_cursor_to_pointer":"sop/actor","/buttons/actor_on_hover_update_material":"sop/actor","/buttons/actor_on_hover_update_material1":"sop/actor","/buttons/material2":"sop/material","/buttons/text1":"sop/text","/buttons/merge2":"sop/merge","/buttons/transform3":"sop/transform","/buttons/color1":"sop/color","/buttons/color2":"sop/color","/buttons/actor_move_down_on_click_and_update_light":"sop/actor"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source