Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.70"}},"root":{"type":"root","nodes":{"geo1":{"type":"geo","nodes":{"code1":{"type":"code","params":{"codeTypescript":"\nconst otherPos = new Vector3();\nconst currentPos = new Vector3();\nconst tangent = new Vector3();\nconst tangentOffset = new Vector3();\nconst normalVector = new Vector3();\n\nexport class CodeSopProcessor extends BaseCodeSopProcessor {\n\toverride initializeProcessor() {}\n\toverride cook(inputCoreGroups: CoreGroup[]) {\n\t\tconst inputCoreGroup = inputCoreGroups[0];\n\t\tconst objects = inputCoreGroup.threejsObjectsWithGeo();\n\t\tfor (let object of objects) {\n\t\t\tthis._processObject(object);\n\t\t}\n\t\tthis.setCoreGroup(inputCoreGroup);\n\t}\n\tprivate _processObject(object: Object3DWithGeometry) {\n\t\tconst geometry = object.geometry;\n\t\tconst position = geometry.getAttribute('position');\n\t\tconst restP = geometry.getAttribute('restP');\n\t\tif (!position) {\n\t\t\treturn;\n\t\t}\n\t\tif (!restP) {\n\t\t\treturn console.warn('no restP');\n\t\t}\n\t\tconst {mult, twist} = this.pv;\n\t\tconst restPArray = restP.array;\n\t\tconst positionArray = position.array;\n\t\tconst stride = 3;\n\t\tconst pointsCount = position.count;\n\t\tfor (let i = 0; i < pointsCount; i++) {\n\t\t\tif (i < pointsCount - 1) {\n\t\t\t\tcurrentPos.fromArray(restPArray, i * stride);\n\t\t\t\totherPos.fromArray(restPArray, (i + 1) * stride);\n\t\t\t\ttangent.copy(currentPos).sub(otherPos);\n\t\t\t} else {\n\t\t\t\tcurrentPos.fromArray(restPArray, i * stride);\n\t\t\t\totherPos.fromArray(restPArray, (i - 1) * stride);\n\t\t\t\ttangent.copy(otherPos).sub(currentPos);\n\t\t\t}\n\t\t\ttangent.normalize();\n\t\t\ttangentOffset.copy(tangent);\n\t\t\ttangentOffset.x += 0.1;\n\t\t\ttangentOffset.normalize();\n\t\t\tnormalVector.crossVectors(tangentOffset, tangent);\n\t\t\tnormalVector.normalize();\n\t\t\tnormalVector.applyAxisAngle(tangent, i * twist);\n\n\t\t\tcurrentPos.add(normalVector.multiplyScalar(mult));\n\t\t\tcurrentPos.toArray(positionArray, i * stride);\n\t\t}\n\t}\n}\n","codeJavascript":"const otherPos = new Vector3();\nconst currentPos = new Vector3();\nconst tangent = new Vector3();\nconst tangentOffset = new Vector3();\nconst normalVector = new Vector3();\nexport class CodeSopProcessor extends BaseCodeSopProcessor {\n initializeProcessor() { }\n cook(inputCoreGroups) {\n const inputCoreGroup = inputCoreGroups[0];\n const objects = inputCoreGroup.threejsObjectsWithGeo();\n for (let object of objects) {\n this._processObject(object);\n }\n this.setCoreGroup(inputCoreGroup);\n }\n _processObject(object) {\n const geometry = object.geometry;\n const position = geometry.getAttribute('position');\n const restP = geometry.getAttribute('restP');\n if (!position) {\n return;\n }\n if (!restP) {\n return console.warn('no restP');\n }\n const { mult, twist } = this.pv;\n const restPArray = restP.array;\n const positionArray = position.array;\n const stride = 3;\n const pointsCount = position.count;\n for (let i = 0; i < pointsCount; i++) {\n if (i < pointsCount - 1) {\n currentPos.fromArray(restPArray, i * stride);\n otherPos.fromArray(restPArray, (i + 1) * stride);\n tangent.copy(currentPos).sub(otherPos);\n }\n else {\n currentPos.fromArray(restPArray, i * stride);\n otherPos.fromArray(restPArray, (i - 1) * stride);\n tangent.copy(otherPos).sub(currentPos);\n }\n tangent.normalize();\n tangentOffset.copy(tangent);\n tangentOffset.x += 0.1;\n tangentOffset.normalize();\n normalVector.crossVectors(tangentOffset, tangent);\n normalVector.normalize();\n normalVector.applyAxisAngle(tangent, i * twist);\n currentPos.add(normalVector.multiplyScalar(mult));\n currentPos.toArray(positionArray, i * stride);\n }\n }\n}\n","twist":{"type":"float","default_value":0,"options":{"spare":true,"range":[-1,1],"rangeLocked":[false,false]},"raw_input":0.32},"mult":{"type":"float","default_value":0,"options":{"spare":true},"raw_input":0.28}},"inputs":["restAttributes1"]},"line1":{"type":"line","params":{"length":1.3,"pointsCount":100,"origin":[-0.7,0,0]}},"restAttributes1":{"type":"restAttributes","inputs":["line1"]},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"compare1":{"type":"compare","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"value1":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":1}},"inputs":[{"index":0,"inputName":"value0","node":"mod1","output":"mod"}],"connection_points":{"in":[{"name":"value0","type":"float","isArray":false},{"name":"value1","type":"float","isArray":false}],"out":[{"name":"val","type":"boolean","isArray":false}]}},"mod1":{"type":"mod","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"value1":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":2}},"inputs":[{"index":0,"inputName":"value0","node":"onTick1","output":"time"}],"connection_points":{"in":[{"name":"value0","type":"float","isArray":false},{"name":"value1","type":"float","isArray":false}],"out":[{"name":"mod","type":"float","isArray":false}]}},"code2":{"type":"code","params":{"codeTypescript":"\nexport class CodeJsProcessor extends BaseCodeJsProcessor {\n\toverride initializeProcessor(){\n\t\tthis.io.inputs.setNamedInputConnectionPoints([\n\t\t\tnew JsConnectionPoint('myBoolParam', JsConnectionPointType.BOOLEAN),\n\t\t]);\n\t\tthis.io.outputs.setNamedOutputConnectionPoints([\n\t\t\tnew JsConnectionPoint(JsConnectionPointType.TRIGGER, JsConnectionPointType.TRIGGER),\n\t\t]);\n\t}\n\toverride setTriggerableLines(controller: JsLinesCollectionController) {\n\t\tconst object3D = this.inputObject3D(this, controller);\n\t\tconst myBoolParam = this.variableForInput(controller, 'myBoolParam');\n\n\t\tconst bodyLines = [\n\t\t\tobject3D + '.position.y = ' + myBoolParam + ' ? -1 : 1;',\n\t\t\tobject3D + '.updateMatrix()'\n\t\t];\n\t\tthis.addTriggerableLines(controller, bodyLines);\n\t}\n}\n","codeJavascript":"export class CodeJsProcessor extends BaseCodeJsProcessor {\n initializeProcessor() {\n this.io.inputs.setNamedInputConnectionPoints([\n new JsConnectionPoint('myBoolParam', JsConnectionPointType.BOOLEAN),\n ]);\n this.io.outputs.setNamedOutputConnectionPoints([\n new JsConnectionPoint(JsConnectionPointType.TRIGGER, JsConnectionPointType.TRIGGER),\n ]);\n }\n setTriggerableLines(controller) {\n const object3D = this.inputObject3D(this, controller);\n const myBoolParam = this.variableForInput(controller, 'myBoolParam');\n const bodyLines = [\n object3D + '.position.y = ' + myBoolParam + ' ? -1 : 1;',\n object3D + '.updateMatrix()'\n ];\n this.addTriggerableLines(controller, bodyLines);\n }\n}\n"},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,{"index":2,"inputName":"myBoolParam","node":"compare1","output":"val"}]}},"inputs":["code1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["globalsTime","globalsTimeDelta","mod","mathFloat_2"],"serializedParamConfigs":[],"eventDatas":[]}},"material1":{"type":"material","params":{"material":"../MAT/code1"},"inputs":["actor1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"code1":{"type":"code","params":{"fragment":"\nvarying vec3 vWorldPosition;\n\nvoid main() {\n\tfloat red = vWorldPosition.y > 0.0 ? 1.0 : 0.0;\n\tfloat green = vWorldPosition.y < 0.0 ? 1.0 : 0.0;\n\tgl_FragColor = vec4( red, green, 0.0, 1.0 );\n\n}"}}}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"ground":{"type":"geo","nodes":{"planeHelper1":{"type":"planeHelper","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}},"COP":{"type":"copNetwork","nodes":{"envMap":{"type":"envMap","inputs":["imageEnv"]},"imageEnv":{"type":"imageEXR","params":{"tminFilter":true,"tmagFilter":true,"tanisotropy":true,"useRendererMaxAnisotropy":true}},"image1":{"type":"image"}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.52}},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":1}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":3},"inputs":["spotLight1"]},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}},"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[-1.6108930987644972,-0.6807802670001655,-1.1710088707087154]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"geo1":{"pos":[-50,-350],"selection":["actor1"],"nodes":{"code1":{"pos":[100,400]},"line1":{"pos":[100,100]},"restAttributes1":{"pos":[100,250]},"actor1":{"pos":[100,550],"comment":"make sure to play the scene to see this node move the object up and down","nodes":{"onTick1":{"pos":[-200,0]},"compare1":{"pos":[50,100]},"mod1":{"pos":[-50,100]},"code2":{"pos":[350,0]}}},"material1":{"pos":[100,700]},"MAT":{"pos":[-100,700],"nodes":{"code1":{"pos":[-100,150]}}}}},"ground":{"pos":[-50,-450],"nodes":{"planeHelper1":{"pos":[-50,200]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"selection":["hemisphereLight1"],"nodes":{"hemisphereLight1":{"pos":[50,-50]},"spotLight1":{"pos":[300,-50]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,300]}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}}}},"shaders":{},"jsFunctionBodies":{"/geo1/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\t// /geo1/actor1/mod1\n\tv_POLY_mod1_mod = computed(() => mathFloat_2(mod, this.v_POLY_onTick1_time.value, 2.0));\n\n\t// /geo1/actor1/compare1\n\tv_POLY_compare1_val = computed(() => this.v_POLY_mod1_mod.value < 1.0);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /geo1/actor1/onTick1\n\tonTick1() {\n\t\tthis.code2(0);\n\t}\n\n\t// /geo1/actor1/code2\n\tcode2() {\n\t\tthis.object3D.position.y = this.v_POLY_compare1_val.value ? -1 : 1;\n\t\tthis.object3D.updateMatrix();\n\t}\n}\nreturn CustomActorEvaluator;\n"}}
Code editor
{"multiple_panel":{"split_ratio":0.66,"split_panel0":{"split_ratio":0.3888,"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":42,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-88.80436911988824,"y":-446.52176693374},"zoom":1.0222221069335933},"history":{"2":{"position":{"x":71.34988074539173,"y":262.2887685844555},"zoom":1.0222221069335933},"36":{"position":{"x":-88.80436911988824,"y":-446.52176693374},"zoom":1.0222221069335933},"114":{"position":{"x":100,"y":-200},"zoom":1.0222221069335933},"1022":{"position":{"x":-125.5434755026051,"y":2.826092914372881},"zoom":1.0222221069335933}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"split_panel1":{"panelTypes":["codePreview"],"currentPanelIndex":0,"panel_data":{"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/geo1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/geo1","/","/geo1","/geo1","/","/ground","/","/geo1","/geo1","/geo1","/","/geo1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":12,"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/code;obj/copNetwork;obj/geo;sop/actor;sop/cameraControls;sop/code;sop/hemisphereLight;sop/line;sop/material;sop/materialsNetwork;sop/merge;sop/perspectiveCamera;sop/planeHelper;sop/polarTransform;sop/restAttributes;sop/spotLight
Used operations
Used modules
Used assemblers
JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/geo1":"obj/geo","/geo1/code1":"sop/code","/geo1/line1":"sop/line","/geo1/restAttributes1":"sop/restAttributes","/geo1/actor1":"sop/actor","/geo1/material1":"sop/material","/geo1/MAT":"sop/materialsNetwork","/geo1/MAT/code1":"mat/code","/ground":"obj/geo","/ground/planeHelper1":"sop/planeHelper","/COP":"obj/copNetwork","/COP/envMap":"cop/envMap","/COP/imageEnv":"cop/imageEXR","/COP/image1":"cop/image","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/spotLight1":"sop/spotLight","/lights/polarTransform1":"sop/polarTransform","/lights/merge1":"sop/merge","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls"}
Js version
Editor version
Engine version
Name
*
Code
{"properties":{"frame":0,"maxFrame":600,"maxFrameLocked":false,"realtimeState":true,"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1","versions":{"polygonjs":"1.5.70"}},"root":{"type":"root","nodes":{"geo1":{"type":"geo","nodes":{"code1":{"type":"code","params":{"codeTypescript":"\nconst otherPos = new Vector3();\nconst currentPos = new Vector3();\nconst tangent = new Vector3();\nconst tangentOffset = new Vector3();\nconst normalVector = new Vector3();\n\nexport class CodeSopProcessor extends BaseCodeSopProcessor {\n\toverride initializeProcessor() {}\n\toverride cook(inputCoreGroups: CoreGroup[]) {\n\t\tconst inputCoreGroup = inputCoreGroups[0];\n\t\tconst objects = inputCoreGroup.threejsObjectsWithGeo();\n\t\tfor (let object of objects) {\n\t\t\tthis._processObject(object);\n\t\t}\n\t\tthis.setCoreGroup(inputCoreGroup);\n\t}\n\tprivate _processObject(object: Object3DWithGeometry) {\n\t\tconst geometry = object.geometry;\n\t\tconst position = geometry.getAttribute('position');\n\t\tconst restP = geometry.getAttribute('restP');\n\t\tif (!position) {\n\t\t\treturn;\n\t\t}\n\t\tif (!restP) {\n\t\t\treturn console.warn('no restP');\n\t\t}\n\t\tconst {mult, twist} = this.pv;\n\t\tconst restPArray = restP.array;\n\t\tconst positionArray = position.array;\n\t\tconst stride = 3;\n\t\tconst pointsCount = position.count;\n\t\tfor (let i = 0; i < pointsCount; i++) {\n\t\t\tif (i < pointsCount - 1) {\n\t\t\t\tcurrentPos.fromArray(restPArray, i * stride);\n\t\t\t\totherPos.fromArray(restPArray, (i + 1) * stride);\n\t\t\t\ttangent.copy(currentPos).sub(otherPos);\n\t\t\t} else {\n\t\t\t\tcurrentPos.fromArray(restPArray, i * stride);\n\t\t\t\totherPos.fromArray(restPArray, (i - 1) * stride);\n\t\t\t\ttangent.copy(otherPos).sub(currentPos);\n\t\t\t}\n\t\t\ttangent.normalize();\n\t\t\ttangentOffset.copy(tangent);\n\t\t\ttangentOffset.x += 0.1;\n\t\t\ttangentOffset.normalize();\n\t\t\tnormalVector.crossVectors(tangentOffset, tangent);\n\t\t\tnormalVector.normalize();\n\t\t\tnormalVector.applyAxisAngle(tangent, i * twist);\n\n\t\t\tcurrentPos.add(normalVector.multiplyScalar(mult));\n\t\t\tcurrentPos.toArray(positionArray, i * stride);\n\t\t}\n\t}\n}\n","codeJavascript":"const otherPos = new Vector3();\nconst currentPos = new Vector3();\nconst tangent = new Vector3();\nconst tangentOffset = new Vector3();\nconst normalVector = new Vector3();\nexport class CodeSopProcessor extends BaseCodeSopProcessor {\n initializeProcessor() { }\n cook(inputCoreGroups) {\n const inputCoreGroup = inputCoreGroups[0];\n const objects = inputCoreGroup.threejsObjectsWithGeo();\n for (let object of objects) {\n this._processObject(object);\n }\n this.setCoreGroup(inputCoreGroup);\n }\n _processObject(object) {\n const geometry = object.geometry;\n const position = geometry.getAttribute('position');\n const restP = geometry.getAttribute('restP');\n if (!position) {\n return;\n }\n if (!restP) {\n return console.warn('no restP');\n }\n const { mult, twist } = this.pv;\n const restPArray = restP.array;\n const positionArray = position.array;\n const stride = 3;\n const pointsCount = position.count;\n for (let i = 0; i < pointsCount; i++) {\n if (i < pointsCount - 1) {\n currentPos.fromArray(restPArray, i * stride);\n otherPos.fromArray(restPArray, (i + 1) * stride);\n tangent.copy(currentPos).sub(otherPos);\n }\n else {\n currentPos.fromArray(restPArray, i * stride);\n otherPos.fromArray(restPArray, (i - 1) * stride);\n tangent.copy(otherPos).sub(currentPos);\n }\n tangent.normalize();\n tangentOffset.copy(tangent);\n tangentOffset.x += 0.1;\n tangentOffset.normalize();\n normalVector.crossVectors(tangentOffset, tangent);\n normalVector.normalize();\n normalVector.applyAxisAngle(tangent, i * twist);\n currentPos.add(normalVector.multiplyScalar(mult));\n currentPos.toArray(positionArray, i * stride);\n }\n }\n}\n","twist":{"type":"float","default_value":0,"options":{"spare":true,"range":[-1,1],"rangeLocked":[false,false]},"raw_input":0.32},"mult":{"type":"float","default_value":0,"options":{"spare":true},"raw_input":0.28}},"inputs":["restAttributes1"]},"line1":{"type":"line","params":{"length":1.3,"pointsCount":100,"origin":[-0.7,0,0]}},"restAttributes1":{"type":"restAttributes","inputs":["line1"]},"actor1":{"type":"actor","nodes":{"onTick1":{"type":"onTick"},"compare1":{"type":"compare","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"value1":{"type":"float","default_value":0,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":1}},"inputs":[{"index":0,"inputName":"value0","node":"mod1","output":"mod"}],"connection_points":{"in":[{"name":"value0","type":"float","isArray":false},{"name":"value1","type":"float","isArray":false}],"out":[{"name":"val","type":"boolean","isArray":false}]}},"mod1":{"type":"mod","params":{"value0":{"type":"float","default_value":0,"options":{"spare":true,"editable":false,"computeOnDirty":true,"dependentOnFoundParam":false}},"value1":{"type":"float","default_value":1,"options":{"spare":true,"editable":true,"computeOnDirty":true,"dependentOnFoundParam":false},"raw_input":2}},"inputs":[{"index":0,"inputName":"value0","node":"onTick1","output":"time"}],"connection_points":{"in":[{"name":"value0","type":"float","isArray":false},{"name":"value1","type":"float","isArray":false}],"out":[{"name":"mod","type":"float","isArray":false}]}},"code2":{"type":"code","params":{"codeTypescript":"\nexport class CodeJsProcessor extends BaseCodeJsProcessor {\n\toverride initializeProcessor(){\n\t\tthis.io.inputs.setNamedInputConnectionPoints([\n\t\t\tnew JsConnectionPoint('myBoolParam', JsConnectionPointType.BOOLEAN),\n\t\t]);\n\t\tthis.io.outputs.setNamedOutputConnectionPoints([\n\t\t\tnew JsConnectionPoint(JsConnectionPointType.TRIGGER, JsConnectionPointType.TRIGGER),\n\t\t]);\n\t}\n\toverride setTriggerableLines(controller: JsLinesCollectionController) {\n\t\tconst object3D = this.inputObject3D(this, controller);\n\t\tconst myBoolParam = this.variableForInput(controller, 'myBoolParam');\n\n\t\tconst bodyLines = [\n\t\t\tobject3D + '.position.y = ' + myBoolParam + ' ? -1 : 1;',\n\t\t\tobject3D + '.updateMatrix()'\n\t\t];\n\t\tthis.addTriggerableLines(controller, bodyLines);\n\t}\n}\n","codeJavascript":"export class CodeJsProcessor extends BaseCodeJsProcessor {\n initializeProcessor() {\n this.io.inputs.setNamedInputConnectionPoints([\n new JsConnectionPoint('myBoolParam', JsConnectionPointType.BOOLEAN),\n ]);\n this.io.outputs.setNamedOutputConnectionPoints([\n new JsConnectionPoint(JsConnectionPointType.TRIGGER, JsConnectionPointType.TRIGGER),\n ]);\n }\n setTriggerableLines(controller) {\n const object3D = this.inputObject3D(this, controller);\n const myBoolParam = this.variableForInput(controller, 'myBoolParam');\n const bodyLines = [\n object3D + '.position.y = ' + myBoolParam + ' ? -1 : 1;',\n object3D + '.updateMatrix()'\n ];\n this.addTriggerableLines(controller, bodyLines);\n }\n}\n"},"maxInputsCount":3,"inputs":[{"index":0,"inputName":"trigger","node":"onTick1","output":"trigger"},null,{"index":2,"inputName":"myBoolParam","node":"compare1","output":"val"}]}},"inputs":["code1"],"persisted_config":{"variableNames":[],"variables":[],"functionNames":["globalsTime","globalsTimeDelta","mod","mathFloat_2"],"serializedParamConfigs":[],"eventDatas":[]}},"material1":{"type":"material","params":{"material":"../MAT/code1"},"inputs":["actor1"],"flags":{"display":true}},"MAT":{"type":"materialsNetwork","nodes":{"code1":{"type":"code","params":{"fragment":"\nvarying vec3 vWorldPosition;\n\nvoid main() {\n\tfloat red = vWorldPosition.y > 0.0 ? 1.0 : 0.0;\n\tfloat green = vWorldPosition.y < 0.0 ? 1.0 : 0.0;\n\tgl_FragColor = vec4( red, green, 0.0, 1.0 );\n\n}"}}}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"ground":{"type":"geo","nodes":{"planeHelper1":{"type":"planeHelper","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}},"COP":{"type":"copNetwork","nodes":{"envMap":{"type":"envMap","inputs":["imageEnv"]},"imageEnv":{"type":"imageEXR","params":{"tminFilter":true,"tmagFilter":true,"tanisotropy":true,"useRendererMaxAnisotropy":true}},"image1":{"type":"image"}}},"lights":{"type":"geo","nodes":{"hemisphereLight1":{"type":"hemisphereLight","params":{"intensity":0.52}},"spotLight1":{"type":"spotLight","params":{"decay":0.1,"distance":10,"castShadow":1}},"polarTransform1":{"type":"polarTransform","params":{"center":[0,0.7,0],"latitude":25.2,"depth":3},"inputs":["spotLight1"]},"merge1":{"type":"merge","inputs":["hemisphereLight1","polarTransform1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}},"cameras":{"type":"geo","nodes":{"perspectiveCamera1":{"type":"perspectiveCamera","params":{"position":[3.3,3.3,3.3]}},"cameraControls1":{"type":"cameraControls","nodes":{"cameraOrbitControls1":{"type":"cameraOrbitControls","params":{"target":[-1.6108930987644972,-0.6807802670001655,-1.1710088707087154]}}},"params":{"node":"cameraOrbitControls1"},"inputs":["perspectiveCamera1"],"flags":{"display":true}}},"params":{"CADLinearTolerance":{"overriden_options":{"callback":"{}"}},"CADAngularTolerance":{"overriden_options":{"callback":"{}"}},"CADCurveAbscissa":{"overriden_options":{"callback":"{}"}},"CADCurveTolerance":{"overriden_options":{"callback":"{}"}},"CADDisplayEdges":{"overriden_options":{"callback":"{}"}},"CADEdgesColor":{"overriden_options":{"callback":"{}"}},"CADDisplayMeshes":{"overriden_options":{"callback":"{}"}},"CADMeshesColor":{"overriden_options":{"callback":"{}"}},"CADWireframe":{"overriden_options":{"callback":"{}"}},"CSGFacetAngle":{"overriden_options":{"callback":"{}"}},"CSGLinesColor":{"overriden_options":{"callback":"{}"}},"CSGMeshesColor":{"overriden_options":{"callback":"{}"}},"CSGWireframe":{"overriden_options":{"callback":"{}"}},"QUADTriangles":{"overriden_options":{"callback":"{}"}},"QUADWireframe":{"overriden_options":{"callback":"{}"}},"TetScale":{"overriden_options":{"callback":"{}"}},"TetDisplayLines":{"overriden_options":{"callback":"{}"}},"TetDisplaySharedFaces":{"overriden_options":{"callback":"{}"}},"TetDisplayPoints":{"overriden_options":{"callback":"{}"}},"TetDisplayCenter":{"overriden_options":{"callback":"{}"}},"TetDisplaySphere":{"overriden_options":{"callback":"{}"}}},"flags":{"display":true}}},"params":{"mainCameraPath":"/cameras/cameras:sopGroup/perspectiveCamera1"}},"ui":{"nodes":{"geo1":{"pos":[-50,-350],"selection":["actor1"],"nodes":{"code1":{"pos":[100,400]},"line1":{"pos":[100,100]},"restAttributes1":{"pos":[100,250]},"actor1":{"pos":[100,550],"comment":"make sure to play the scene to see this node move the object up and down","nodes":{"onTick1":{"pos":[-200,0]},"compare1":{"pos":[50,100]},"mod1":{"pos":[-50,100]},"code2":{"pos":[350,0]}}},"material1":{"pos":[100,700]},"MAT":{"pos":[-100,700],"nodes":{"code1":{"pos":[-100,150]}}}}},"ground":{"pos":[-50,-450],"nodes":{"planeHelper1":{"pos":[-50,200]}}},"COP":{"pos":[-300,-50],"selection":["image1"],"nodes":{"envMap":{"pos":[50,250]},"imageEnv":{"pos":[50,100]},"image1":{"pos":[-200,100]}}},"lights":{"pos":[-50,-250],"selection":["hemisphereLight1"],"nodes":{"hemisphereLight1":{"pos":[50,-50]},"spotLight1":{"pos":[300,-50]},"polarTransform1":{"pos":[300,150]},"merge1":{"pos":[100,300]}}},"cameras":{"pos":[-50,-150],"nodes":{"perspectiveCamera1":{"pos":[0,-50]},"cameraControls1":{"pos":[0,150],"nodes":{"cameraOrbitControls1":{"pos":[0,0]}}}}}}},"shaders":{},"jsFunctionBodies":{"/geo1/actor1":"// insert defines\nclass CustomActorEvaluator extends ActorEvaluator {\n\t// insert members\n\n\t// /geo1/actor1/onTick1\n\tv_POLY_onTick1_time = computed(() => globalsTime());\n\tv_POLY_onTick1_delta = computed(() => globalsTimeDelta());\n\n\t// /geo1/actor1/mod1\n\tv_POLY_mod1_mod = computed(() => mathFloat_2(mod, this.v_POLY_onTick1_time.value, 2.0));\n\n\t// /geo1/actor1/compare1\n\tv_POLY_compare1_val = computed(() => this.v_POLY_mod1_mod.value < 1.0);\n\n\tconstructor(node, object3D) {\n\t\tsuper(node, object3D);\n\t\t// insert after constructor\n\t}\n\t// insert body\n\n\tonTick() {\n\t\tthis.onTick1();\n\t}\n\t// /geo1/actor1/onTick1\n\tonTick1() {\n\t\tthis.code2(0);\n\t}\n\n\t// /geo1/actor1/code2\n\tcode2() {\n\t\tthis.object3D.position.y = this.v_POLY_compare1_val.value ? -1 : 1;\n\t\tthis.object3D.updateMatrix();\n\t}\n}\nreturn CustomActorEvaluator;\n"}}
Code editor
{"multiple_panel":{"split_ratio":0.66,"split_panel0":{"split_ratio":0.3888,"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":42,"linkIndex":1}},"split_mode":"vertical"},"split_panel1":{"panelTypes":["network","params","viewer"],"currentPanelIndex":0,"panel_data":{"camera":{"position":{"x":-88.80436911988824,"y":-446.52176693374},"zoom":1.0222221069335933},"history":{"2":{"position":{"x":71.34988074539173,"y":262.2887685844555},"zoom":1.0222221069335933},"36":{"position":{"x":-88.80436911988824,"y":-446.52176693374},"zoom":1.0222221069335933},"114":{"position":{"x":100,"y":-200},"zoom":1.0222221069335933},"1022":{"position":{"x":-125.5434755026051,"y":2.826092914372881},"zoom":1.0222221069335933}},"paramsDisplayed":false,"linkIndex":1}},"split_mode":"horizontal"},"split_panel1":{"panelTypes":["codePreview"],"currentPanelIndex":0,"panel_data":{"linkIndex":1}},"split_mode":"horizontal"},"currentNodes":["/geo1","/","/","/","/","/","/","/"],"navigationHistory":{"nodePaths":{"1":["/","/geo1","/","/geo1","/geo1","/","/ground","/","/geo1","/geo1","/geo1","/","/geo1"],"2":["/"],"3":["/"],"4":["/"],"5":["/"],"6":["/"],"7":["/"],"8":["/"]},"index":{"1":12,"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/code;obj/copNetwork;obj/geo;sop/actor;sop/cameraControls;sop/code;sop/hemisphereLight;sop/line;sop/material;sop/materialsNetwork;sop/merge;sop/perspectiveCamera;sop/planeHelper;sop/polarTransform;sop/restAttributes;sop/spotLight
Used operations
Used modules
Used assemblers
JS_ACTOR
Used integrations
[]
Used assets
Nodes map
{"/geo1":"obj/geo","/geo1/code1":"sop/code","/geo1/line1":"sop/line","/geo1/restAttributes1":"sop/restAttributes","/geo1/actor1":"sop/actor","/geo1/material1":"sop/material","/geo1/MAT":"sop/materialsNetwork","/geo1/MAT/code1":"mat/code","/ground":"obj/geo","/ground/planeHelper1":"sop/planeHelper","/COP":"obj/copNetwork","/COP/envMap":"cop/envMap","/COP/imageEnv":"cop/imageEXR","/COP/image1":"cop/image","/lights":"obj/geo","/lights/hemisphereLight1":"sop/hemisphereLight","/lights/spotLight1":"sop/spotLight","/lights/polarTransform1":"sop/polarTransform","/lights/merge1":"sop/merge","/cameras":"obj/geo","/cameras/perspectiveCamera1":"sop/perspectiveCamera","/cameras/cameraControls1":"sop/cameraControls","/cameras/cameraControls1/cameraOrbitControls1":"event/cameraOrbitControls"}
Js version
Editor version
Engine version
Logout
0%
There was a problem displaying your scene:
view scene source