{"Document":{"ObjectName":"Scenario::ScenarioDocumentModel","id":1,"BaseScenario":{"ObjectName":"Scenario::BaseScenario","id":0,"Constraint":{"ObjectName":"Scenario::IntervalModel","id":0,"Metadata":{"ScriptingName":"voxel-loader-and-sky","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Inlet":{"uuid":"a1574bb0-cbd4-4c7d-9417-0c25cfd1187b","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Audio In","Exposed":"audio in"},"Outlet":{"uuid":"a1d97535-18ac-444a-8417-0cbc1692d897","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Audio Out","Exposed":"audio out","Address":"audio:/out/main","GainInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10000,"Hidden":false,"Custom":"Gain","Exposed":"gain","Value":{},"Init":{},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},"PanInlet":{"uuid":"9a13fb32-269a-47bf-99a9-930188c1f19c","ObjectName":"Inlet","id":10001,"Hidden":false,"Custom":"Pan","Exposed":"pan","Value":{},"Init":{},"Domain":{}},"Gain":1.0,"Pan":[1.0,1.0],"Propagate":true},"Processes":[{"uuid":"a7c3e1b4-9f2d-4e8a-b6c5-1d3f7e9a2b4c","ObjectName":"voxel_loader","id":6,"Metadata":{"ScriptingName":"Voxel loader","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[-815.5,-235.5],"Size":[244.0,173.0],"Loops":false,"FoldMode":2,"Inlets":[{"uuid":"40833147-4c42-4b8b-bb80-0b1d15dae129","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Voxel file","Exposed":"voxel file","Value":{"String":"<PROJECT>:Files/Can Models(Nabeel).vox"},"Init":{"String":""},"Domain":{},"Filters":"Voxel files (*.vox)"},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Mode","Exposed":"mode","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1,2]}},"Values":[["Point Cloud",{"Int":0}],["Mesh (Simple)",{"Int":1}],["Mesh (Greedy)",{"Int":2}]],"FolderPort":"","FileExtensions":""},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Position","Exposed":"position","Value":{"Vec3f":[-55.17897033691406,-28.408205032348633,-204.54425048828125]},"Init":{"Vec3f":[0.0,0.0,0.0]},"Domain":{"Vec3f":{"Min":[-8388608.0,-8388608.0,-8388608.0],"Max":[8388608.0,8388608.0,8388608.0],"Values":[[],[],[]]}}},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Rotation","Exposed":"rotation","Value":{"Vec3f":[267.1164855957031,0.0,0.0]},"Init":{"Vec3f":[0.0,0.0,0.0]},"Domain":{"Vec3f":{"Min":[0.0,0.0,0.0],"Max":[360.0,360.0,360.0],"Values":[[],[],[]]}}},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Scale","Exposed":"scale","Value":{"Vec3f":[1.0,1.0,1.0]},"Init":{"Vec3f":[1.0,1.0,1.0]},"Domain":{"Vec3f":{"Min":[0.000009999999747378752,0.000009999999747378752,0.000009999999747378752],"Max":[1000.0,1000.0,1000.0],"Values":[[],[],[]]}}}],"Outlets":[{"uuid":"848061c5-e8a0-4a13-9985-e8df30ce6d4f","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Geometry","Exposed":"geometry"}]},{"uuid":"dbfc2101-40d7-4807-8804-571e88992e7e","ObjectName":"gfxProcess","id":7,"Metadata":{"ScriptingName":"VoxelMeshRenderer","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[65.9793772385044,-274.0596441362882],"Size":[656.0,177.0],"Loops":false,"FoldMode":0,"Vertex":"// Reverse-Z (score project rule, CameraMath.hpp setReverseZPerspective): near -> NDC +1, far -> -1,\n// paired with the engine's GREATER depth compare and 0.0 depth clear. A standard GL projection here\n// makes the farthest fragment win.\nmat4 buildPerspective(float fovDeg, float aspect, float near, float far)\n{\n  float f = 1.0 / tan(radians(fovDeg) * 0.5);\n  float nf = 1.0 / (near - far);\n  return mat4(\n    f / aspect, 0.0, 0.0,                   0.0,\n    0.0,        f,   0.0,                   0.0,\n    0.0,        0.0, -(far + near) * nf,    -1.0,\n    0.0,        0.0, -2.0 * far * near * nf, 0.0\n  );\n}\n\nmat4 buildLookAt(vec3 eye, vec3 target, vec3 up)\n{\n  vec3 f = normalize(target - eye);\n  vec3 s = normalize(cross(f, up));\n  vec3 u = cross(s, f);\n  return mat4(\n     s.x,          u.x,         -f.x,         0.0,\n     s.y,          u.y,         -f.y,         0.0,\n     s.z,          u.z,         -f.z,         0.0,\n    -dot(s, eye), -dot(u, eye),  dot(f, eye), 1.0\n  );\n}\n\nvoid main()\n{\n  isf_vertShaderInit();\n\n  // Palette lookup: material_id holds the palette index (1-255)\n  int palIdx = int(material_id);\n  // Each palette entry is 2 × vec4 (color + material props)\n  vec4 voxColor = vox_palette.entries[palIdx * 2];\n\n  // Apply model transform\n  vec4 worldPos4 = MODEL_MATRIX * vec4(position.xyz, 1.0);\n\n  // Camera\n  float aspect = RENDERSIZE.x / RENDERSIZE.y;\n  mat4 proj = buildPerspective(fov, aspect, nearPlane, farPlane);\n  mat4 view = buildLookAt(cameraPos, lookAt, vec3(0.0, 1.0, 0.0));\n\n  gl_Position = clipSpaceCorrMatrix * proj * view * worldPos4;\n\n  v_worldPos = worldPos4.xyz;\n  v_normal = normalize(mat3(MODEL_MATRIX) * normal.xyz);\n  v_color = voxColor;\n\n  isf_vertShaderFinish();\n}\n","Fragment":"/*{\n  \"DESCRIPTION\": \"Renders voxel meshes (from Voxel Loader in Mesh mode) with palette-based coloring and Minecraft-style flat face shading. Expects pre-built triangle mesh with position, normal, and material_id per vertex. Pipeline: Voxel Loader (Mesh mode) → VoxelMeshRenderer. Its own camera: cameraPos looking at lookAt.\",\n  \"CREDIT\": \"ossia score\",\n  \"ISFVSN\": \"2\",\n  \"MODE\": \"RAW_RASTER_PIPELINE\",\n  \"ALPHA\": \"straight\",\n  \"CATEGORIES\": [\"Renderer\", \"3D\", \"Voxel\"],\n  \"VERTEX_INPUTS\": [\n    { \"TYPE\": \"vec4\", \"NAME\": \"position\" },\n    { \"TYPE\": \"vec4\", \"NAME\": \"normal\" },\n    { \"TYPE\": \"float\", \"NAME\": \"material_id\" }\n  ],\n  \"VERTEX_OUTPUTS\": [\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_worldPos\" },\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_normal\" },\n    { \"TYPE\": \"vec4\", \"NAME\": \"v_color\" }\n  ],\n  \"FRAGMENT_INPUTS\": [\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_worldPos\" },\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_normal\" },\n    { \"TYPE\": \"vec4\", \"NAME\": \"v_color\" }\n  ],\n  \"FRAGMENT_OUTPUTS\": [\n    { \"TYPE\": \"vec4\", \"NAME\": \"isf_FragColor\" }\n  ],\n  \"AUXILIARY\": [\n    {\n      \"NAME\": \"vox_palette\",\n      \"ACCESS\": \"read_only\",\n      \"LAYOUT\": [\n        { \"NAME\": \"entries\", \"TYPE\": \"vec4[512]\" }\n      ]\n    }\n  ],\n  \"INPUTS\": [\n    {\n      \"NAME\": \"lightDir\",\n      \"TYPE\": \"point3D\",\n      \"DEFAULT\": [0.3, 0.8, 0.5],\n      \"MIN\": [-1.0, -1.0, -1.0],\n      \"MAX\": [1.0, 1.0, 1.0]\n    },\n    {\n      \"NAME\": \"ambient\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.3,\n      \"MIN\": 0.0,\n      \"MAX\": 1.0\n    },\n    {\n      \"NAME\": \"faceShading\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.15,\n      \"MIN\": 0.0,\n      \"MAX\": 0.5\n    },\n    {\n      \"NAME\": \"cameraPos\",\n      \"TYPE\": \"point3D\",\n      \"DEFAULT\": [3.0, 4.0, 3.0],\n      \"MIN\": [-100.0, -100.0, -100.0],\n      \"MAX\": [100.0, 100.0, 100.0]\n    },\n    {\n      \"NAME\": \"lookAt\",\n      \"TYPE\": \"point3D\",\n      \"DEFAULT\": [0.0, 0.0, 0.0],\n      \"MIN\": [-100.0, -100.0, -100.0],\n      \"MAX\": [100.0, 100.0, 100.0]\n    },\n    {\n      \"NAME\": \"fov\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 60.0,\n      \"MIN\": 10.0,\n      \"MAX\": 150.0\n    },\n    {\n      \"NAME\": \"nearPlane\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.01,\n      \"MIN\": 0.001,\n      \"MAX\": 10.0\n    },\n    {\n      \"NAME\": \"farPlane\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 500.0,\n      \"MIN\": 1.0,\n      \"MAX\": 10000.0\n    }\n  ]\n}*/\n\nvoid main()\n{\n  vec3 N = normalize(v_normal);\n  vec3 L = normalize(lightDir);\n\n  // Diffuse lighting\n  float NdotL = max(dot(N, L), 0.0);\n  float lighting = ambient + (1.0 - ambient) * NdotL;\n\n  // Per-face shading variation (Minecraft-style)\n  float faceModifier = 1.0;\n  vec3 absN = abs(N);\n  if(absN.y > 0.5)\n    faceModifier = N.y > 0.0 ? 1.0 + faceShading : 1.0 - faceShading;\n  else if(absN.x > 0.5)\n    faceModifier = 1.0 - faceShading * 0.5;\n\n  vec3 finalColor = v_color.rgb * lighting * faceModifier;\n\n  isf_FragColor = vec4(finalColor, v_color.a);\n}\n","Inlets":[{"uuid":"f2ab26ea-415d-45a2-bfbc-2968c7c92a33","ObjectName":"Inlet","id":1000,"Hidden":false,"Custom":"Geometry In","Exposed":"geometry in"},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Mode","Exposed":"mode","Value":{"Int":3},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3]}},"Values":[["Triangles",{"Int":0}],["Points",{"Int":1}],["Lines",{"Int":2}],["Geometry",{"Int":3}]],"FolderPort":"","FileExtensions":""},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"EnableBlend","Exposed":"enableblend","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"SrcColor","Exposed":"srccolor","Value":{"Int":1},"Init":{"Int":6},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"DstColor","Exposed":"dstcolor","Value":{"Int":1},"Init":{"Int":7},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"OpColor","Exposed":"opcolor","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3,4]}},"Values":[["Add",{"Int":0}],["Substract",{"Int":1}],["Reverse Substract",{"Int":2}],["Min",{"Int":3}],["Max",{"Int":4}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"SrcAlpha","Exposed":"srcalpha","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"DstAlpha","Exposed":"dstalpha","Value":{"Int":7},"Init":{"Int":7},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"OpAlpha","Exposed":"opalpha","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3,4]}},"Values":[["Add",{"Int":0}],["Substract",{"Int":1}],["Reverse Substract",{"Int":2}],["Min",{"Int":3}],["Max",{"Int":4}]],"FolderPort":"","FileExtensions":""},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"lightDir","Exposed":"lightdir","Value":{"Vec3f":[0.30000001192092896,0.800000011920929,0.5]},"Init":{"Vec3f":[0.30000001192092896,0.800000011920929,0.5]},"Domain":{"Vec3f":{"Min":[-1.0,-1.0,-1.0],"Max":[1.0,1.0,1.0],"Values":[[],[],[]]}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":9,"Hidden":true,"Custom":"ambient","Exposed":"ambient","Value":{"Float":0.8340777158737183},"Init":{"Float":0.30000001192092896},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":10,"Hidden":true,"Custom":"faceShading","Exposed":"faceshading","Value":{"Float":0.2178734540939331},"Init":{"Float":0.15000000596046448},"Domain":{"Float":{"Min":0.0,"Max":0.5}}},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":11,"Hidden":true,"Custom":"cameraPos","Exposed":"camerapos","Value":{"Vec3f":[3.0,4.0,3.0]},"Init":{"Vec3f":[3.0,4.0,3.0]},"Domain":{"Vec3f":{"Min":[-100.0,-100.0,-100.0],"Max":[100.0,100.0,100.0],"Values":[[],[],[]]}}},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":12,"Hidden":true,"Custom":"lookAt","Exposed":"lookat","Value":{"Vec3f":[0.0,2.2389848232269287,-6.862680912017822]},"Init":{"Vec3f":[0.0,0.0,0.0]},"Domain":{"Vec3f":{"Min":[-100.0,-100.0,-100.0],"Max":[100.0,100.0,100.0],"Values":[[],[],[]]}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":13,"Hidden":true,"Custom":"fov","Exposed":"fov","Value":{"Float":70.66666412353516},"Init":{"Float":60.0},"Domain":{"Float":{"Min":10.0,"Max":150.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":14,"Hidden":true,"Custom":"nearPlane","Exposed":"nearplane","Value":{"Float":0.9999999403953552},"Init":{"Float":0.009999999776482582},"Domain":{"Float":{"Min":0.0010000000474974513,"Max":10.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":15,"Hidden":true,"Custom":"farPlane","Exposed":"farplane","Value":{"Float":5000.0},"Init":{"Float":500.0},"Domain":{"Float":{"Min":1.0,"Max":10000.0}}},{"uuid":"f2ab26ea-415d-45a2-bfbc-2968c7c92a33","ObjectName":"Inlet","id":1001,"Hidden":false,"Custom":"Camera","Exposed":"camera"}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1000,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"4c91b5e2-8d76-4ab3-9f14-6e0d8b3a2c57","ObjectName":"camera_avnd","id":11,"Metadata":{"ScriptingName":"Camera","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[-495.5372017390875,-483.5820865334889],"Size":[274.0,177.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Eye","Exposed":"eye","Value":{"Vec3f":[1.0,0.07525012642145157,1.0]},"Init":{"Vec3f":[1.0,1.0,1.0]},"Domain":{"Vec3f":{"Min":[-10000.0,-10000.0,-10000.0],"Max":[10000.0,10000.0,10000.0],"Values":[[],[],[]]}}},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Target","Exposed":"target","Value":{"Vec3f":[0.0,0.0,0.0]},"Init":{"Vec3f":[0.0,0.0,0.0]},"Domain":{"Vec3f":{"Min":[-10000.0,-10000.0,-10000.0],"Max":[10000.0,10000.0,10000.0],"Values":[[],[],[]]}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"FOV","Exposed":"fov","Value":{"Float":60.0},"Init":{"Float":60.0},"Domain":{"Float":{"Min":5.0,"Max":170.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Near","Exposed":"near","Value":{"Float":0.10000000149011612},"Init":{"Float":0.10000000149011612},"Domain":{"Float":{"Min":0.0010000000474974513,"Max":10.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Far","Exposed":"far","Value":{"Float":1000.0},"Init":{"Float":1000.0},"Domain":{"Float":{"Min":1.0,"Max":100000.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"Roll","Exposed":"roll","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}}}],"Outlets":[{"uuid":"848061c5-e8a0-4a13-9985-e8df30ce6d4f","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Scene","Exposed":"scene"}]},{"uuid":"dbfc2101-40d7-4807-8804-571e88992e7e","ObjectName":"gfxProcess","id":13,"Metadata":{"ScriptingName":"classic_sky","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[257.9755432147544,-805.6039327480753],"Size":[766.0,496.0],"Loops":false,"FoldMode":2,"Vertex":"// Fullscreen-triangle vertex shader for classic_sky. Same gl_VertexIndex\n// + reverse-Z trick as classic_skybox.vert (see header there for the\n// Z=-0.9999 / DEPTH_OP:Greater rationale). The only difference: we also\n// pass the unprojected NDC.xy so the fragment can sample procedural\n// noise / clouds in a stable post-projection coordinate if it wants to.\n\nvoid main()\n{\n    isf_vertShaderInit();\n\n    int idx = gl_VertexIndex % 3;\n    vec2 ndc = vec2(\n        (idx & 1) != 0 ? 3.0 : -1.0,\n        (idx & 2) != 0 ? 3.0 : -1.0);\n\n    mat4 invVP = inverse(camera.viewProjection);\n    vec4 world_h = invVP * vec4(ndc, -1.0, 1.0);\n    vec3 world_far = world_h.xyz / world_h.w;\n    v_worldDir = world_far - camera.cameraPosition.xyz;\n\n    gl_Position = clipSpaceCorrMatrix * vec4(ndc, -0.9999, 1.0);\n\n    isf_vertShaderFinish();\n}\n","Fragment":"/*{\n  \"CREDIT\": \"ossia team\",\n  \"ISFVSN\": \"2\",\n  \"MODE\": \"RAW_RASTER_PIPELINE\",\n  \"DESCRIPTION\": \"Composable sky / background. Picks one base from the 'mode' enum (Solid color, Gradient, Procedural sky, Physical sky, Cubemap) and additively layers an optional sun disk, procedural moon (with phase shading), procedural pinpoint stars, fbm cumulus clouds, cirrus high-altitude streaks, and horizon haze. All sun / moon / cloud parameters are individual scalars so they animate from the score timeline / OSC / LFOs (real-time sun-following = wire your time source into 'sunYaw' and 'sunElevation'; cloudTime drives both cloud morphing and star twinkle). Wire AFTER scene geometry; same DEPTH_OP:Greater + Z=-0.9999 trick as classic_skybox so the background loses to anything closer. Cubemap mode requires the 'skybox' aux texture (resolves through the scene's auxiliary_texture table named 'skybox', exactly like classic_skybox / classic_pbr_ibl).\",\n  \"CATEGORIES\": [\"3D\", \"Scene\", \"Environment\", \"Background\"],\n\n  \"VERTEX_INPUTS\": [],\n  \"VERTEX_OUTPUTS\": [\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_worldDir\" }\n  ],\n  \"FRAGMENT_INPUTS\": [\n    { \"TYPE\": \"vec3\", \"NAME\": \"v_worldDir\" }\n  ],\n  \"FRAGMENT_OUTPUTS\": [\n    { \"TYPE\": \"vec4\", \"NAME\": \"isf_FragColor\" }\n  ],\n\n  \"INPUTS\": [\n    { \"NAME\": \"camera\", \"TYPE\": \"uniform\", \"VISIBILITY\": \"vertex+fragment\",\n      \"LAYOUT\": [\n        { \"NAME\": \"view\",           \"TYPE\": \"mat4\" },\n        { \"NAME\": \"projection\",     \"TYPE\": \"mat4\" },\n        { \"NAME\": \"viewProjection\", \"TYPE\": \"mat4\" },\n        { \"NAME\": \"cameraPosition\", \"TYPE\": \"vec4\" },\n        { \"NAME\": \"renderSize\",     \"TYPE\": \"vec4\" },\n        { \"NAME\": \"params\",         \"TYPE\": \"vec4\" }\n      ]\n    },\n\n    { \"NAME\": \"skybox\", \"TYPE\": \"cubemap\", \"VISIBILITY\": \"fragment\" },\n\n    { \"NAME\": \"cloudNoise3D\", \"TYPE\": \"image\", \"DIMENSIONS\": 3, \"VISIBILITY\": \"fragment\",\n      \"WRAP\": \"repeat\", \"WRAP_S\": \"repeat\", \"WRAP_T\": \"repeat\", \"WRAP_R\": \"repeat\",\n      \"FILTER\": \"linear\" },\n\n    { \"NAME\": \"mode\", \"TYPE\": \"long\", \"DEFAULT\": 2,\n      \"VALUES\": [0, 1, 2, 3, 4],\n      \"LABELS\": [\"Solid color\", \"Gradient\", \"Procedural sky\", \"Physical sky\", \"Cubemap\"] },\n\n    { \"NAME\": \"exposure\",     \"TYPE\": \"float\", \"MIN\": -8.0, \"MAX\": 8.0,  \"DEFAULT\": 0.0 },\n    { \"NAME\": \"skyLuminance\", \"TYPE\": \"float\", \"MIN\":  0.0, \"MAX\": 16.0, \"DEFAULT\": 1.0 },\n    { \"NAME\": \"ditherEnabled\", \"TYPE\": \"long\", \"DEFAULT\": 1, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n\n    { \"NAME\": \"solidColor\",     \"TYPE\": \"color\", \"DEFAULT\": [0.05, 0.07, 0.10, 1.0] },\n    { \"NAME\": \"zenithColor\",    \"TYPE\": \"color\", \"DEFAULT\": [0.20, 0.35, 0.65, 1.0] },\n    { \"NAME\": \"horizonColor\",   \"TYPE\": \"color\", \"DEFAULT\": [0.65, 0.70, 0.78, 1.0] },\n    { \"NAME\": \"groundColor\",    \"TYPE\": \"color\", \"DEFAULT\": [0.20, 0.17, 0.13, 1.0] },\n    { \"NAME\": \"skyCurve\",       \"TYPE\": \"float\", \"MIN\": 0.01,  \"MAX\": 1.0, \"DEFAULT\": 0.15 },\n    { \"NAME\": \"groundCurve\",    \"TYPE\": \"float\", \"MIN\": 0.005, \"MAX\": 1.0, \"DEFAULT\": 0.05 },\n\n    { \"NAME\": \"rayleigh\",        \"TYPE\": \"float\", \"MIN\":  0.0,  \"MAX\": 64.0,   \"DEFAULT\": 2.0 },\n    { \"NAME\": \"rayleighColor\",   \"TYPE\": \"color\", \"DEFAULT\": [0.30, 0.40, 0.60, 1.0] },\n    { \"NAME\": \"mie\",             \"TYPE\": \"float\", \"MIN\":  0.0,  \"MAX\": 1.0,    \"DEFAULT\": 0.005 },\n    { \"NAME\": \"mieEccentricity\", \"TYPE\": \"float\", \"MIN\": -0.99, \"MAX\": 0.99,   \"DEFAULT\": 0.80 },\n    { \"NAME\": \"mieColor\",        \"TYPE\": \"color\", \"DEFAULT\": [0.69, 0.73, 0.81, 1.0] },\n    { \"NAME\": \"turbidity\",       \"TYPE\": \"float\", \"MIN\":  0.0,  \"MAX\": 100.0,  \"DEFAULT\": 10.0 },\n    { \"NAME\": \"ozone\",           \"TYPE\": \"float\", \"MIN\":  0.0,  \"MAX\": 8.0,    \"DEFAULT\": 1.0 },\n    { \"NAME\": \"ozoneColor\",      \"TYPE\": \"color\", \"DEFAULT\": [1.0, 1.0, 1.0, 1.0] },\n\n    { \"NAME\": \"cubeRotation\", \"TYPE\": \"float\", \"MIN\": -180.0, \"MAX\": 180.0, \"DEFAULT\": 0.0 },\n\n    { \"NAME\": \"sunEnabled\",     \"TYPE\": \"long\",  \"DEFAULT\": 1, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"sunYaw\",         \"TYPE\": \"float\", \"MIN\": -180.0, \"MAX\": 180.0, \"DEFAULT\": 35.0 },\n    { \"NAME\": \"sunElevation\",   \"TYPE\": \"float\", \"MIN\":  -90.0, \"MAX\":  90.0, \"DEFAULT\": 25.0 },\n    { \"NAME\": \"sunColor\",       \"TYPE\": \"color\", \"DEFAULT\": [1.0, 0.95, 0.85, 1.0] },\n    { \"NAME\": \"sunIntensity\",   \"TYPE\": \"float\", \"MIN\":   0.0,  \"MAX\":  64.0, \"DEFAULT\": 1.0 },\n    { \"NAME\": \"sunAngularSize\", \"TYPE\": \"float\", \"MIN\":   0.05, \"MAX\":  30.0, \"DEFAULT\": 0.53 },\n    { \"NAME\": \"sunHaloFalloff\", \"TYPE\": \"float\", \"MIN\":   1.0,  \"MAX\": 4096.0, \"DEFAULT\": 256.0 },\n\n    { \"NAME\": \"moonEnabled\",     \"TYPE\": \"long\",  \"DEFAULT\": 0, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"moonYaw\",         \"TYPE\": \"float\", \"MIN\": -180.0, \"MAX\": 180.0, \"DEFAULT\": -120.0 },\n    { \"NAME\": \"moonElevation\",   \"TYPE\": \"float\", \"MIN\":  -90.0, \"MAX\":  90.0, \"DEFAULT\": 30.0 },\n    { \"NAME\": \"moonColor\",       \"TYPE\": \"color\", \"DEFAULT\": [0.95, 0.95, 1.0, 1.0] },\n    { \"NAME\": \"moonIntensity\",   \"TYPE\": \"float\", \"MIN\":   0.0,  \"MAX\":  16.0, \"DEFAULT\": 1.5 },\n    { \"NAME\": \"moonAngularSize\", \"TYPE\": \"float\", \"MIN\":   0.05, \"MAX\":  30.0, \"DEFAULT\": 0.52 },\n    { \"NAME\": \"moonHaloFalloff\", \"TYPE\": \"float\", \"MIN\":   1.0,  \"MAX\": 4096.0, \"DEFAULT\": 1024.0 },\n\n    { \"NAME\": \"starsEnabled\",     \"TYPE\": \"long\",  \"DEFAULT\": 0, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"starDensity\",      \"TYPE\": \"float\", \"MIN\": 0.1, \"MAX\": 4.0,  \"DEFAULT\": 1.0 },\n    { \"NAME\": \"starBrightness\",   \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 8.0,  \"DEFAULT\": 1.5 },\n    { \"NAME\": \"starTwinkleSpeed\", \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 16.0, \"DEFAULT\": 4.0 },\n\n    { \"NAME\": \"cloudsEnabled\",   \"TYPE\": \"long\",  \"DEFAULT\": 0, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"cloudNoiseSource\", \"TYPE\": \"long\", \"DEFAULT\": 0, \"VALUES\": [0, 1],\n      \"LABELS\": [\"Analytic fbm\", \"3D texture\"] },\n    { \"NAME\": \"cloudProjection\",  \"TYPE\": \"long\", \"DEFAULT\": 1, \"VALUES\": [0, 1, 2],\n      \"LABELS\": [\"Planar (dome)\", \"Spherical\", \"Clamped planar\"] },\n    { \"NAME\": \"cloudDebug\",       \"TYPE\": \"long\", \"DEFAULT\": 0, \"VALUES\": [0, 1],\n      \"LABELS\": [\"Off\", \"Show raw noise\"] },\n    { \"NAME\": \"cloudTexScale\",   \"TYPE\": \"float\", \"MIN\": 0.001, \"MAX\": 4.0, \"DEFAULT\": 0.5 },\n    { \"NAME\": \"cloudCoverage\",   \"TYPE\": \"float\", \"MIN\": 0.0,   \"MAX\": 1.0,    \"DEFAULT\": 0.50 },\n    { \"NAME\": \"cloudSoftness\",   \"TYPE\": \"float\", \"MIN\": 0.001, \"MAX\": 0.5,    \"DEFAULT\": 0.10 },\n    { \"NAME\": \"cloudScale\",      \"TYPE\": \"float\", \"MIN\": 0.1,   \"MAX\": 16.0,   \"DEFAULT\": 2.0 },\n    { \"NAME\": \"cloudWindX\",      \"TYPE\": \"float\", \"MIN\": -2.0,  \"MAX\": 2.0,    \"DEFAULT\": 0.05 },\n    { \"NAME\": \"cloudWindZ\",      \"TYPE\": \"float\", \"MIN\": -2.0,  \"MAX\": 2.0,    \"DEFAULT\": 0.0 },\n    { \"NAME\": \"cloudColor\",      \"TYPE\": \"color\", \"DEFAULT\": [1.0, 1.0, 1.0, 1.0] },\n    { \"NAME\": \"cloudShadow\",     \"TYPE\": \"color\", \"DEFAULT\": [0.55, 0.55, 0.62, 1.0] },\n    { \"NAME\": \"cloudSunsetTint\", \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 2.0, \"DEFAULT\": 1.0 },\n    { \"NAME\": \"cloudTime\",       \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 1.0e6, \"DEFAULT\": 0.0 },\n\n    { \"NAME\": \"cirrusEnabled\",   \"TYPE\": \"long\",  \"DEFAULT\": 0, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"cirrusCoverage\",  \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 1.0,  \"DEFAULT\": 0.4 },\n    { \"NAME\": \"cirrusScale\",     \"TYPE\": \"float\", \"MIN\": 0.1, \"MAX\": 16.0, \"DEFAULT\": 4.0 },\n    { \"NAME\": \"cirrusWindX\",     \"TYPE\": \"float\", \"MIN\": -2.0, \"MAX\": 2.0, \"DEFAULT\": 0.02 },\n    { \"NAME\": \"cirrusWindZ\",     \"TYPE\": \"float\", \"MIN\": -2.0, \"MAX\": 2.0, \"DEFAULT\": 0.0 },\n    { \"NAME\": \"cirrusColor\",     \"TYPE\": \"color\", \"DEFAULT\": [1.0, 1.0, 1.0, 1.0] },\n    { \"NAME\": \"cirrusElevStart\", \"TYPE\": \"float\", \"MIN\": 0.0, \"MAX\": 89.0, \"DEFAULT\": 25.0 },\n\n    { \"NAME\": \"hazeEnabled\",    \"TYPE\": \"long\",  \"DEFAULT\": 1, \"VALUES\": [0, 1], \"LABELS\": [\"Off\", \"On\"] },\n    { \"NAME\": \"hazeColor\",      \"TYPE\": \"color\", \"DEFAULT\": [0.78, 0.83, 0.88, 1.0] },\n    { \"NAME\": \"hazeFalloff\",    \"TYPE\": \"float\", \"MIN\": 0.5, \"MAX\": 64.0, \"DEFAULT\": 8.0 },\n    { \"NAME\": \"distanceF\",    \"TYPE\": \"float\", \"MIN\": -10, \"MAX\": 10, \"DEFAULT\": 0.0 }\n  ],\n\n  \"PIPELINE_STATE\": {\n    \"DEPTH_TEST\": true,\n    \"DEPTH_WRITE\": true,\n    \"DEPTH_OP\": \"Greater\",\n    \"CULL_MODE\": \"none\",\n    \"VERTEX_COUNT\": 3,\n    \"TOPOLOGY\": \"triangles\"\n  }\n}*/\n\n// =====================================================================\n// classic_sky — composable analytic sky / background\n//\n// Pipeline per fragment:\n//   1. Compute world-space view direction (interpolated from vert).\n//   2. Compute base color from the selected `mode`:\n//        Solid color    — flat solidColor\n//        Gradient       — two-color hemisphere with pow curve, ground mirror\n//        Procedural sky — Godot ProceduralSkyMaterial gradient\n//        Physical sky   — single-pass Preetham + Henyey-Greenstein + ozone\n//                         (Godot PhysicalSkyMaterial extended with Bevy\n//                         chromatic ozone term)\n//        Cubemap        — sample skybox at viewDir (with optional yaw rotation)\n//   3. Add stars overlay (procedural pinpoint, faded by sun elevation).\n//   4. Mix in procedural fbm cumulus clouds on the upper hemisphere.\n//   5. Mix in cirrus high-altitude streak layer.\n//   6. Add sun and moon disks (Filament-style limb-darkened pow halos;\n//      moon brightness modulated by lunar phase from dot(moonDir, sunDir)).\n//   7. Mix in horizon haze fog at low elevations.\n//   8. Apply skyLuminance × EV-stop exposure × triangular-PDF dither.\n//\n// Design notes:\n//   - Sun and moon directions are scalars (yaw, elevation in degrees),\n//     so they're trivially animatable from the score timeline / OSC /\n//     LFOs. \"Real-time sun following\" = drive these from a clock.\n//   - cloudTime is the unified time driver for cloud morphing AND star\n//     twinkle, so a single OSC source can run the whole sky animation.\n//   - All overlays are independently toggleable, so e.g. a cubemap with\n//     a sun + moon overlay on top works (Filament's signature pattern).\n//   - All math is single-pass: no LUTs, no precomputed transmittance\n//     volumes. Trades sunset accuracy for self-contained shipping in\n//     one frag shader.\n// =====================================================================\n\nconst float PI = 3.141592653589793;\nconst vec3  UP = vec3(0.0, 1.0, 0.0);\n\n// ------ utilities ----------------------------------------------------\n\nvec3 dirFromYawElev(float yawDeg, float elevDeg)\n{\n    float yaw = radians(yawDeg);\n    float el  = radians(elevDeg);\n    float ce = cos(el);\n    return vec3(sin(yaw) * ce, sin(el), cos(yaw) * ce);\n}\n\nfloat hash13(vec3 p)\n{\n    p = fract(p * 0.1031);\n    p += dot(p, p.yzx + 33.33);\n    return fract((p.x + p.y) * p.z);\n}\n\n// Period of the noise grid. valueNoise wraps integer cells modulo this\n// constant, so its hash repeats every NOISE_WRAP cells. Callers that\n// drive the input from time (wind, morph) MUST wrap their offsets to\n// the same period before sampling — that's what defeats the float\n// precision loss at large cloudTime: with NOISE_WRAP=1024 the noise\n// input never exceeds ~1024+visible_extent, so fract(p) keeps\n// sub-thousandth precision indefinitely. The wrap is seamless because\n// the hash returns the same value at i and i+NOISE_WRAP.\nconst float NOISE_WRAP = 1024.0;\n\nfloat valueNoise(vec3 p)\n{\n    vec3 i = floor(p);\n    vec3 f = fract(p);\n    f = f * f * (3.0 - 2.0 * f);\n    // Wrap integer cell coords. Hash inputs become small periodic ints,\n    // killing both the precision-loss tile artefact and any grid drift.\n    vec3 i0 = mod(i,        NOISE_WRAP);\n    vec3 i1 = mod(i + 1.0,  NOISE_WRAP);\n    float n000 = hash13(vec3(i0.x, i0.y, i0.z));\n    float n100 = hash13(vec3(i1.x, i0.y, i0.z));\n    float n010 = hash13(vec3(i0.x, i1.y, i0.z));\n    float n110 = hash13(vec3(i1.x, i1.y, i0.z));\n    float n001 = hash13(vec3(i0.x, i0.y, i1.z));\n    float n101 = hash13(vec3(i1.x, i0.y, i1.z));\n    float n011 = hash13(vec3(i0.x, i1.y, i1.z));\n    float n111 = hash13(vec3(i1.x, i1.y, i1.z));\n    return mix(\n        mix(mix(n000, n100, f.x), mix(n010, n110, f.x), f.y),\n        mix(mix(n001, n101, f.x), mix(n011, n111, f.x), f.y),\n        f.z);\n}\n\n// Per-octave rotation. Value noise has visible axis-aligned grid\n// artifacts; rotating the sampling frame between octaves prevents the\n// artifacts from stacking. det = 1 (no scaling), composed of two\n// 36.87° rotations around y then x (cos=0.8, sin=0.6).\nconst mat3 OCT_ROT = mat3(\n    0.80, 0.36, -0.48,\n    0.00, 0.80,  0.60,\n    0.60, 0.48,  0.64);\n\nfloat fbm3(vec3 p)\n{\n    float a = 0.5;\n    float s = 0.0;\n    for(int i = 0; i < 3; ++i)\n    {\n        s += a * valueNoise(p);\n        p = OCT_ROT * p * 2.03;\n        a *= 0.5;\n    }\n    return s;  // ~ [0, 1]\n}\n\n// Wrap the time-driven offset to NOISE_WRAP before adding it to the\n// world coord. Keeps the absolute noise input small so float precision\n// stays tight even at cloudTime = 1e8+. Use this for any wind/morph\n// term that scales linearly with time.\nfloat timeWrap(float t) { return mod(t, NOISE_WRAP); }\nvec2  timeWrap(vec2  t) { return mod(t, vec2(NOISE_WRAP)); }\n\n// Project the view direction into 3D noise-space coords with the chosen\n// projection. `stretch` lets cirrus override per-axis scaling to make\n// streaks instead of puffs (cumulus uses (1, 1)).\n//\n// Planar (0): uv = dir.xz / dir.y. The standard \"clouds-on-overhead-\n//   plane\" projection — physically correct for cumulus at finite\n//   altitude, but lines of constant uv are vertical world planes that\n//   *project to rays* on screen, all converging at the −Y vanishing\n//   point. Whenever that point is in or near the visible image (low\n//   FOV centred near the horizon, or any view containing the camera's\n//   \"down\" direction), the noise looks like a fan of beams instead of\n//   blobs. Cumulus on a fly-around still looks fine; static low-angle\n//   shots show the artifact.\n//\n// Spherical (1): texcoord = dir directly. Sample the volume along the\n//   view direction itself. dir lives in [-1, 1]^3 so the texcoord is\n//   bounded and isotropic — no projection rays at any view angle.\n//   Trade-off: clouds wrap the sky like they're painted on a ball\n//   around the camera, not a plane overhead. Visually the most robust\n//   default; recommended when feeding a 3D-texture noise generator.\n//\n// Clamped planar (2): planar but with max(dir.y, MIN_Y). Caps the\n//   horizon stretch so the rays' convergence point sits below MIN_Y in\n//   elevation (≈9° for MIN_Y=0.15) — usually under the haze line and\n//   out of sight. Compromise: keeps planar's \"clouds overhead\" feel\n//   without the worst of the rays.\nvec3 projectForNoise(vec3 dir, float scale, vec2 wind, float morph, vec2 stretch)\n{\n    if(cloudProjection == 1)\n    {\n        return vec3(dir.x * scale * stretch.x + wind.x,\n                    dir.z * scale * stretch.y + wind.y,\n                    dir.y * scale + morph);\n    }\n    float y = (cloudProjection == 2) ? max(dir.y, 0.15) : dir.y;\n    vec2 uv = dir.xz / y;\n    return vec3(uv.x * scale * stretch.x + wind.x,\n                uv.y * scale * stretch.y + wind.y,\n                morph);\n}\n\n// Dispatch: analytic fbm (cheap, lower quality) or 3D texture sample\n// (one tap, hardware-filtered, quality bounded by the source generator\n// — Perlin-Worley, Voronoi, anything the user wires in). The texture\n// samples the .r channel; multi-channel volumes (Schneider-style\n// Perlin-Worley packed RGBA) are easy to add later by exposing a\n// channel-mask uniform and dotting against the rgba.\n//\n// The texture sampler does its own fract() at WRAP_REPEAT, so the\n// REPEAT period in noise space is whatever the user authored the\n// volume at (typically the texture resolution → tile every cubical\n// chunk of cloudTexScale). We still pre-wrap inputs through timeWrap\n// so the absolute coord magnitude stays tight (large coords hit the\n// same float-precision wall the analytic path had).\nfloat cloudNoiseAt(vec3 p)\n{\n    if(cloudNoiseSource == 1)\n        return texture(cloudNoise3D, p * cloudTexScale).r;\n    return fbm3(p);\n}\n\n// ------ base modes ---------------------------------------------------\n\nvec3 gradientSky(vec3 dir)\n{\n    float v = clamp(dir.y, -1.0, 1.0);\n    float invSky    = 1.0 / max(skyCurve, 1e-3);\n    float invGround = 1.0 / max(groundCurve, 1e-3);\n    vec3 sky    = mix(zenithColor.rgb, horizonColor.rgb,\n                      clamp(pow(1.0 - v, invSky), 0.0, 1.0));\n    vec3 ground = mix(groundColor.rgb, horizonColor.rgb,\n                      clamp(pow(1.0 + v, invGround), 0.0, 1.0));\n    return mix(ground, sky, step(0.0, v));\n}\n\nvec3 proceduralSky(vec3 dir)\n{\n    return gradientSky(dir);\n}\n\nfloat henyeyGreenstein(float cosTheta, float g)\n{\n    const float k = 0.0795774715459;  // 1 / (4π)\n    return k * (1.0 - g * g) / pow(1.0 + g * g - 2.0 * g * cosTheta, 1.5);\n}\n\n// Single-pass Preetham + Henyey-Greenstein with chromatic ozone, ported\n// from Godot's PhysicalSkyMaterial (sky_material.cpp:739-823, MIT) and\n// extended with the ozone absorption term from Bevy's atmosphere model\n// (bevy_light/src/atmosphere.rs:215-223). Ozone gives a bluer zenith\n// and the magenta \"Belt of Venus\" twilight band a pure Preetham model\n// can't produce.\nvec3 physicalSky(vec3 dir, vec3 sunDir)\n{\n    const float rayleighZenith = 8.4e3;\n    const float mieZenith      = 1.25e3;\n    const float ozoneZenith    = 30.0e3;  // ozone layer is much higher\n\n    float zenithAngle = clamp(dot(UP, sunDir), -1.0, 1.0);\n    float sunEnergy   = max(0.0, 0.757 * zenithAngle);\n    float sunFade     = 1.0 - clamp(1.0 - exp(sunDir.y), 0.0, 1.0);\n\n    float rayleighK    = rayleigh - (1.0 * (1.0 - sunFade));\n    vec3  rayleighBeta = rayleighK * rayleighColor.rgb * 0.0001;\n    vec3  mieBeta      = turbidity * mie * mieColor.rgb * 0.000434;\n    // Ozone absorption only (no scattering). Per-meter coefficients from\n    // Bevy / Hillaire 2020: green ≫ red ≫ blue, peaking around 25 km\n    // altitude. ozone=1.0 with white ozoneColor gives Earth's default\n    // ~5% green attenuation at zenith — the ozoneZenith * opticalMass\n    // path-length scaling below converts per-meter to total. Pushing\n    // ozone>1 brings out the magenta Belt-of-Venus twilight band.\n    const vec3  OZONE_PER_M = vec3(0.650e-6, 1.881e-6, 0.085e-6);\n    vec3  ozoneBeta    = ozone * ozoneColor.rgb * OZONE_PER_M;\n\n    float zenith       = max(0.0, dot(UP, dir));\n    float opticalMass  = 1.0 / (zenith + 0.15 * pow(3.885 + 54.5 * zenith, -1.253));\n    float rayleighScat = rayleighZenith * opticalMass;\n    float mieScat      = mieZenith * opticalMass;\n    float ozoneScat    = ozoneZenith * opticalMass;\n\n    vec3 extinction = exp(-(rayleighBeta * rayleighScat\n                          + mieBeta      * mieScat\n                          + ozoneBeta    * ozoneScat));\n\n    float cosTheta     = dot(dir, sunDir);\n    float rayleighPh   = (3.0 / (16.0 * PI)) * (1.0 + pow(cosTheta * 0.5 + 0.5, 2.0));\n    vec3  betaRTheta   = rayleighBeta * rayleighPh;\n    float miePh        = henyeyGreenstein(cosTheta, mieEccentricity);\n    vec3  betaMTheta   = mieBeta * miePh;\n\n    vec3 inscatter = pow(sunEnergy * ((betaRTheta + betaMTheta) /\n                                       (rayleighBeta + mieBeta)) * (1.0 - extinction),\n                         vec3(1.5));\n    inscatter *= mix(vec3(1.0),\n                     pow(sunEnergy * ((betaRTheta + betaMTheta) /\n                                       (rayleighBeta + mieBeta)) * extinction,\n                         vec3(0.5)),\n                     clamp(pow(1.0 - zenithAngle, 5.0), 0.0, 1.0));\n\n    inscatter *= mix(groundColor.rgb, vec3(1.0),\n                     smoothstep(-0.1, 0.1, dot(UP, dir)));\n\n    return pow(inscatter, vec3(1.0 / (1.2 + 1.2 * sunFade)));\n}\n\nvec3 cubemapSky(vec3 dir)\n{\n    float yaw = radians(cubeRotation);\n    float c = cos(yaw), s = sin(yaw);\n    vec3 rotated = vec3(c * dir.x + s * dir.z, dir.y, -s * dir.x + c * dir.z);\n    return texture(skybox, normalize(rotated)).rgb;\n}\n\n// ------ overlays -----------------------------------------------------\n\n// Hard disk + soft glow halo. The disk is a smoothstep on cosA against\n// cos(angularRadius); the halo is the standard `pow(cosA, N)` sun-glow\n// formula — with N = falloff, the half-light angle is acos(0.5^(1/N)).\n// At N=256 that's ~4°, dying to ~1e-3 at ~20°. max(cosA, 0) keeps the\n// glow from wrapping into the back hemisphere.\n//\n// (Earlier attempt used `pow(1 - clamp((cosA-cosR)*invSoft, 0, 1), N)`\n// which evaluates to 1 everywhere outside the disk — the negative\n// argument clamps to 0, then pow(1, N) = 1 — and floods the entire\n// hemisphere with the disk color. Don't.)\nvec3 limbDarkenedDisk(vec3 dir, vec3 lightDir, float angSizeDeg, float falloff,\n                      vec3 color, float intensity)\n{\n    float cosR = cos(radians(angSizeDeg));\n    float cosA = dot(dir, lightDir);\n    float disk = smoothstep(cosR - 0.0005, cosR + 0.0005, cosA);\n    float halo = pow(max(cosA, 0.0), falloff);\n    return color * intensity * max(disk, halo);\n}\n\nvec3 sunOverlay(vec3 dir, vec3 sunDir)\n{\n    if(sunEnabled == 0) return vec3(0.0);\n    return limbDarkenedDisk(dir, sunDir, sunAngularSize, sunHaloFalloff,\n                            sunColor.rgb, sunIntensity);\n}\n\n// Moon = same kernel as sun, modulated by lunar phase. Phase is the\n// fraction of the moon's disk illuminated as seen from the camera:\n// dot(moonDir, sunDir) = +1 → sun and moon in same direction →\n// new moon (back-lit, dark side toward us, phase = 0).\n// dot = -1 → opposite directions → full moon (phase = 1).\nvec3 moonOverlay(vec3 dir, vec3 moonDir, vec3 sunDir)\n{\n    if(moonEnabled == 0) return vec3(0.0);\n    float phase = 0.5 - 0.5 * dot(moonDir, sunDir);\n    return limbDarkenedDisk(dir, moonDir, moonAngularSize, moonHaloFalloff,\n                            moonColor.rgb, moonIntensity * phase);\n}\n\n// Pinpoint procedural stars. Discretize the view direction into cells,\n// hash each cell, sparse-threshold to keep only the brightest few\n// percent, jitter the star center within the cell so they don't snap\n// to grid corners, soft Gaussian falloff for sub-pixel pinpoints,\n// twinkle from time. Faded out by sun elevation so daytime stars\n// vanish without a hard switch.\nfloat starsLayer(vec3 dir, float t, float dayNight)\n{\n    if(starsEnabled == 0 || dayNight <= 0.001 || dir.y < -0.05) return 0.0;\n\n    vec3 c = dir * (800.0 * starDensity);\n    vec3 cell = floor(c);\n    vec3 f = fract(c) - 0.5;\n\n    float r1 = hash13(cell);\n    if(r1 < 0.997) return 0.0;\n\n    vec3 jitter = vec3(hash13(cell + 7.0),\n                       hash13(cell + 13.0),\n                       hash13(cell + 23.0)) - 0.5;\n    vec3 d3 = f - jitter * 0.5;\n    float d2 = dot(d3, d3);\n\n    float intensity = exp(-d2 * 80.0);\n    intensity *= 0.55 + 0.45 * sin(t * starTwinkleSpeed + r1 * 50.0);\n    return intensity * starBrightness * dayNight;\n}\n\n// fbm cumulus overlay. Project view dir onto a virtual cloud plane\n// (dir.xz / dir.y, the standard \"cloud dome\" projection), 3-octave\n// fbm, threshold via smoothstep on coverage. Sunset tinting blends\n// the cloud lit color toward sunColor at low sun elevations.\nvec3 cloudOverlay(vec3 dir, vec3 baseSky, vec3 sunDir)\n{\n    if(cloudsEnabled == 0) return baseSky;\n    // Planar projections need to skip the lower hemisphere; spherical\n    // wraps cleanly so we let it through.\n    if(cloudProjection != 1 && dir.y <= 0.001) return baseSky;\n\n    vec2 wind = timeWrap(vec2(cloudWindX, cloudWindZ) * cloudTime);\n    float morph = timeWrap(cloudTime * 0.05);\n    vec3 p = projectForNoise(dir, cloudScale, wind, morph, vec2(1.0));\n\n    float n = cloudNoiseAt(p);\n    if(cloudDebug == 1) return vec3(n);  // bypass smoothstep / lighting\n    float t = smoothstep(1.0 - cloudCoverage - cloudSoftness,\n                         1.0 - cloudCoverage + cloudSoftness, n);\n\n    float horizonFade = smoothstep(0.0, 0.25, dir.y);\n    t *= horizonFade;\n\n    float sundot = clamp(dot(dir, sunDir), 0.0, 1.0);\n    vec3 lit = mix(cloudShadow.rgb, cloudColor.rgb, sundot);\n\n    // Sunset tint: low sun elevations push cloud colour toward sun\n    // colour, strongest in the half-disk pointing toward the sun.\n    float sunsetW = (1.0 - smoothstep(0.0, 0.3, max(sunDir.y, 0.0)))\n                  * cloudSunsetTint\n                  * pow(sundot, 2.0);\n    lit = mix(lit, sunColor.rgb * sunIntensity, clamp(sunsetW * 0.5, 0.0, 1.0));\n\n    return mix(baseSky, lit, t);\n}\n\n// Cirrus high-altitude streak layer. Uses a stretched UV (anisotropic\n// scale on the secondary axis so the noise reads as long thin streaks\n// instead of puffs) and a different fbm seed via offset. Restricted to\n// elevations above cirrusElevStart so it doesn't hug the horizon.\nvec3 cirrusOverlay(vec3 dir, vec3 baseSky, vec3 sunDir)\n{\n    if(cirrusEnabled == 0) return baseSky;\n    float minY = sin(radians(cirrusElevStart));\n    // Same projection rules as cloudOverlay; cirrusElevStart only\n    // gates planar/clamped, spherical sees the whole hemisphere.\n    if(cloudProjection != 1 && dir.y <= minY) return baseSky;\n\n    vec2 wind = timeWrap(vec2(cirrusWindX, cirrusWindZ) * cloudTime);\n    // x stretched 2× normal, z compressed 0.3× → streaks aligned with z.\n    // Offset on the morph axis decorrelates from cumulus's noise seed.\n    float morph = timeWrap(cloudTime * 0.02 + 91.7);\n    vec3 p = projectForNoise(dir, cirrusScale, wind, morph, vec2(2.0, 0.3));\n\n    float n = cloudNoiseAt(p);\n    float t = pow(smoothstep(0.55 - cirrusCoverage * 0.45, 0.75, n), 2.0);\n\n    float elevFade = smoothstep(minY, minY + 0.15, dir.y);\n    t *= elevFade;\n\n    float sundot = clamp(dot(dir, sunDir), 0.0, 1.0);\n    vec3 lit = mix(cirrusColor.rgb,\n                   sunColor.rgb * sunIntensity * 0.4,\n                   pow(sundot, 3.0) * cloudSunsetTint);\n\n    return mix(baseSky, lit, clamp(t, 0.0, 1.0));\n}\n\nvec3 hazeOverlay(vec3 dir, vec3 baseSky)\n{\n    if(hazeEnabled == 0) return baseSky;\n    float t = pow(1.0 - clamp(abs(dir.y), 0.0, 1.0), hazeFalloff);\n    return mix(baseSky, hazeColor.rgb, t);\n}\n\n// Triangular-PDF dither (Tiago Sousa, \"Graphics Gems for Games\", GDC\n// 2013). Two uniform hashes subtracted gives triangular distribution\n// in [-1, 1]; scaled by 1/255 to push banding artifacts under one LSB.\n// Per-pixel, per-frame stable (no time term — cloudTime would make it\n// flicker; banding fixes don't need temporal jitter).\nvec3 ditherTPDF(vec3 col, vec2 fragCoord)\n{\n    if(ditherEnabled == 0) return col;\n    vec2 p = fragCoord;\n    float n1 = fract(sin(dot(p,           vec2(12.9898, 78.233))) * 43758.5453);\n    float n2 = fract(sin(dot(p + vec2(7), vec2(12.9898, 78.233))) * 43758.5453);\n    float n  = (n1 - n2) * (1.0 / 255.0);\n    return col + vec3(n);\n}\n\n// ------ main ---------------------------------------------------------\n\nvoid main()\n{\n    vec3 dir    = normalize(v_worldDir);\n    vec3 sunDir = normalize(dirFromYawElev(sunYaw,  sunElevation));\n    vec3 moonDir = normalize(dirFromYawElev(moonYaw, moonElevation));\n\n    vec3 col;\n    if(mode == 0)      col = solidColor.rgb;\n    else if(mode == 1) col = gradientSky(dir);\n    else if(mode == 2) col = proceduralSky(dir);\n    else if(mode == 3) col = physicalSky(dir, sunDir);\n    else               col = cubemapSky(dir);\n\n    // Day/night blend: smoothstep on sun elevation. Used to fade stars\n    // out as the sun rises so they vanish smoothly at dawn.\n    float dayNight = 1.0 - smoothstep(-0.05, 0.10, sunDir.y);\n\n    // Stars sit on the base sky, behind clouds and disks. Adding\n    // (not mixing) means clouds/disks correctly occlude them via the\n    // cloud t-blend later.\n    col += vec3(starsLayer(dir, cloudTime, dayNight));\n\n    // Cloud layers sit between the sky and the disks. Cumulus first\n    // (lower altitude) then cirrus (higher altitude) so cirrus reads\n    // as overhead.\n    col = cloudOverlay (dir, col, sunDir);\n    col = cirrusOverlay(dir, col, sunDir);\n\n    // Sun and moon punch through clouds. Real-world: a sun behind a\n    // thick cloud is occluded; we ignore that for simplicity (the\n    // additive disk reads as \"sun glow leaking through\").\n    col += sunOverlay (dir, sunDir);\n    col += moonOverlay(dir, moonDir, sunDir);\n\n    // Atmospheric absorption between camera and the rest of the scene\n    // sits on top of everything.\n    col = hazeOverlay(dir, col);\n\n    // skyLuminance lets artists tune the sky-dome brightness independent\n    // of the camera EV (Filament iblLuminance pattern).\n    col *= skyLuminance * pow(2.0, exposure);\n\n    // Final dither against 8-bit banding.\n    col = ditherTPDF(col, gl_FragCoord.xy);\n\n    isf_FragColor = vec4(col, 1.0);\n    gl_FragDepth = 0.00000000000001;\n}\n","Inlets":[{"uuid":"f2ab26ea-415d-45a2-bfbc-2968c7c92a33","ObjectName":"Inlet","id":1000,"Hidden":false,"Custom":"Geometry In","Exposed":"geometry in"},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Mode","Exposed":"mode","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3]}},"Values":[["Triangles",{"Int":0}],["Points",{"Int":1}],["Lines",{"Int":2}],["Geometry",{"Int":3}]],"FolderPort":"","FileExtensions":""},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"EnableBlend","Exposed":"enableblend","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"SrcColor","Exposed":"srccolor","Value":{"Int":6},"Init":{"Int":6},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"DstColor","Exposed":"dstcolor","Value":{"Int":7},"Init":{"Int":7},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"OpColor","Exposed":"opcolor","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3,4]}},"Values":[["Add",{"Int":0}],["Substract",{"Int":1}],["Reverse Substract",{"Int":2}],["Min",{"Int":3}],["Max",{"Int":4}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"SrcAlpha","Exposed":"srcalpha","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"DstAlpha","Exposed":"dstalpha","Value":{"Int":7},"Init":{"Int":7},"Domain":{"Int":{"Values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}},"Values":[["Zero",{"Int":0}],["One",{"Int":1}],["SrcColor",{"Int":2}],["OneMinusSrcColor",{"Int":3}],["DstColor",{"Int":4}],["OneMinusDstColor",{"Int":5}],["SrcAlpha",{"Int":6}],["OneMinusSrcAlpha",{"Int":7}],["DstAlpha",{"Int":8}],["OneMinusDstAlpha",{"Int":9}],["ConstantColor",{"Int":10}],["OneMinusConstantColor",{"Int":11}],["ConstantAlpha",{"Int":12}],["OneMinusConstantAlpha",{"Int":13}],["SrcAlphaSaturate",{"Int":14}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"OpAlpha","Exposed":"opalpha","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1,2,3,4]}},"Values":[["Add",{"Int":0}],["Substract",{"Int":1}],["Reverse Substract",{"Int":2}],["Min",{"Int":3}],["Max",{"Int":4}]],"FolderPort":"","FileExtensions":""},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":8,"Hidden":false,"Custom":"camera","Exposed":"camera","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":9,"Hidden":false,"Custom":"skybox","Exposed":"skybox","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":10,"Hidden":false,"Custom":"cloudNoise3D","Exposed":"cloudnoise3d","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":11,"Hidden":true,"Custom":"mode","Exposed":"mode","Value":{"Int":2},"Init":{"Int":2},"Domain":{"Int":{"Values":[0,1,2,3,4]}},"Values":[["Solid color",{"Int":0}],["Gradient",{"Int":1}],["Procedural sky",{"Int":2}],["Physical sky",{"Int":3}],["Cubemap",{"Int":4}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":12,"Hidden":true,"Custom":"exposure","Exposed":"exposure","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-8.0,"Max":8.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":13,"Hidden":true,"Custom":"skyLuminance","Exposed":"skyluminance","Value":{"Float":1.3333333730697632},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":16.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":14,"Hidden":true,"Custom":"ditherEnabled","Exposed":"ditherenabled","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":15,"Hidden":true,"Custom":"solidColor","Exposed":"solidcolor","Value":{"Vec4f":[0.05000000074505806,0.07000000029802322,0.10000000149011612,1.0]},"Init":{"Vec4f":[0.05000000074505806,0.07000000029802322,0.10000000149011612,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":16,"Hidden":true,"Custom":"zenithColor","Exposed":"zenithcolor","Value":{"Vec4f":[0.20000000298023224,0.3499999940395355,0.6499999761581421,1.0]},"Init":{"Vec4f":[0.20000000298023224,0.3499999940395355,0.6499999761581421,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":17,"Hidden":true,"Custom":"horizonColor","Exposed":"horizoncolor","Value":{"Vec4f":[0.6499999761581421,0.699999988079071,0.7799999713897705,1.0]},"Init":{"Vec4f":[0.6499999761581421,0.699999988079071,0.7799999713897705,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":18,"Hidden":true,"Custom":"groundColor","Exposed":"groundcolor","Value":{"Vec4f":[0.20000000298023224,0.17000000178813934,0.12999999523162842,1.0]},"Init":{"Vec4f":[0.20000000298023224,0.17000000178813934,0.12999999523162842,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":19,"Hidden":true,"Custom":"skyCurve","Exposed":"skycurve","Value":{"Float":0.5379999876022339},"Init":{"Float":0.15000000596046448},"Domain":{"Float":{"Min":0.009999999776482582,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":20,"Hidden":true,"Custom":"groundCurve","Exposed":"groundcurve","Value":{"Float":0.08791666477918625},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":0.004999999888241291,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":21,"Hidden":true,"Custom":"rayleigh","Exposed":"rayleigh","Value":{"Float":2.0},"Init":{"Float":2.0},"Domain":{"Float":{"Min":0.0,"Max":64.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":22,"Hidden":true,"Custom":"rayleighColor","Exposed":"rayleighcolor","Value":{"Vec4f":[0.30000001192092896,0.4000000059604645,0.6000000238418579,1.0]},"Init":{"Vec4f":[0.30000001192092896,0.4000000059604645,0.6000000238418579,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":23,"Hidden":true,"Custom":"mie","Exposed":"mie","Value":{"Float":0.4000000059604645},"Init":{"Float":0.004999999888241291},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":24,"Hidden":true,"Custom":"mieEccentricity","Exposed":"mieeccentricity","Value":{"Float":0.5609999895095825},"Init":{"Float":0.800000011920929},"Domain":{"Float":{"Min":-0.9900000095367432,"Max":0.9900000095367432}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":25,"Hidden":true,"Custom":"mieColor","Exposed":"miecolor","Value":{"Vec4f":[0.6899999976158142,0.7300000190734863,0.8100000023841858,1.0]},"Init":{"Vec4f":[0.6899999976158142,0.7300000190734863,0.8100000023841858,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":26,"Hidden":true,"Custom":"turbidity","Exposed":"turbidity","Value":{"Float":61.66666793823242},"Init":{"Float":10.0},"Domain":{"Float":{"Min":0.0,"Max":100.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":27,"Hidden":true,"Custom":"ozone","Exposed":"ozone","Value":{"Float":8.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":8.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":28,"Hidden":true,"Custom":"ozoneColor","Exposed":"ozonecolor","Value":{"Vec4f":[1.0,1.0,1.0,1.0]},"Init":{"Vec4f":[1.0,1.0,1.0,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":29,"Hidden":true,"Custom":"cubeRotation","Exposed":"cuberotation","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":30,"Hidden":true,"Custom":"sunEnabled","Exposed":"sunenabled","Value":{"Int":0},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":31,"Hidden":true,"Custom":"sunYaw","Exposed":"sunyaw","Value":{"Float":-144.0},"Init":{"Float":35.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":32,"Hidden":true,"Custom":"sunElevation","Exposed":"sunelevation","Value":{"Float":-18.0},"Init":{"Float":25.0},"Domain":{"Float":{"Min":-90.0,"Max":90.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":33,"Hidden":true,"Custom":"sunColor","Exposed":"suncolor","Value":{"Vec4f":[1.0,0.8576028347015381,0.11000228673219681,1.0]},"Init":{"Vec4f":[1.0,0.949999988079071,0.8500000238418579,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":34,"Hidden":true,"Custom":"sunIntensity","Exposed":"sunintensity","Value":{"Float":62.93333435058594},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":64.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":35,"Hidden":true,"Custom":"sunAngularSize","Exposed":"sunangularsize","Value":{"Float":10.033333778381348},"Init":{"Float":0.5299999713897705},"Domain":{"Float":{"Min":0.05000000074505806,"Max":30.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":36,"Hidden":true,"Custom":"sunHaloFalloff","Exposed":"sunhalofalloff","Value":{"Float":888.25},"Init":{"Float":256.0},"Domain":{"Float":{"Min":1.0,"Max":4096.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":37,"Hidden":true,"Custom":"moonEnabled","Exposed":"moonenabled","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":38,"Hidden":true,"Custom":"moonYaw","Exposed":"moonyaw","Value":{"Float":-120.0},"Init":{"Float":-120.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":39,"Hidden":true,"Custom":"moonElevation","Exposed":"moonelevation","Value":{"Float":30.0},"Init":{"Float":30.0},"Domain":{"Float":{"Min":-90.0,"Max":90.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":40,"Hidden":true,"Custom":"moonColor","Exposed":"mooncolor","Value":{"Vec4f":[0.949999988079071,0.949999988079071,1.0,1.0]},"Init":{"Vec4f":[0.949999988079071,0.949999988079071,1.0,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":41,"Hidden":true,"Custom":"moonIntensity","Exposed":"moonintensity","Value":{"Float":0.2666666805744171},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.0,"Max":16.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":42,"Hidden":true,"Custom":"moonAngularSize","Exposed":"moonangularsize","Value":{"Float":4.043333530426025},"Init":{"Float":0.5199999809265137},"Domain":{"Float":{"Min":0.05000000074505806,"Max":30.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":43,"Hidden":true,"Custom":"moonHaloFalloff","Exposed":"moonhalofalloff","Value":{"Float":410.5},"Init":{"Float":1024.0},"Domain":{"Float":{"Min":1.0,"Max":4096.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":44,"Hidden":true,"Custom":"starsEnabled","Exposed":"starsenabled","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":45,"Hidden":true,"Custom":"starDensity","Exposed":"stardensity","Value":{"Float":3.6100001335144043},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.10000000149011612,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":46,"Hidden":true,"Custom":"starBrightness","Exposed":"starbrightness","Value":{"Float":8.0},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.0,"Max":8.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":47,"Hidden":true,"Custom":"starTwinkleSpeed","Exposed":"startwinklespeed","Value":{"Float":4.0},"Init":{"Float":4.0},"Domain":{"Float":{"Min":0.0,"Max":16.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":48,"Hidden":true,"Custom":"cloudsEnabled","Exposed":"cloudsenabled","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":49,"Hidden":true,"Custom":"cloudNoiseSource","Exposed":"cloudnoisesource","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Analytic fbm",{"Int":0}],["3D texture",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":50,"Hidden":true,"Custom":"cloudProjection","Exposed":"cloudprojection","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1,2]}},"Values":[["Planar (dome)",{"Int":0}],["Spherical",{"Int":1}],["Clamped planar",{"Int":2}]],"FolderPort":"","FileExtensions":""},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":51,"Hidden":true,"Custom":"cloudDebug","Exposed":"clouddebug","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["Show raw noise",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":52,"Hidden":true,"Custom":"cloudTexScale","Exposed":"cloudtexscale","Value":{"Float":0.13430000841617584},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0010000000474974513,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":53,"Hidden":true,"Custom":"cloudCoverage","Exposed":"cloudcoverage","Value":{"Float":0.0833333358168602},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":54,"Hidden":true,"Custom":"cloudSoftness","Exposed":"cloudsoftness","Value":{"Float":0.3419833481311798},"Init":{"Float":0.10000000149011612},"Domain":{"Float":{"Min":0.0010000000474974513,"Max":0.5}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":55,"Hidden":true,"Custom":"cloudScale","Exposed":"cloudscale","Value":{"Float":5.929999828338623},"Init":{"Float":2.0},"Domain":{"Float":{"Min":0.10000000149011612,"Max":16.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":56,"Hidden":true,"Custom":"cloudWindX","Exposed":"cloudwindx","Value":{"Float":0.05000000074505806},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":-2.0,"Max":2.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":57,"Hidden":true,"Custom":"cloudWindZ","Exposed":"cloudwindz","Value":{"Float":0.7333333492279053},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-2.0,"Max":2.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":58,"Hidden":true,"Custom":"cloudColor","Exposed":"cloudcolor","Value":{"Vec4f":[0.021698329597711563,0.06782635301351547,0.31000229716300964,1.0]},"Init":{"Vec4f":[1.0,1.0,1.0,1.0]},"Domain":{}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":59,"Hidden":true,"Custom":"cloudShadow","Exposed":"cloudshadow","Value":{"Vec4f":[0.19516289234161377,0.19516289234161377,0.22000457346439362,1.0]},"Init":{"Vec4f":[0.550000011920929,0.550000011920929,0.6200000047683716,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":60,"Hidden":true,"Custom":"cloudSunsetTint","Exposed":"cloudsunsettint","Value":{"Float":1.7999999523162842},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":61,"Hidden":true,"Custom":"cloudTime","Exposed":"cloudtime","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":1000000.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":62,"Hidden":true,"Custom":"cirrusEnabled","Exposed":"cirrusenabled","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":63,"Hidden":true,"Custom":"cirrusCoverage","Exposed":"cirruscoverage","Value":{"Float":0.6833333373069763},"Init":{"Float":0.4000000059604645},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":64,"Hidden":true,"Custom":"cirrusScale","Exposed":"cirrusscale","Value":{"Float":4.074999809265137},"Init":{"Float":4.0},"Domain":{"Float":{"Min":0.10000000149011612,"Max":16.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":65,"Hidden":true,"Custom":"cirrusWindX","Exposed":"cirruswindx","Value":{"Float":-0.2666666805744171},"Init":{"Float":0.019999999552965164},"Domain":{"Float":{"Min":-2.0,"Max":2.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":66,"Hidden":true,"Custom":"cirrusWindZ","Exposed":"cirruswindz","Value":{"Float":0.13333334028720856},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-2.0,"Max":2.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":67,"Hidden":true,"Custom":"cirrusColor","Exposed":"cirruscolor","Value":{"Vec4f":[0.5199969410896301,0.5199969410896301,0.5199969410896301,1.0]},"Init":{"Vec4f":[1.0,1.0,1.0,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":68,"Hidden":true,"Custom":"cirrusElevStart","Exposed":"cirruselevstart","Value":{"Float":19.28333282470703},"Init":{"Float":25.0},"Domain":{"Float":{"Min":0.0,"Max":89.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":69,"Hidden":true,"Custom":"hazeEnabled","Exposed":"hazeenabled","Value":{"Int":1},"Init":{"Int":1},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Off",{"Int":0}],["On",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":70,"Hidden":true,"Custom":"hazeColor","Exposed":"hazecolor","Value":{"Vec4f":[0.44879835844039917,0.6730296611785889,0.880003035068512,1.0]},"Init":{"Vec4f":[0.7799999713897705,0.8299999833106995,0.8799999952316284,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":71,"Hidden":true,"Custom":"hazeFalloff","Exposed":"hazefalloff","Value":{"Float":3.674999952316284},"Init":{"Float":8.0},"Domain":{"Float":{"Min":0.5,"Max":64.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":72,"Hidden":true,"Custom":"distanceF","Exposed":"distancef","Value":{"Float":3.3333332538604736},"Init":{"Float":0.0},"Domain":{"Float":{"Min":-10.0,"Max":10.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1000,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"a5bbffe0-93d2-4e70-995c-cf46c2c43520","ObjectName":"CSF","id":15,"Metadata":{"ScriptingName":"01-04_worley_f1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[42.46892379096914,-790.6848399600374],"Size":[165.0,70.0],"Loops":false,"FoldMode":0,"Compute":"/*{\n  \"DESCRIPTION\": \"3D Worley (cellular) noise, F1 distance \\u2014 distance to nearest feature point. Produces pebble / cell patterns. Small scale \\u2192 many cells, big scale \\u2192 few.\",\n  \"CREDIT\": \"ossia 3D catalog\",\n  \"ISFVSN\": \"2.0\",\n  \"MODE\": \"COMPUTE_SHADER\",\n  \"CATEGORIES\": [\n    \"3D-GENERATOR\",\n    \"NOISE\"\n  ],\n  \"INPUTS\": [\n    {\n      \"NAME\": \"scale\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 6.0,\n      \"MIN\": 1.0,\n      \"MAX\": 32.0,\n      \"LABEL\": \"Scale\"\n    },\n    {\n      \"NAME\": \"drift\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.15,\n      \"MIN\": 0.0,\n      \"MAX\": 2.0,\n      \"LABEL\": \"Drift\"\n    }\n  ],\n  \"RESOURCES\": [\n    {\n      \"NAME\": \"volume\",\n      \"TYPE\": \"image\",\n      \"ACCESS\": \"write_only\",\n      \"WIDTH\": \"64\",\n      \"HEIGHT\": \"64\",\n      \"DEPTH\": \"64\"\n    }\n  ],\n  \"PASSES\": [\n    {\n      \"LOCAL_SIZE\": [\n        4,\n        4,\n        4\n      ],\n      \"EXECUTION_MODEL\": {\n        \"TYPE\": \"3D_IMAGE\",\n        \"TARGET\": \"volume\"\n      }\n    }\n  ]\n}*/\n\n// --- Hashing & random ----------------------------------------------------\nfloat hash11(float n){ return fract(sin(n)*43758.5453123); }\nfloat hash13(vec3 p){\n    p = fract(p * 0.3183099 + 0.1);\n    p *= 17.0;\n    return fract(p.x*p.y*p.z*(p.x+p.y+p.z));\n}\nvec3 hash33(vec3 p){\n    p = vec3(dot(p,vec3(127.1,311.7, 74.7)),\n             dot(p,vec3(269.5,183.3,246.1)),\n             dot(p,vec3(113.5,271.9,124.6)));\n    return fract(sin(p) * 43758.5453123);\n}\n\n// Worley 3D: returns vec2(F1, F2) — distances to nearest / 2nd-nearest feature points.\nvec2 worley(vec3 x){\n    vec3 p = floor(x);\n    vec3 f = fract(x);\n    float F1 = 1e9, F2 = 1e9;\n    for(int k=-1;k<=1;k++)\n    for(int j=-1;j<=1;j++)\n    for(int i=-1;i<=1;i++){\n        vec3 b = vec3(i,j,k);\n        vec3 r = b + hash33(p+b) - f;\n        float d = dot(r,r);\n        if(d < F1){ F2 = F1; F1 = d; }\n        else if(d < F2){ F2 = d; }\n    }\n    return sqrt(vec2(F1, F2));\n}\n\nvoid main()\n{\n    ivec3 pos = ivec3(gl_GlobalInvocationID.xyz);\n    ivec3 size = imageSize(volume);\n    if(any(greaterThanEqual(pos, size))) return;\n    vec3 p  = (vec3(pos) + 0.5) / vec3(size);   // [0,1]^3\n    vec3 pc = p * 2.0 - 1.0;                     // [-1,1]^3\n\n    vec2 w = worley(pc * scale + vec3(TIME*drift));\n    float v = clamp(w.x, 0.0, 1.0);\n    imageStore(volume, pos, vec4(vec3(v), 1.0));\n\n}\n","Root":"<LIBRARY>:packages/score-csf-testers/archive/2026-09-25/volume/01-04_worley_f1.cs","Inlets":[{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"scale","Exposed":"scale","Value":{"Float":1.0},"Init":{"Float":6.0},"Domain":{"Float":{"Min":1.0,"Max":32.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"drift","Exposed":"drift","Value":{"Float":0.07999999821186066},"Init":{"Float":0.15000000596046448},"Domain":{"Float":{"Min":0.0,"Max":2.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"volume","Exposed":"volume"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":17,"Metadata":{"ScriptingName":"Bloom","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[1967.8815642780999,-660.8273711160818],"Size":[292.0,160.0],"Loops":false,"FoldMode":2,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Bloom / glow with iterative separable Gaussian blur. Extracts bright pixels with soft knee, blurs with 4 H/V iterations, composites onto original. HDR-aware. Smooth, wide, artifact-free.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        { \"NAME\": \"threshold\",  \"LABEL\": \"Threshold\",  \"TYPE\": \"float\", \"DEFAULT\": 0.8, \"MIN\": 0.0, \"MAX\": 5.0 },\n        { \"NAME\": \"soft_knee\",  \"LABEL\": \"Soft Knee\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"intensity\",  \"LABEL\": \"Intensity\",  \"TYPE\": \"float\", \"DEFAULT\": 0.4, \"MIN\": 0.0, \"MAX\": 2.0 },\n        { \"NAME\": \"spread\",     \"LABEL\": \"Spread\",     \"TYPE\": \"float\", \"DEFAULT\": 3.0, \"MIN\": 0.5, \"MAX\": 10.0 },\n        { \"NAME\": \"tint\",       \"LABEL\": \"Bloom Tint\", \"TYPE\": \"color\", \"DEFAULT\": [ 1.0, 1.0, 1.0, 1.0 ] }\n    ],\n    \"PASSES\": [\n        { \"TARGET\": \"bright\" },\n        { \"TARGET\": \"h1\" },\n        { \"TARGET\": \"v1\" },\n        { \"TARGET\": \"h2\" },\n        { \"TARGET\": \"v2\" },\n        { \"TARGET\": \"h3\" },\n        { \"TARGET\": \"v3\" },\n        { \"TARGET\": \"h4\" },\n        { \"TARGET\": \"v4\" },\n        {}\n    ]\n}*/\n\nconst vec3 luma_coeff = vec3(0.2126, 0.7152, 0.0722);\nconst float offsets[3] = float[3](0.0, 1.3846153846, 3.2307692308);\nconst float weights[3] = float[3](0.2270270270, 0.3162162162, 0.0702702703);\n\nvec4 blur9(sampler2D tex, vec2 uv, vec2 direction, float s) {\n    vec2 px = direction * s / RENDERSIZE;\n    vec4 c = IMG_NORM_PIXEL(tex, uv) * weights[0];\n    for (int i = 1; i < 3; i++) {\n        vec2 off = px * offsets[i];\n        c += IMG_NORM_PIXEL(tex, uv + off) * weights[i];\n        c += IMG_NORM_PIXEL(tex, uv - off) * weights[i];\n    }\n    return c;\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    float s = spread * 0.5;\n\n    if (PASSINDEX == 0) {\n        vec4 c = IMG_NORM_PIXEL(inputImage, uv);\n        float L = dot(luma_coeff, c.rgb);\n        float knee = threshold * soft_knee;\n        float t = max(L - threshold + knee, 0.0);\n        float blend = min(t / (2.0 * knee + 0.0001), 1.0);\n        blend *= blend;\n        gl_FragColor = vec4(c.rgb * blend, c.a);\n    }\n    else if (PASSINDEX == 1) gl_FragColor = blur9(bright, uv, vec2(1,0), s);\n    else if (PASSINDEX == 2) gl_FragColor = blur9(h1, uv, vec2(0,1), s);\n    else if (PASSINDEX == 3) gl_FragColor = blur9(v1, uv, vec2(1,0), s);\n    else if (PASSINDEX == 4) gl_FragColor = blur9(h2, uv, vec2(0,1), s);\n    else if (PASSINDEX == 5) gl_FragColor = blur9(v2, uv, vec2(1,0), s);\n    else if (PASSINDEX == 6) gl_FragColor = blur9(h3, uv, vec2(0,1), s);\n    else if (PASSINDEX == 7) gl_FragColor = blur9(v3, uv, vec2(1,0), s);\n    else if (PASSINDEX == 8) gl_FragColor = blur9(h4, uv, vec2(0,1), s);\n    else {\n        vec4 original = IMG_NORM_PIXEL(inputImage, uv);\n        vec3 bloom = IMG_NORM_PIXEL(v4, uv).rgb * intensity * tint.rgb;\n        gl_FragColor = vec4(original.rgb + bloom, original.a);\n    }\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Bloom.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"threshold","Exposed":"threshold","Value":{"Float":2.0833332538604736},"Init":{"Float":0.800000011920929},"Domain":{"Float":{"Min":0.0,"Max":5.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"soft_knee","Exposed":"soft_knee","Value":{"Float":1.0},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":2.0},"Init":{"Float":0.4000000059604645},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"spread","Exposed":"spread","Value":{"Float":5.25},"Init":{"Float":3.0},"Domain":{"Float":{"Min":0.5,"Max":10.0}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"tint","Exposed":"tint","Value":{"Vec4f":[1.0,1.0,1.0,1.0]},"Init":{"Vec4f":[1.0,1.0,1.0,1.0]},"Domain":{}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"6e74b962-b102-4d2d-b6f1-850917e8c747","ObjectName":"avnd_vec3f","id":18,"Metadata":{"ScriptingName":"Eye","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[-681.3245046062985,-493.64557219743386],"Size":[94.0,96.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"X","Exposed":"x","Value":{"Float":-410.20068359375},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Y","Exposed":"y","Value":{"Float":6.885758876800537},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Z","Exposed":"z","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Pair","Exposed":"pair"}]},{"uuid":"6e74b962-b102-4d2d-b6f1-850917e8c747","ObjectName":"avnd_vec3f","id":19,"Metadata":{"ScriptingName":"Target","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[-682.3245046062984,-367.5802668977838],"Size":[94.0,96.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"X","Exposed":"x","Value":{"Float":-571.6649780273438},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Y","Exposed":"y","Value":{"Float":5.16037130355835},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Z","Exposed":"z","Value":{"Float":-483.14739990234375},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Pair","Exposed":"pair"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":20,"Metadata":{"ScriptingName":"Film Grain","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[2278.8815642781,-658.8273711160818],"Size":[157.0,160.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Photographic film grain. Organic noise weighted by luminance (more visible in midtones, less in deep shadows and bright highlights, like real film). Configurable size, intensity, and color/mono balance.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"intensity\",\n            \"LABEL\": \"Intensity\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.05,\n            \"MIN\": 0.0,\n            \"MAX\": 0.3\n        },\n        {\n            \"NAME\": \"size\",\n            \"LABEL\": \"Grain Size\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 1.5,\n            \"MIN\": 0.5,\n            \"MAX\": 4.0\n        },\n        {\n            \"NAME\": \"color_amount\",\n            \"LABEL\": \"Color Grain\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.3,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        },\n        {\n            \"NAME\": \"midtone_bias\",\n            \"LABEL\": \"Midtone Bias\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.5,\n            \"MIN\": 0.0,\n            \"MAX\": 1.0\n        }\n    ]\n}*/\n\nconst vec3 luma = vec3(0.2126, 0.7152, 0.0722);\n\n// Hash-based pseudo-random (repeatable per pixel per frame)\nfloat hash12(vec2 p) {\n    vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n    p3 += dot(p3, p3.yzx + 33.33);\n    return fract((p3.x + p3.y) * p3.z);\n}\n\nfloat hash13(vec3 p) {\n    p = fract(p * 0.1031);\n    p += dot(p, p.zyx + 31.32);\n    return fract((p.x + p.y) * p.z);\n}\n\n// Approximate Gaussian from uniform hash (Box-Muller simplified)\nfloat gaussianNoise(vec2 uv, float seed) {\n    float u1 = max(hash13(vec3(uv, seed)), 1e-6);\n    float u2 = hash13(vec3(uv, seed + 17.37));\n    return sqrt(-2.0 * log(u1)) * cos(6.2831853 * u2);\n}\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n    vec4 orig = IMG_NORM_PIXEL(inputImage, uv);\n    vec3 c = orig.rgb;\n\n    // Grain coordinate (quantized for size control)\n    vec2 grainUV = floor(gl_FragCoord.xy / size) * size;\n    float t = TIME * 60.0; // animate grain per frame\n\n    // Luminance noise (monochrome grain)\n    float monoGrain = gaussianNoise(grainUV, t);\n\n    // Color noise (per-channel, shifted seeds)\n    vec3 colorGrain = vec3(\n        gaussianNoise(grainUV, t + 1.0),\n        gaussianNoise(grainUV, t + 2.0),\n        gaussianNoise(grainUV, t + 3.0)\n    );\n\n    // Blend mono and color grain\n    vec3 grain = mix(vec3(monoGrain), colorGrain, color_amount);\n\n    // Luminance-weighted response: more grain in midtones\n    // f(L) = L * (1-L) * 4 peaks at L=0.5\n    float L = dot(luma, c);\n    float weight = mix(1.0, 4.0 * L * (1.0 - clamp(L, 0.0, 1.0)), midtone_bias);\n\n    c += grain * intensity * weight;\n\n    gl_FragColor = vec4(c, orig.a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Film Grain.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":0.019999999552965164},"Init":{"Float":0.05000000074505806},"Domain":{"Float":{"Min":0.0,"Max":0.30000001192092896}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"size","Exposed":"size","Value":{"Float":1.5},"Init":{"Float":1.5},"Domain":{"Float":{"Min":0.5,"Max":4.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"color_amount","Exposed":"color_amount","Value":{"Float":0.30000001192092896},"Init":{"Float":0.30000001192092896},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"midtone_bias","Exposed":"midtone_bias","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":21,"Metadata":{"ScriptingName":"Chromatic Aberration","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[2451.8815642781,-657.8273711160818],"Size":[208.0,161.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia score\",\n    \"ISFVSN\": \"2\",\n    \"DESCRIPTION\": \"Chromatic aberration / RGB split. Separates color channels with spatial offset. Radial mode simulates lens fringing; directional mode is a VJ staple. Works on any value range.\",\n    \"CATEGORIES\": [ \"Filter\" ],\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\" },\n        {\n            \"NAME\": \"mode\",\n            \"LABEL\": \"Mode\",\n            \"TYPE\": \"long\",\n            \"DEFAULT\": 0,\n            \"VALUES\": [ 0, 1 ],\n            \"LABELS\": [ \"Radial (lens-like)\", \"Directional\" ]\n        },\n        {\n            \"NAME\": \"amount\",\n            \"LABEL\": \"Amount\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.005,\n            \"MIN\": 0.0,\n            \"MAX\": 0.05\n        },\n        {\n            \"NAME\": \"angle\",\n            \"LABEL\": \"Direction Angle\",\n            \"TYPE\": \"float\",\n            \"DEFAULT\": 0.0,\n            \"MIN\": 0.0,\n            \"MAX\": 6.283\n        },\n        {\n            \"NAME\": \"center\",\n            \"LABEL\": \"Radial Center\",\n            \"TYPE\": \"point2D\",\n            \"DEFAULT\": [ 0.5, 0.5 ]\n        }\n    ]\n}*/\n\nvoid main() {\n    vec2 uv = isf_FragNormCoord;\n\n    vec2 offset;\n    if (mode == 0) {\n        // Radial: offset direction is away from center\n        offset = (uv - center) * amount;\n    } else {\n        // Directional: fixed angle\n        offset = vec2(cos(angle), sin(angle)) * amount;\n    }\n\n    // Red shifts outward, blue shifts inward, green stays\n    float r = IMG_NORM_PIXEL(inputImage, uv + offset).r;\n    float g = IMG_NORM_PIXEL(inputImage, uv).g;\n    float b = IMG_NORM_PIXEL(inputImage, uv - offset).b;\n    float a = IMG_NORM_PIXEL(inputImage, uv).a;\n\n    gl_FragColor = vec4(r, g, b, a);\n}\n","Root":"<LIBRARY>:packages/default/Presets/GLSL_shaders/linear/Chromatic Aberration.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"mode","Exposed":"mode","Value":{"Int":0},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Radial (lens-like)",{"Int":0}],["Directional",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"amount","Exposed":"amount","Value":{"Float":0.00361846387386322},"Init":{"Float":0.004999999888241291},"Domain":{"Float":{"Min":0.0,"Max":0.05000000074505806}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"angle","Exposed":"angle","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":6.2829999923706055}}},{"uuid":"0adbbdda-fda4-451e-91cc-1da731bde9d5","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"center","Exposed":"center","Value":{"Vec2f":[0.5,0.5]},"Init":{"Vec2f":[0.5,0.5]},"Domain":{"Vec2f":{"Min":[-0.5,-0.5],"Max":[1.0,1.0],"Values":[[],[]]}},"Integral":false}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out","Address":"Window:/"}]},{"uuid":"3c9d6c2b-1f04-4f7d-9bc2-a4b1d7c8e5f0","ObjectName":"extract_buffer_by_name","id":23,"Metadata":{"ScriptingName":"Extract buffer (by name)","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[14.354593788567527,-480.7225091480393],"Size":[234.0,110.5],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"f2ab26ea-415d-45a2-bfbc-2968c7c92a33","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Geometry","Exposed":"geometry"},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Mode","Exposed":"mode","Value":{"Int":1},"Init":{"Int":0},"Domain":{"Int":{"Values":[0,1]}},"Values":[["Attribute",{"Int":0}],["Buffer",{"Int":1}]],"FolderPort":"","FileExtensions":""},{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Name / index","Exposed":"name _ index","Value":{"String":"camera"},"Init":{"String":"position"},"Domain":{}},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Pad vec3 to vec4","Exposed":"pad vec3 to vec4","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Buffer","Exposed":"buffer"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":27,"Metadata":{"ScriptingName":"Depth Dither","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[1649.2058456619525,-222.39568868890157],"Size":[226.0,145.0],"Loops":false,"FoldMode":2,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia team\",\n    \"ISFVSN\": \"2\",\n    \"MODE\": \"ISF\",\n    \"DESCRIPTION\": \"Bayer 4x4 ordered dither with depth-scaled strength. Near pixels remain smooth; far pixels are quantised to `levels` values per channel (black and white included) with classic Gameboy / early-PC dither stipple. A nostalgic lo-fi haze for backgrounds. Depth weight 0 applies the full effect everywhere.\",\n    \"CATEGORIES\": [\"Post-process\", \"Stylise\"],\n\n    \"PIPELINE_STATE\": {\n        \"DEPTH_TEST\": true,\n        \"DEPTH_COMPARE\": \"always\",\n        \"DEPTH_WRITE\": true\n    },\n\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\", \"DEPTH\": true, \"LABEL\": \"Scene color + depth\" },\n        { \"NAME\": \"camera\", \"TYPE\": \"uniform\", \"LABEL\": \"Camera matrices\",\n            \"LAYOUT\": [\n                { \"NAME\": \"view\",           \"TYPE\": \"mat4\" },\n                { \"NAME\": \"projection\",     \"TYPE\": \"mat4\" },\n                { \"NAME\": \"viewProjection\", \"TYPE\": \"mat4\" },\n                { \"NAME\": \"cameraPosition\", \"TYPE\": \"vec4\" },\n                { \"NAME\": \"renderSize\",     \"TYPE\": \"vec4\" },\n                { \"NAME\": \"params\",         \"TYPE\": \"vec4\" } ] },\n        { \"NAME\": \"dither\", \"TYPE\": \"float\", \"LABEL\": \"Dither amount (1 / (levels - 1) = one full level)\",\n          \"DEFAULT\": 0.2, \"MIN\": 0.0, \"MAX\": 0.5 },\n        { \"NAME\": \"depthWeight\", \"TYPE\": \"float\", \"LABEL\": \"Depth weight (1 = full depth-scaled, 0 = uniform)\",\n          \"DEFAULT\": 1.0, \"MIN\": 0.0, \"MAX\": 1.0 },\n        { \"NAME\": \"depthScale\", \"TYPE\": \"float\", \"LABEL\": \"Depth scale (world units)\",\n          \"DEFAULT\": 30.0, \"MIN\": 0.1, \"MAX\": 1000.0 },\n        { \"NAME\": \"levels\", \"TYPE\": \"float\", \"LABEL\": \"Colour levels per channel (far)\",\n          \"DEFAULT\": 6.0, \"MIN\": 2.0, \"MAX\": 256.0 }\n    ]\n}*/\n\n#include \"depth_helpers.glsl\"\n\n// Standard Bayer 4x4 — values in [0, 15] / 16.\nfloat bayer4x4(ivec2 p)\n{\n    int x = p.x & 3;\n    int y = p.y & 3;\n    int i = x + y * 4;\n    // Hard-coded matrix:  0  8  2 10 / 12 4 14 6 / 3 11 1 9 / 15 7 13 5.\n    if (i ==  0) return  0.0/16.0;\n    if (i ==  1) return  8.0/16.0;\n    if (i ==  2) return  2.0/16.0;\n    if (i ==  3) return 10.0/16.0;\n    if (i ==  4) return 12.0/16.0;\n    if (i ==  5) return  4.0/16.0;\n    if (i ==  6) return 14.0/16.0;\n    if (i ==  7) return  6.0/16.0;\n    if (i ==  8) return  3.0/16.0;\n    if (i ==  9) return 11.0/16.0;\n    if (i == 10) return  1.0/16.0;\n    if (i == 11) return  9.0/16.0;\n    if (i == 12) return 15.0/16.0;\n    if (i == 13) return  7.0/16.0;\n    if (i == 14) return 13.0/16.0;\n    return 5.0/16.0;\n}\n\nvoid main()\n{\n    vec2  uv    = isf_FragNormCoord;\n    vec4  color = IMG_NORM_PIXEL(inputImage, uv);\n    float rawD  = IMG_DEPTH_NORM_PIXEL(inputImage, uv);\n    float eye   = dh_linearizeDepth(rawD, camera.projection);\n    float t     = clamp(eye / depthScale, 0.0, 1.0);\n    // Effect weight: 1 far (or everywhere with depthWeight 0), 0 at the camera.\n    float w     = mix(1.0, t, depthWeight);\n\n    ivec2 ip = ivec2(isf_FragCoord.xy);\n    float b = bayer4x4(ip) - 0.5;\n\n    // `levels` values per channel from 0 to 1, rounded to the nearest, so\n    // the image keeps its brightness (floor() lost half a level and crushed\n    // dark scenes to black). The level count rises to 256 (smooth) near.\n    float steps = max(mix(256.0, levels, w) - 1.0, 1.0);\n    vec3 dithered = color.rgb + b * dither * w;\n    vec3 q = floor(clamp(dithered, 0.0, 1.0) * steps + 0.5) / steps;\n\n    isf_FragColor = vec4(q, color.a);\n    gl_FragDepth = rawD;\n}\n","Root":"<LIBRARY>:packages/score-csf-testers/shaderlib/depth/Depth Dither.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":8,"FormatSet":true,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"camera","Exposed":"camera","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"dither","Exposed":"dither","Value":{"Float":0.5},"Init":{"Float":0.20000000298023224},"Domain":{"Float":{"Min":0.0,"Max":0.5}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"depthWeight","Exposed":"depthweight","Value":{"Float":1.0},"Init":{"Float":1.0},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"depthScale","Exposed":"depthscale","Value":{"Float":37.607139587402344},"Init":{"Float":30.0},"Domain":{"Float":{"Min":0.10000000149011612,"Max":1000.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"levels","Exposed":"levels","Value":{"Float":5.110602855682373},"Init":{"Float":6.0},"Domain":{"Float":{"Min":2.0,"Max":256.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"7be51631-fb4b-4152-9ca7-86fdafa8a989","ObjectName":"Display","id":28,"Metadata":{"ScriptingName":"Text Box","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[150.53225454293027,-966.376970653349],"Size":[642.0,113.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"in","Exposed":"in","Value":{"String":"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\nhr { height: 1px; border-width: 0; }\nli.unchecked::marker { content: \"\\2610\"; }\nli.checked::marker { content: \"\\2612\"; }\n</style></head><body style=\" font-family:'Ubuntu'; font-size:13px; font-weight:400; font-style:normal;\">\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">This example shows multiple things:<br />1. Support for the voxel formats (MagicaVoxel, etc.)</p>\n<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2. Layering: the cloud renders at maximum distance (remember that score uses a reverse-Z pipeline though!) <br />and our voxels at their normal distance. The Bloom input allocates a matching z-buffer to ensure everything<br />renders in order.<br />3. Our sky shader needs a camera buffer, like the depth postprocessors.<br />The voxel mesh renderer shader in this exampl uses the direct cameraPos and lookAt controls.</p></body></html>"},"Init":{"String":"(Double-click to edit)"},"Domain":{}},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Auto-reflow","Exposed":"auto-reflow","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[]},{"uuid":"a8f2c6d0-1b4e-4c7a-9d3f-5e8b2c1a7f0d","ObjectName":"gfxProcess","id":14,"Metadata":{"ScriptingName":"Scene Preprocessor","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[-176.2256368389709,-476.5],"Size":[171.0,22.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"f2ab26ea-415d-45a2-bfbc-2968c7c92a33","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"Scene In","Exposed":"scene in"}],"Outlets":[{"uuid":"848061c5-e8a0-4a13-9985-e8df30ce6d4f","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Geometry Out","Exposed":"geometry out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":29,"Metadata":{"ScriptingName":"Depth Micro AO","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[1441.7981438697793,-221.69865157199024],"Size":[166.0,145.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia team\",\n    \"ISFVSN\": \"2\",\n    \"MODE\": \"ISF\",\n    \"DESCRIPTION\": \"Fast single-pass ambient occlusion. Samples eight neighbours at a user radius, counts how many rise more than `bias` above the tangent plane of the current pixel (normal-oriented hemisphere, with a range check), and darkens proportionally. Not as clean as GTAO (see the Multi-pass wave) but cheap, punchy, and single-pass.\",\n    \"CATEGORIES\": [\"Post-process\", \"Lighting\"],\n\n    \"PIPELINE_STATE\": {\n        \"DEPTH_TEST\": true,\n        \"DEPTH_COMPARE\": \"always\",\n        \"DEPTH_WRITE\": true\n    },\n\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\", \"DEPTH\": true, \"LABEL\": \"Scene color + depth\" },\n        { \"NAME\": \"camera\", \"TYPE\": \"uniform\", \"LABEL\": \"Camera matrices\",\n            \"LAYOUT\": [\n                { \"NAME\": \"view\",           \"TYPE\": \"mat4\" },\n                { \"NAME\": \"projection\",     \"TYPE\": \"mat4\" },\n                { \"NAME\": \"viewProjection\", \"TYPE\": \"mat4\" },\n                { \"NAME\": \"cameraPosition\", \"TYPE\": \"vec4\" },\n                { \"NAME\": \"renderSize\",     \"TYPE\": \"vec4\" },\n                { \"NAME\": \"params\",         \"TYPE\": \"vec4\" } ] },\n        { \"NAME\": \"radius\", \"TYPE\": \"float\", \"LABEL\": \"AO radius (pixels)\",\n          \"DEFAULT\": 8.0, \"MIN\": 1.0, \"MAX\": 40.0 },\n        { \"NAME\": \"bias\", \"TYPE\": \"float\", \"LABEL\": \"Height above the tangent plane (world units)\",\n          \"DEFAULT\": 0.01, \"MIN\": 0.0, \"MAX\": 5.0 },\n        { \"NAME\": \"intensity\", \"TYPE\": \"float\", \"LABEL\": \"Occlusion strength\",\n          \"DEFAULT\": 1.2, \"MIN\": 0.0, \"MAX\": 4.0 }\n    ]\n}*/\n\n#include \"depth_helpers.glsl\"\n\nvoid main()\n{\n    vec2  uv    = isf_FragNormCoord;\n    vec4  color = IMG_NORM_PIXEL(inputImage, uv);\n    float rawD  = IMG_DEPTH_NORM_PIXEL(inputImage, uv);\n\n    if (dh_isSky(rawD)) {\n        isf_FragColor = color; gl_FragDepth = rawD; return;\n    }\n\n    float eye0 = dh_linearizeDepth(rawD, camera.projection);\n    vec2 texel = 1.0 / RENDERSIZE;\n    mat4 invP = inverse(camera.projection);\n    vec3 P0 = dh_viewPosFromDepth(uv, rawD, invP);\n\n    // Tangent plane at this pixel. Counting \"nearer\" samples in a flat 2D\n    // disc (the first Crytek SSAO) makes every slanted plane occlude itself:\n    // a floor seen at an angle has its lower taps nearer than the centre, so\n    // the whole floor went grey. A sample only occludes if it rises above\n    // the tangent plane by more than `bias` -- the normal-oriented hemisphere\n    // test of later SSAO (e.g. McGuire et al., \"The Alchemy screen-space\n    // ambient obscurance algorithm\", HPG 2011).\n    vec3 N = dh_reconstructViewNormalImproved(uv, texel, rawD,\n        IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2( texel.x, 0.0)),\n        IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(-texel.x, 0.0)),\n        IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(0.0,  texel.y)),\n        IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(0.0, -texel.y)),\n        camera.projection);\n\n    // The sampling radius in world units at this depth: `radius` pixels\n    // times the size of one pixel at eye0 (2 * eye * tan(fov/2) / height,\n    // and projection[1][1] = 1 / tan(fov/2)).\n    float radiusWorld = radius * 2.0 * eye0 / (camera.projection[1][1] * RENDERSIZE.y);\n    float occ = 0.0;\n    const int NS = 8;\n    // Jittered sample angles per fragment so the 8 taps don't line up in\n    // screen space.\n    float rot = dh_ign(isf_FragCoord.xy) * DH_TWO_PI;\n    for (int i = 0; i < NS; ++i) {\n        float a = rot + DH_TWO_PI * float(i) / float(NS);\n        vec2 sUV = uv + vec2(cos(a), sin(a)) * radius * texel;\n        float dS = IMG_DEPTH_NORM_PIXEL(inputImage, sUV);\n        if (dS < DH_EPSILON) continue;  // skip sky\n        vec3 v = dh_viewPosFromDepth(sUV, dS, invP) - P0;\n        float dist = length(v);\n        // Range check (J. Chapman, \"SSAO tutorial\", 2013; LearnOpenGL\n        // \"SSAO\"): an occluder much farther away than the sampling radius\n        // is a different object in front, not something that occludes this\n        // point. Without it every pixel next to a silhouette got a halo.\n        if (dot(v, N) > bias) occ += smoothstep(0.0, 1.0, 2.0 * radiusWorld / max(dist, DH_EPSILON));\n    }\n    float ao = 1.0 - (occ / float(NS)) * intensity;\n    ao = clamp(ao, 0.0, 1.0);\n\n    isf_FragColor = vec4(color.rgb * ao, color.a);\n    gl_FragDepth = rawD;\n}\n","Root":"<LIBRARY>:packages/score-csf-testers/shaderlib/depth/Depth Micro AO.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"camera","Exposed":"camera","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"radius","Exposed":"radius","Value":{"Float":3.1351068019866943},"Init":{"Float":8.0},"Domain":{"Float":{"Min":1.0,"Max":40.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"bias","Exposed":"bias","Value":{"Float":0.47256818413734436},"Init":{"Float":0.009999999776482582},"Domain":{"Float":{"Min":0.0,"Max":5.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"intensity","Exposed":"intensity","Value":{"Float":4.0},"Init":{"Float":1.2000000476837158},"Domain":{"Float":{"Min":0.0,"Max":4.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":30,"Metadata":{"ScriptingName":"Depth Contact Shadow","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[754.045575217417,-211.95623396765728],"Size":[302.0,146.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia team\",\n    \"ISFVSN\": \"2\",\n    \"MODE\": \"ISF\",\n    \"DESCRIPTION\": \"Contact shadow: raymarches the scene depth along a light direction for a few steps and shadows fragments whose ray hits closer geometry. Adds the tight contact darkening that regular shadow maps miss. Purely depth-based — no shadow map needed.\",\n    \"CATEGORIES\": [\"Post-process\", \"Lighting\"],\n\n    \"PIPELINE_STATE\": {\n        \"DEPTH_TEST\": true,\n        \"DEPTH_COMPARE\": \"always\",\n        \"DEPTH_WRITE\": true\n    },\n\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\", \"DEPTH\": true, \"LABEL\": \"Scene color + depth\" },\n        { \"NAME\": \"camera\", \"TYPE\": \"uniform\", \"LABEL\": \"Camera matrices\",\n            \"LAYOUT\": [\n                { \"NAME\": \"view\",           \"TYPE\": \"mat4\" },\n                { \"NAME\": \"projection\",     \"TYPE\": \"mat4\" },\n                { \"NAME\": \"viewProjection\", \"TYPE\": \"mat4\" },\n                { \"NAME\": \"cameraPosition\", \"TYPE\": \"vec4\" },\n                { \"NAME\": \"renderSize\",     \"TYPE\": \"vec4\" },\n                { \"NAME\": \"params\",         \"TYPE\": \"vec4\" } ] },\n        { \"NAME\": \"lightDir\", \"TYPE\": \"point3D\", \"LABEL\": \"Light direction (world, pointing FROM light TO scene)\",\n          \"DEFAULT\": [-0.5, -1.0, -0.3] },\n        { \"NAME\": \"rayLength\", \"TYPE\": \"float\", \"LABEL\": \"Ray length (world units)\",\n          \"DEFAULT\": 0.5, \"MIN\": 0.01, \"MAX\": 10.0 },\n        { \"NAME\": \"stepCount\", \"TYPE\": \"long\", \"LABEL\": \"Steps per ray\",\n          \"VALUES\": [4, 8, 16, 32], \"LABELS\": [\"4\", \"8\", \"16\", \"32\"], \"DEFAULT\": 8 },\n        { \"NAME\": \"thickness\", \"TYPE\": \"float\", \"LABEL\": \"Occluder thickness (world units)\",\n          \"DEFAULT\": 0.2, \"MIN\": 0.01, \"MAX\": 5.0 },\n        { \"NAME\": \"strength\", \"TYPE\": \"float\", \"LABEL\": \"Shadow strength\",\n          \"DEFAULT\": 0.7, \"MIN\": 0.0, \"MAX\": 1.0 }\n    ]\n}*/\n\n#include \"depth_helpers.glsl\"\n\nvoid main()\n{\n    vec2  uv    = isf_FragNormCoord;\n    vec4  color = IMG_NORM_PIXEL(inputImage, uv);\n    float rawD  = IMG_DEPTH_NORM_PIXEL(inputImage, uv);\n\n    if (dh_isSky(rawD)) {\n        isf_FragColor = color; gl_FragDepth = rawD; return;\n    }\n\n    // Reconstruct world position of this fragment.\n    mat4 invVP = inverse(camera.viewProjection);\n    vec3 worldPos = dh_worldPosFromDepth(uv, rawD, invVP);\n\n    // March TOWARD the light (opposite of lightDir).\n    vec3 L = normalize(-lightDir);\n    float stepLen = rayLength / float(stepCount);\n    float jitter = dh_ign(isf_FragCoord.xy) * stepLen;\n\n    float occluded = 0.0;\n    for (int i = 1; i <= stepCount; ++i) {\n        vec3 samplePos = worldPos + L * (jitter + float(i) * stepLen);\n        vec4 clip = camera.viewProjection * vec4(samplePos, 1.0);\n        if (clip.w <= 0.0) continue;\n        vec3 ndc = clip.xyz / clip.w;\n        vec2 sampleUV = ndc.xy * 0.5 + 0.5;\n        if (any(lessThan(sampleUV, vec2(0.0))) || any(greaterThan(sampleUV, vec2(1.0)))) continue;\n\n        float rayRawD  = ndc.z * 0.5 + 0.5;\n        float sceneRawD = IMG_DEPTH_NORM_PIXEL(inputImage, sampleUV);\n        // Reverse-Z: closer fragments have LARGER rawD. The scene occludes\n        // the ray if the scene's depth is > the ray's depth (closer) AND\n        // not TOO much closer (thickness gate).\n        float rayEye   = dh_linearizeDepth(rayRawD,   camera.projection);\n        float sceneEye = dh_linearizeDepth(sceneRawD, camera.projection);\n        if (sceneEye < rayEye && (rayEye - sceneEye) < thickness) {\n            occluded = 1.0;\n            break;\n        }\n    }\n\n    float ao = 1.0 - occluded * strength;\n    isf_FragColor = vec4(color.rgb * ao, color.a);\n    gl_FragDepth = rawD;\n}\n","Root":"<LIBRARY>:packages/score-csf-testers/shaderlib/depth/Depth Contact Shadow.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"camera","Exposed":"camera","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"lightDir","Exposed":"lightdir","Value":{"Vec3f":[-0.5,-1.0,-0.30000001192092896]},"Init":{"Vec3f":[-0.5,-1.0,-0.30000001192092896]},"Domain":{"Vec3f":{"Min":[-0.5,-1.0,-0.30000001192092896],"Max":[1.0,2.0,0.6000000238418579],"Values":[[],[],[]]}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"rayLength","Exposed":"raylength","Value":{"Float":1.1370466947555542},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.009999999776482582,"Max":10.0}}},{"uuid":"485680cc-b8b9-4a01-acc7-3e8334bdc016","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"stepCount","Exposed":"stepcount","Value":{"Int":8},"Init":{"Int":8},"Domain":{"Int":{"Values":[4,8,16,32]}},"Values":[["4",{"Int":4}],["8",{"Int":8}],["16",{"Int":16}],["32",{"Int":32}]],"FolderPort":"","FileExtensions":""},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"thickness","Exposed":"thickness","Value":{"Float":2.3725578784942627},"Init":{"Float":0.20000000298023224},"Domain":{"Float":{"Min":0.009999999776482582,"Max":5.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"strength","Exposed":"strength","Value":{"Float":0.4356526732444763},"Init":{"Float":0.699999988079071},"Domain":{"Float":{"Min":0.0,"Max":1.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"6e74b962-b102-4d2d-b6f1-850917e8c747","ObjectName":"avnd_vec3f","id":31,"Metadata":{"ScriptingName":"Vec3f","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[19.899300357816784,-31.483756868572378],"Size":[94.0,96.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"X","Exposed":"x","Value":{"Float":2.1537585258483887},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Y","Exposed":"y","Value":{"Float":-1.7951385974884033},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Z","Exposed":"z","Value":{"Float":1.2022823095321655},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Pair","Exposed":"pair"}]},{"uuid":"74ca45ff-92c9-44a0-8f1a-754dea05ee1b","ObjectName":"gfxProcess","id":32,"Metadata":{"ScriptingName":"Depth Fake Point Light","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[1096.045575217417,-211.95623396765728],"Size":[302.0,223.0],"Loops":false,"FoldMode":0,"Vertex":"","Fragment":"/*{\n    \"CREDIT\": \"ossia team\",\n    \"ISFVSN\": \"2\",\n    \"MODE\": \"ISF\",\n    \"DESCRIPTION\": \"Fake point light: reconstructs world-space position from depth and adds a distance-attenuated light from a user-placed 3D position. Lambertian shading against the reconstructed normal. Move the light around with the `lightPos` control for a noir flashlight / torch effect.\",\n    \"CATEGORIES\": [\"Post-process\", \"Lighting\"],\n\n    \"PIPELINE_STATE\": {\n        \"DEPTH_TEST\": true,\n        \"DEPTH_COMPARE\": \"always\",\n        \"DEPTH_WRITE\": true\n    },\n\n    \"INPUTS\": [\n        { \"NAME\": \"inputImage\", \"TYPE\": \"image\", \"DEPTH\": true, \"LABEL\": \"Scene color + depth\" },\n        { \"NAME\": \"camera\", \"TYPE\": \"uniform\", \"LABEL\": \"Camera matrices\",\n            \"LAYOUT\": [\n                { \"NAME\": \"view\",           \"TYPE\": \"mat4\" },\n                { \"NAME\": \"projection\",     \"TYPE\": \"mat4\" },\n                { \"NAME\": \"viewProjection\", \"TYPE\": \"mat4\" },\n                { \"NAME\": \"cameraPosition\", \"TYPE\": \"vec4\" },\n                { \"NAME\": \"renderSize\",     \"TYPE\": \"vec4\" },\n                { \"NAME\": \"params\",         \"TYPE\": \"vec4\" } ] },\n        { \"NAME\": \"lightPos\", \"TYPE\": \"point3D\", \"LABEL\": \"Light position (world units)\",\n          \"DEFAULT\": [0.0, 3.0, 0.0] },\n        { \"NAME\": \"lightColor\", \"TYPE\": \"color\", \"LABEL\": \"Light colour\",\n          \"DEFAULT\": [1.0, 0.95, 0.8, 1.0] },\n        { \"NAME\": \"lightIntensity\", \"TYPE\": \"float\", \"LABEL\": \"Light intensity\",\n          \"DEFAULT\": 8.0, \"MIN\": 0.0, \"MAX\": 100.0 },\n        { \"NAME\": \"falloff\", \"TYPE\": \"float\", \"LABEL\": \"Falloff exponent (2 = physical, lower = softer)\",\n          \"DEFAULT\": 2.0, \"MIN\": 0.1, \"MAX\": 5.0 }\n    ]\n}*/\n\n#include \"depth_helpers.glsl\"\n\nvoid main()\n{\n    vec2  uv    = isf_FragNormCoord;\n    vec4  color = IMG_NORM_PIXEL(inputImage, uv);\n    float rawD  = IMG_DEPTH_NORM_PIXEL(inputImage, uv);\n\n    if (dh_isSky(rawD)) {\n        isf_FragColor = color; gl_FragDepth = rawD; return;\n    }\n\n    // Reconstruct world position via inverse view-projection.\n    mat4 invVP = inverse(camera.viewProjection);\n    vec3 worldPos = dh_worldPosFromDepth(uv, rawD, invVP);\n\n    // Reconstruct normal in view space, then transform to world.\n    vec2 texel = 1.0 / RENDERSIZE;\n    float d0 = rawD;\n    float dR = IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2( texel.x, 0.0));\n    float dL = IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(-texel.x, 0.0));\n    float dU = IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(0.0,  texel.y));\n    float dD = IMG_DEPTH_NORM_PIXEL(inputImage, uv + vec2(0.0, -texel.y));\n    vec3 Nview = dh_reconstructViewNormalImproved(uv, texel, d0, dR, dL, dU, dD, camera.projection);\n\n    mat4 invView = inverse(camera.view);\n    vec3 Nworld = normalize((invView * vec4(Nview, 0.0)).xyz);\n\n    vec3 L = lightPos - worldPos;\n    float dist = length(L);\n    vec3 Lhat = L / max(dist, 0.0001);\n    float lambert = max(dot(Nworld, Lhat), 0.0);\n    float atten = lightIntensity / (1.0 + pow(dist, falloff));\n\n    vec3 lit = color.rgb + lightColor.rgb * lambert * atten;\n\n    isf_FragColor = vec4(lit, color.a);\n    gl_FragDepth = rawD;\n}\n","Root":"<LIBRARY>:packages/score-csf-testers/shaderlib/depth/Depth Fake Point Light.fs","Inlets":[{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"inputImage","Exposed":"inputimage","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"5ac86198-2d03-4830-9e41-a6d529922d29","ObjectName":"Inlet","id":1,"Hidden":false,"Custom":"camera","Exposed":"camera","Format":0,"FormatSet":false,"Filter":2,"AddressMode":1,"MipmapMode":0},{"uuid":"377e8205-b442-4d54-8832-3761def522b2","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"lightPos","Exposed":"lightpos","Value":{"Vec3f":[-0.3063909709453583,3.0,0.0]},"Init":{"Vec3f":[0.0,3.0,0.0]},"Domain":{"Vec3f":{"Min":[-1.0,-3.0,-1.0],"Max":[1.0,6.0,1.0],"Values":[[],[],[]]}}},{"uuid":"8f38638e-9f9f-48b0-ae36-1cba86ef5703","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"lightColor","Exposed":"lightcolor","Value":{"Vec4f":[1.0,0.8822308778762817,0.46953535079956055,1.0]},"Init":{"Vec4f":[1.0,0.949999988079071,0.800000011920929,1.0]},"Domain":{}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"lightIntensity","Exposed":"lightintensity","Value":{"Float":13.959867477416992},"Init":{"Float":8.0},"Domain":{"Float":{"Min":0.0,"Max":100.0}}},{"uuid":"af2b4fc3-aecb-4c15-a5aa-1c573a239925","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"falloff","Exposed":"falloff","Value":{"Float":2.0},"Init":{"Float":2.0},"Domain":{"Float":{"Min":0.10000000149011612,"Max":5.0}}}],"Outlets":[{"uuid":"f1c71046-b754-49a5-8e66-d01374773dfc","ObjectName":"Outlet","id":1,"Hidden":false,"Custom":"Texture Out","Exposed":"texture out"}]},{"uuid":"6e74b962-b102-4d2d-b6f1-850917e8c747","ObjectName":"avnd_vec3f","id":33,"Metadata":{"ScriptingName":"Eye.1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[911.9139338388097,-27.488845117548642],"Size":[94.0,96.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"X","Exposed":"x","Value":{"Float":-403.54437255859375},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Y","Exposed":"y","Value":{"Float":7.699999809265137},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}},{"uuid":"10d62b0d-5bc9-4ac9-9540-9e8ac0c24947","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Z","Exposed":"z","Value":{"Float":-32.9594841003418},"Init":{"Float":1.0},"Domain":{"Float":{"Min":-8388608.0,"Max":8388608.0}}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Pair","Exposed":"pair"}]},{"uuid":"0b1b1816-c33e-4796-a16d-5aab27fe600f","ObjectName":"LFO","id":34,"Metadata":{"ScriptingName":"LFO","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[379.72885330945377,145.05268664945737],"Size":[261.0,117.5],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"b631d9b7-cbe3-4d9c-b470-f139e348aecb","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Period","Exposed":"period","Value":{"Vec2f":[1.293725609779358,0.0]},"Init":{"Vec2f":[0.5,1.0]},"Domain":{"Vec2f":{"Min":[0.009999999776482582,0.0],"Max":[60.0,1.0],"Values":[[],[]]}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Shape","Exposed":"shape","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"7cd210d3-ebd1-4f71-9de6-cccfb639cbc3","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Retrigger","Exposed":"retrigger","Value":{"Impulse":null},"Init":{"Impulse":null},"Domain":{"Impulse":null}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Ampl.","Exposed":"ampl.","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Offset","Exposed":"offset","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"Jitter","Exposed":"jitter","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":180.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"Phase","Exposed":"phase","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":360.0}}},{"uuid":"8b1d76c4-3838-4ac0-9b9c-c12bc5db8e8a","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"Waveform","Exposed":"waveform","Value":{"String":"Drift"},"Init":{"String":"Sin"},"Domain":{"String":{"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"]}},"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"],"Pixmaps":[":/icons/wave_sin_off.png",":/icons/wave_sin_on.png",":/icons/wave_triangle_off.png",":/icons/wave_triangle_on.png",":/icons/wave_saw_off.png",":/icons/wave_saw_on.png",":/icons/wave_ramp_down_off.png",":/icons/wave_ramp_down_on.png",":/icons/wave_square_ticks_off.png",":/icons/wave_square_ticks_on.png",":/icons/wave_square_changes_off.png",":/icons/wave_square_changes_on.png",":/icons/wave_sample_and_hold_ticks_off.png",":/icons/wave_sample_and_hold_ticks_on.png",":/icons/wave_sample_and_hold_changes_off.png",":/icons/wave_sample_and_hold_changes_on.png",":/icons/wave_noise1_off.png",":/icons/wave_noise1_on.png",":/icons/wave_noise2_off.png",":/icons/wave_noise2_on.png",":/icons/wave_noise3_off.png",":/icons/wave_noise3_on.png",":/icons/wave_drift_off.png",":/icons/wave_drift_on.png"]},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"Lock to bars","Exposed":"lock to bars","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Out","Exposed":"out"}]},{"uuid":"25c64b87-a44a-4fed-9f60-0a48906fd3ec","ObjectName":"MicroMapping","id":35,"Metadata":{"ScriptingName":"Micromap","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[692.1116814817071,114.92167089937526],"Size":[180.0,35.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"769dd38a-bfb3-4dc6-b52a-b6abb7afe2a3","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"in","Exposed":"in"},{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Expression","Exposed":"expression","Value":{"String":"-2-33x"},"Init":{"String":"x / 127"},"Domain":{}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"out","Exposed":"out"}]},{"uuid":"0b1b1816-c33e-4796-a16d-5aab27fe600f","ObjectName":"LFO","id":36,"Metadata":{"ScriptingName":"LFO.1","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[390.50983827094973,-36.89968886198944],"Size":[261.0,117.5],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"b631d9b7-cbe3-4d9c-b470-f139e348aecb","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Period","Exposed":"period","Value":{"Vec2f":[4.372584342956543,0.0]},"Init":{"Vec2f":[0.5,1.0]},"Domain":{"Vec2f":{"Min":[0.009999999776482582,0.0],"Max":[60.0,1.0],"Values":[[],[]]}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Shape","Exposed":"shape","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"7cd210d3-ebd1-4f71-9de6-cccfb639cbc3","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Retrigger","Exposed":"retrigger","Value":{"Impulse":null},"Init":{"Impulse":null},"Domain":{"Impulse":null}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Ampl.","Exposed":"ampl.","Value":{"Float":1.0204662084579468},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Offset","Exposed":"offset","Value":{"Float":0.0017796300817281008},"Init":{"Float":0.5},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"Jitter","Exposed":"jitter","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":180.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"Phase","Exposed":"phase","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":360.0}}},{"uuid":"8b1d76c4-3838-4ac0-9b9c-c12bc5db8e8a","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"Waveform","Exposed":"waveform","Value":{"String":"Drift"},"Init":{"String":"Sin"},"Domain":{"String":{"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"]}},"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"],"Pixmaps":[":/icons/wave_sin_off.png",":/icons/wave_sin_on.png",":/icons/wave_triangle_off.png",":/icons/wave_triangle_on.png",":/icons/wave_saw_off.png",":/icons/wave_saw_on.png",":/icons/wave_ramp_down_off.png",":/icons/wave_ramp_down_on.png",":/icons/wave_square_ticks_off.png",":/icons/wave_square_ticks_on.png",":/icons/wave_square_changes_off.png",":/icons/wave_square_changes_on.png",":/icons/wave_sample_and_hold_ticks_off.png",":/icons/wave_sample_and_hold_ticks_on.png",":/icons/wave_sample_and_hold_changes_off.png",":/icons/wave_sample_and_hold_changes_on.png",":/icons/wave_noise1_off.png",":/icons/wave_noise1_on.png",":/icons/wave_noise2_off.png",":/icons/wave_noise2_on.png",":/icons/wave_noise3_off.png",":/icons/wave_noise3_on.png",":/icons/wave_drift_off.png",":/icons/wave_drift_on.png"]},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"Lock to bars","Exposed":"lock to bars","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Out","Exposed":"out"}]},{"uuid":"25c64b87-a44a-4fed-9f60-0a48906fd3ec","ObjectName":"MicroMapping","id":37,"Metadata":{"ScriptingName":"Micromap.38","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[691.5098382709498,-36.89968886198944],"Size":[180.0,35.0],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"769dd38a-bfb3-4dc6-b52a-b6abb7afe2a3","ObjectName":"Inlet","id":0,"Hidden":false,"Custom":"in","Exposed":"in"},{"uuid":"9ae797ea-d94c-4792-acec-9ec1932bae5d","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Expression","Exposed":"expression","Value":{"String":"-415+15x"},"Init":{"String":"x / 127"},"Domain":{}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"out","Exposed":"out"}]},{"uuid":"0b1b1816-c33e-4796-a16d-5aab27fe600f","ObjectName":"LFO","id":38,"Metadata":{"ScriptingName":"LFO.39","Comment":"","Color":"Transparent1","Label":"","Touched":true},"Duration":11289600000,"Height":300.0,"StartOffset":0,"LoopDuration":11289600000,"Pos":[2156.565100076389,-462.6919536883211],"Size":[261.0,117.5],"Loops":false,"FoldMode":0,"Inlets":[{"uuid":"b631d9b7-cbe3-4d9c-b470-f139e348aecb","ObjectName":"Inlet","id":0,"Hidden":true,"Custom":"Period","Exposed":"period","Value":{"Vec2f":[4.0,1.0]},"Init":{"Vec2f":[0.5,1.0]},"Domain":{"Vec2f":{"Min":[0.009999999776482582,0.0],"Max":[60.0,1.0],"Values":[[],[]]}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":1,"Hidden":true,"Custom":"Shape","Exposed":"shape","Value":{"Float":0.5},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":1.0}}},{"uuid":"7cd210d3-ebd1-4f71-9de6-cccfb639cbc3","ObjectName":"Inlet","id":2,"Hidden":true,"Custom":"Retrigger","Exposed":"retrigger","Value":{"Impulse":null},"Init":{"Impulse":null},"Domain":{"Impulse":null}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":3,"Hidden":true,"Custom":"Ampl.","Exposed":"ampl.","Value":{"Float":0.05556151270866394},"Init":{"Float":0.5},"Domain":{"Float":{"Min":0.0,"Max":2.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":4,"Hidden":true,"Custom":"Offset","Exposed":"offset","Value":{"Float":0.11541146039962769},"Init":{"Float":0.5},"Domain":{"Float":{"Min":-1.0,"Max":1.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":5,"Hidden":true,"Custom":"Jitter","Exposed":"jitter","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":180.0}}},{"uuid":"82427d27-084a-4ab6-9c4e-db83929a1200","ObjectName":"Inlet","id":6,"Hidden":true,"Custom":"Phase","Exposed":"phase","Value":{"Float":0.0},"Init":{"Float":0.0},"Domain":{"Float":{"Min":0.0,"Max":360.0}}},{"uuid":"8b1d76c4-3838-4ac0-9b9c-c12bc5db8e8a","ObjectName":"Inlet","id":7,"Hidden":true,"Custom":"Waveform","Exposed":"waveform","Value":{"String":"Drift"},"Init":{"String":"Sin"},"Domain":{"String":{"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"]}},"Values":["Sin","Triangle","Saw","RampDown","Square","SquareOnChange","SampleAndHoldEveryTick","SampleAndHold","Noise1","Noise2","Noise3","Drift"],"Pixmaps":[":/icons/wave_sin_off.png",":/icons/wave_sin_on.png",":/icons/wave_triangle_off.png",":/icons/wave_triangle_on.png",":/icons/wave_saw_off.png",":/icons/wave_saw_on.png",":/icons/wave_ramp_down_off.png",":/icons/wave_ramp_down_on.png",":/icons/wave_square_ticks_off.png",":/icons/wave_square_ticks_on.png",":/icons/wave_square_changes_off.png",":/icons/wave_square_changes_on.png",":/icons/wave_sample_and_hold_ticks_off.png",":/icons/wave_sample_and_hold_ticks_on.png",":/icons/wave_sample_and_hold_changes_off.png",":/icons/wave_sample_and_hold_changes_on.png",":/icons/wave_noise1_off.png",":/icons/wave_noise1_on.png",":/icons/wave_noise2_off.png",":/icons/wave_noise2_on.png",":/icons/wave_noise3_off.png",":/icons/wave_noise3_on.png",":/icons/wave_drift_off.png",":/icons/wave_drift_on.png"]},{"uuid":"fb27e4cb-ea7f-41e2-ad92-2354498c1b6b","ObjectName":"Inlet","id":8,"Hidden":true,"Custom":"Lock to bars","Exposed":"lock to bars","Value":{"Bool":false},"Init":{"Bool":false},"Domain":{"Bool":null}}],"Outlets":[{"uuid":"cff96158-cc72-46d7-99dc-b6038171375b","ObjectName":"Outlet","id":0,"Hidden":false,"Custom":"Out","Exposed":"out"}]}],"SmallViewRack":[{"Processes":[6,7,11,13,14,15,17,18,19,20,21,23,27,28,29,30,31,32,33,34,35,36,37,38],"Process":null,"Height":200.0,"Nodal":true}],"FullViewRack":[{"Process":0,"Nodal":true}],"DefaultDuration":11289600000,"MinDuration":11289600000,"MaxDuration":11854080000,"GuiDuration":12418560000,"Speed":1.0,"Rigidity":false,"MinNull":false,"MaxInf":true,"Signatures":[[0,[4,4]]],"StartState":0,"EndState":1,"StartDate":0,"HeightPercentage":0.0,"NodalSlotHeight":100.0,"QuantizationRate":-1.0,"Zoom":16128000.0,"Center":0,"NodalCenter":[550.0259924299952,-531.273235856771],"NodalScale":0.4483348692008372,"ViewMode":1,"SmallViewShown":true,"HasSignature":true},"StartTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":0,"Metadata":{"ScriptingName":"Sync.start","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":0,"Events":[0],"MusicalSync":-1.0,"AutoTrigger":false,"Start":true,"Active":false,"Expression":" { true == false } "},"EndTimeNode":{"ObjectName":"Scenario::TimeSyncModel","id":1,"Metadata":{"ScriptingName":"Sync.end","Comment":"","Color":"Gray","Label":"","Touched":true},"Date":11289600000,"Events":[1],"MusicalSync":-1.0,"AutoTrigger":false,"Start":false,"Active":true,"Expression":" { true == false } "},"StartEvent":{"ObjectName":"Scenario::EventModel","id":0,"Metadata":{"ScriptingName":"Event.start","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":0,"States":[0],"Condition":"","Date":0,"Offset":0},"EndEvent":{"ObjectName":"Scenario::EventModel","id":1,"Metadata":{"ScriptingName":"Event.end","Comment":"","Color":"Emphasis4","Label":"","Touched":true},"TimeNode":1,"States":[1],"Condition":"","Date":11289600000,"Offset":0},"StartState":{"ObjectName":"Scenario::StateModel","id":0,"Metadata":{"ScriptingName":"State.start","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":0,"PreviousConstraint":null,"NextConstraint":0,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"StateProcesses":[]},"EndState":{"ObjectName":"Scenario::StateModel","id":1,"Metadata":{"ScriptingName":"State.end","Comment":"","Color":"Base1","Label":"","Touched":true},"Event":1,"PreviousConstraint":0,"NextConstraint":null,"HeightPercentage":0.0,"Messages":{"Name":"","Accessors":[],"Unit":"none","Previous":[],"Following":[],"User":null,"Priorities":[1,2,0]},"StateProcesses":[]}},"Speed":1.0,"Cables":[{"ObjectName":"Process::Cable","id":5,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"voxel_loader","ObjectId":6},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Inlet","ObjectId":1000}]},{"ObjectName":"Process::Cable","id":36,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":13},{"ObjectName":"Inlet","ObjectId":8}]},{"ObjectName":"Process::Cable","id":19,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":20},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":21},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":22,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":14},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":15,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":18},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"camera_avnd","ObjectId":11},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":6,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"camera_avnd","ObjectId":11},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":14},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":14,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":19},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"camera_avnd","ObjectId":11},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":43,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":31},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Inlet","ObjectId":8}]},{"ObjectName":"Process::Cable","id":8,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"CSF","ObjectId":15},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":13},{"ObjectName":"Inlet","ObjectId":10}]},{"ObjectName":"Process::Cable","id":12,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":13},{"ObjectName":"Outlet","ObjectId":1000}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":17},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":18,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":17},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":20},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":16,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":18},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Inlet","ObjectId":11}]},{"ObjectName":"Process::Cable","id":35,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":27},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":17,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":19},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Inlet","ObjectId":12}]},{"ObjectName":"Process::Cable","id":42,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":30},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":39,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":29},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":44,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":31},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":30},{"ObjectName":"Inlet","ObjectId":2}]},{"ObjectName":"Process::Cable","id":45,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":7},{"ObjectName":"Outlet","ObjectId":1000}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":30},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":48,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":27},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":17},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":47,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":29},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":27},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":49,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":30},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":32},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":50,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":32},{"ObjectName":"Outlet","ObjectId":1}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":29},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":51,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"extract_buffer_by_name","ObjectId":23},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":32},{"ObjectName":"Inlet","ObjectId":1}]},{"ObjectName":"Process::Cable","id":52,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":33},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":32},{"ObjectName":"Inlet","ObjectId":2}]},{"ObjectName":"Process::Cable","id":53,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"LFO","ObjectId":34},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"MicroMapping","ObjectId":35},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":57,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"LFO","ObjectId":38},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"gfxProcess","ObjectId":21},{"ObjectName":"Inlet","ObjectId":2}]},{"ObjectName":"Process::Cable","id":55,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"LFO","ObjectId":36},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"MicroMapping","ObjectId":37},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":58,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"MicroMapping","ObjectId":37},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":33},{"ObjectName":"Inlet","ObjectId":0}]},{"ObjectName":"Process::Cable","id":59,"Type":0,"Source":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"MicroMapping","ObjectId":35},{"ObjectName":"Outlet","ObjectId":0}],"Sink":[{"ObjectName":"Scenario::ScenarioDocumentModel","ObjectId":1},{"ObjectName":"Scenario::BaseScenario","ObjectId":0},{"ObjectName":"Scenario::IntervalModel","ObjectId":0},{"ObjectName":"avnd_vec3f","ObjectId":33},{"ObjectName":"Inlet","ObjectId":2}]}],"BusIntervals":[]},"Plugins":[{"uuid":"aac1402f-6851-4a1a-ab50-5f213acd1262","Name":"","Author":"","Description":"","Url":"","Platforms":"","Created":"2026-10-04T17:28:41.009Z","LastSaved":"2026-10-04T18:27:47.683Z","Thumbnail":"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","AutomaticThumbnail":true},{"uuid":"1f923578-08c3-49be-9ba9-69c144ee2e32","Refresh":false,"Reconnect":false,"MidiRatio":1.0},{"uuid":"6e610e1f-9de2-4c36-90dd-0ef570002a21","RootNode":{},"Children":[{"Device":{"Name":"Window","Protocol":"5a181207-7d40-4ad8-814e-879fcdf8cc31","Mode":0,"Outputs":[],"InputWidth":1920,"InputHeight":1080,"SwapchainFlag":0,"SwapchainFormat":0},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{"String":{}},"Name":"screen"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[100.0,100.0]},"Domain":{},"Name":"position"}},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"cursor"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"scaled"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"gl"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Vec2f":{"Min":[0.0,0.0],"Max":[1280.0,720.0],"Values":[[],[]]}},"Name":"absolute"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Bool":false},"Domain":{},"Name":"visible"}}]},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"tablet"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Float":{"Min":0.0,"Max":1.0}},"Name":"scaled"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{"Vec2f":{"Min":[0.0,0.0],"Max":[1280.0,720.0],"Values":[[],[]]}},"Name":"absolute"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"z"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{},"Name":"pressure"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-1.0,"Max":1.0}},"Name":"tangential"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-180.0,"Max":180.0}},"Name":"rotation"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-60.0,"Max":60.0}},"Name":"tilt_x"}},{"Address":{"ioType":"<->","ClipMode":"Free","Unit":"angle.degree","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{"Float":{"Min":-60.0,"Max":60.0}},"Name":"tilt_y"}}]},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[1280.0,720.0]},"Domain":{},"Name":"size"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Vec2f":[0.0,0.0]},"Domain":{},"Extended":{"description":"Set to [0, 0] to use the viewport's size"},"Name":"rendersize"}},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"key"},"Children":[{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"press"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"code"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{},"Name":"text"}}]},{"Address":{"ClipMode":"Free","RepetitionFilter":false,"Value":{},"Domain":{},"Name":"release"},"Children":[{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Int":0},"Domain":{},"Name":"code"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"String":""},"Domain":{},"Name":"text"}}]}]},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Bool":false},"Domain":{},"Name":"fullscreen"}},{"Address":{"ioType":"<->","ClipMode":"Free","RepetitionFilter":false,"Value":{"Float":0.0},"Domain":{},"Name":"fps"}}]}]},{"uuid":"05e72689-e02c-4c9d-a0bf-fe84c32d3d96","Data":""}],"Version":5,"Commit":"0c9a91e597012946960316e688b1ac8b00f5a0c1","Tag":"3.8.2"}