Changelog
Get new releases updates with Atom or JSON Feed.
2.0.58
SDF modeling, exporters, environment lighting
-
Breaking
The primitives take their sweep angles in DEGREES.
geo/Sphere(phiStart,phiLength,thetaStart,thetaLength),geo/Tubeandgeo/Capsule(thetaStart,thetaLength) andgeo/Torus(arc) all used radians. A saved scene keeps the number it stored, so a half sweep that read 3.14 now reads as 3.14 degrees. Retype the angle you want: a full turn is 360. -
Breaking
A partial sweep needs the new
opentoggle.geo/Sphere,geo/Tube,geo/Capsuleandgeo/Torusonly cut their sweep whenopenis on, so a scene that cut it with the angle alone comes back whole. Turnopenon. -
Breaking
geo/Tube’sopenEndedis nowcaps, which means the opposite and is on by default. A scene that hadopenEndedon loses that setting and gets its caps back, so turncapsoff. -
Breaking
The manifold primitives are always built about their own middle.
geo/M3DBoxandgeo/M3DTubelosecentered, andgeo/M2DPlane’scenterchanges from a toggle to an in-plane offset. Offset them withcenter, which a translate manipulator now drags in the viewer.geo/Circle’scenteris a 2D offset in the circle’s own plane rather than a 3D position. -
Breaking
A light’s
lightSizeis merged intosoftness. One number now sizes the PCF blur, the PCSS penumbra and the shadow an SDF object marches for itself, and it is a fraction of the light’s frustum rather than a count of shadow-map texels. Raising the shadow resolution no longer narrows the soft edge. Retunesoftnesson lights that had it set. -
Breaking
geo/ManifoldDebugis nowgeo/ManifoldDisplay, and it reports an error rather than only drawing. A scene saved with the old node drops it on load, so rebuild it. -
New
Model with signed distance fields. The
geo/SDF*nodes are out: primitives (SDFSphere,SDFBox,SDFBoxFrame,SDFCapsule,SDFTorus,SDFTube,SDFRoundCone,SDFEllipsoid,SDFOctahedron,SDFPyramid,SDFTriPrism,SDFHexPrism,SDFPlane,SDFSolidAngle), their 2D counterparts (SDFCircle,SDFBox2D,SDFEllipse2D,SDFHexagon2D,SDFEquilateralTriangle2D,SDFSegment2D),geo/SDFBooleanfor union, subtraction and intersection with a hard, rounded or chamfered seam, and the shaping nodesSDFRound,SDFOnion,SDFElongate,SDFMirror,SDFRepeat,SDFExtrude,SDFRevolveandSDFSlice. An SDF object is raymarched in the viewer, so you shape the field itself and only turn it into a mesh when you want one. Start from SDF Boolean Basic. -
New
geo/SDFImprintmarks one SDF object with another: a raised pad, a recess, a groove or an engraving.geo/SDFSeambuilds the joint between two of them as a solid rod, for a weld bead, a piping or a trim line. Each SDF primitive carries its own colour, roughness and metalness, so a boolean keeps every part looking like itself: SDF Boolean with different colors. -
New
geo/SDFTriangulateconverts an SDF back to a mesh, to a closed solid, or, from a 2D field, to its outline. It marches on a cell count or a cell size, takes anisoValueto grow or shrink the surface, and its solid output goes straight into the exporters: SDF for 3D printing. -
New
geo/SDFCreateturns real geometry into a field, so a mesh can be blended, hollowed or imprinted like a primitive.geo/SDFBuilderdefines a field from thecode/SDF*nodes inside it, for a shape none of the primitives cover. -
New
Four exporters.
geo/GLTFExporterwrites binary glTF (.glb) with per-object transforms and material colours, export-gltf.geo/ThreeMFExporterwrites 3MF with units, several objects and colour, export-3mf.geo/OBJExporterwrites Wavefront OBJ with one named block per object, export-obj.geo/DXFExporterwrites DXF R12 for laser cutters and CNC, with cut and engrave lines on separate layers, export-dxf. PLY and STL merge their input objects so nothing is silently left out: export-ply, export-stl. -
New
The
geo/PrinterPreparepolynode puts a model in the state a printer expects, in one node: it checks the model is a closed solid, turns the scene’s Y-up into the Z-up every slicer reads, scales the scene unit into millimetres, and measures the result against the build volume. It errors before an exporter writes a file that cannot be printed. -
New
geo/Environmentlights the whole scene from one environment map, with a background mode to show it or hide it. Thegeo/EnvironmentHelperpolynode puts a mirror ball and a matte grey ball in the scene so you can read what the map is doing.tex/FileHDRloads Radiance .hdr files, and the editor gets an HDRI and EXR picker with real image previews. -
New
geo/MaterialAttributessets colour, roughness, metallic and emission on geometry in one node, and those attributes survive a manifold boolean. -
New
The
geo/DimensionDisplaypolynode writes a part’s size beside it, per axis, in millimetres and inches, which is the readout someone wants before downloading a file: showing a part’s size.geo/DimensionPromoteconverts geometry between 2D and 3D. -
New
geo/FileOBJimports Wavefront .obj geometry, with presets.tex/Colorfills a texture with a flat colour, for any input that wants a texture but only needs a constant.geo/VolumeSmoothsmooths a volume’s voxel values. -
New
render/Taais available, to allow temporal antialiasing. It’s currently useful to have smooth edges when modeling with SDF nodes. - Improved A glTF compressed with Draco or meshopt now imports. 2.0.57 refused those files with an error naming the extension, which is still what happens for an extension Polygon does not support.
-
Improved
A node can WARN as well as error. A warning marks the node and reaches the logger without stopping the graph, and
geo/AttributeDisplayis the first to use it. A polynode also surfaces the error of the node inside it rather than failing silently. -
Improved
Expressions do more.
bbox()andcentroid()take a node path, sobbox("/geo1/box1").size.xreads another node’s bounds.format(value, decimals)turns a number into a string, which is what lets aStringParamread"X " + format(bbox("/box1").size.x, 1) + " mm". A cycle between expressions is detected and reported instead of looping. -
Improved
geo/GroupCreategainsbyPattern: build a group from the members of groups that already exist, or by entity index, using the same syntax as any other group field. -
Improved
Manipulators translate on the XY plane, and the manifold primitives carry one for
center. -
Improved
geo/Textgains vertical alignment, handles line breaks properly, and describes itself in the help panel. -
Improved
geo/Mergepreserves the object groups of its inputs.geo/Deleteno longer clones its input, so it is faster on large scenes.geo/Wireframeemits one segment per edge rather than one per half edge.geo/Clipinterpolates attributes across the cut. -
Improved
geo/SceneGLTFreferences nodes by relative path, names and lays out the generated sub-graph better, and gets a flight helmet preset. - Improved The 3MF export carries colour, writes the tags Bambu Studio reads, and drops its pretty printing to keep files small.
-
Improved
code/TextureSample2DgainsmipMapBias, and thecodecontext gets divide and invert through MathBinary and MathUnary.
Also in this release
- The wireframe hotkey is G, and Shift+G walks the cycle backwards. It was Ctrl+W, which browsers take to close the tab, so it never worked on the web.
- Fixed: a crash when creating a node with Enter from the tab menu, a crash when dropping a polynode with no inputs onto a connection, a crash when clicking a read-only panel in the LLM tab, and a crash on resize in the web build, which the blog embeds were hitting.
- Fixed: the colour picker did not match the colour it was editing when used for the renderer background. A node context menu could be opened from outside the network panel. Renderer leaks and a double free on the GPU side.
2.0.57
Extrude inset, polyWire follows edges, glTF fixes
-
Breaking
geo/PolyWirefollows the edges of its input instead of sweeping through the points in order. Separate curves inside one object are no longer stitched end to start, and separate input objects come out as separate meshes. A point cloud with no edges still sweeps through its points in order, so that case is unchanged. -
Breaking
geo/MergeCompactis gone. It is now acompacttoggle ongeo/Merge, off by default, withcomputeNormalsbeside it. Existing Merge nodes behave exactly as before. A scene saved with a MergeCompact drops that node on load, so rebuild it as a Merge withcompacton. The compact path gains what Merge already had: the per-input toggles apply, stage attributes carry through, and lights, cameras and controls pass through instead of being swallowed. -
New
geo/Extrudegets aninsetparam. It tapers the extrusion inwards by a distance measured perpendicular to each edge, so the inset edges stay parallel to the ones they came from. Negative values widen it instead. Feed the mesh throughgeo/FacetwithsplitAllFacesfirst and every face becomes its own panel with a tapered rim. - New Ctrl+Down sends the playhead back to the start of the play range. If the scene is playing, it pauses instead.
-
Improved
geo/PolyWiretubes a mesh or a grid wireframe correctly: mitered rings through bends, a ball at every junction where three or more edges meet, flat caps at loose ends, and a frame that no longer rolls along a long curve. -
Improved
geo/Extrudehandles quad meshes, and a quad mesh stays a quad mesh. A newcomputeNormalstoggle, on by default, recomputes the normals from the extruded result rather than keeping the input’s, which described the input and not the extrusion. -
Improved
geo/Extrudekeeps primitive attributes. The bottom, the top and every side wall inherit the attributes of the face they came from. -
Improved
geo/Facetworks on quad and hexa meshes. BothsplitAllFacesand the angle threshold apply, and the node never triangulates: a quad mesh stays quads and a hexa mesh stays hexa. - Improved A glTF that requires an extension Polygon does not support is refused with an error naming it, instead of reading compressed bytes as geometry. Draco and meshopt exports are the common case. Re-export without compression.
-
Improved
geo/SceneGLTFmaps glTF’sdoubleSidedonto the generatedmat/MeshPBR’ssidesparam, so imported foliage, cloth and thin panels are no longer invisible from the back. -
Improved
geo/SceneGLTFbuilds a remote asset on a single press of Build. The node reports that it is fetching while the download runs, then generates the sub-graph on its own as one undoable step, and clears its error once the build succeeds. -
Improved
Framing the camera skips lights and helpers, so it frames your geometry instead of pulling back to include a distant light. The
frameObjectsdefault on the camera control nodes is now* ^grid* ^*Camera* ^*Light* ^*Helper*. -
Improved
The material nodes carry help.
mat/MeshPBR,MeshPhong,MeshLambert,MeshNormal,MeshGrid,MeshBasicTexture,MeshBasicDepthTexture,Sky,Volume,VoxelandRaymarchingBuilderall describe themselves and their params in the panel. -
Fixed
Soft shadows no longer show acne as
softnessgoes up on a spotlight or a directional light. Two related artifacts go with it: a dark band at the edge of a light’s shadow map, and shadow bleeding in from a light packed beside it in the atlas. -
Fixed
The
geo/SpotLighthelper draws the cone at the angle the light actually covers. It used to draw it about half as wide. -
Fixed
Deleting a node no longer crashes the editor when work was already queued for it that frame, such as a dirty node inside an open
MATnetwork, or a node that had just errored. -
Fixed
geo/HexaPlaneoutputs a normal attribute. It carried none. - Fixed Triangulating a hexa or a quad mesh gives the added centre points their own attributes, the average of the corners they sit between. They used to carry an unrelated source point’s uv and colour, and a hexa mesh could read past the end of its attribute buffers.
- Fixed Normals computed on a quad or a hexa mesh point outwards. They came out inverted relative to the triangles on screen.
Also in this release
- Transform gizmos from nodes selected inside a subnet no longer stay on screen after you leave it, when the selection was larger than the number of gizmos the editor displays at once.
mat/MeshBasicTextureandmat/MeshBasicDepthTextureuse the alpha of theircolorparam as an overall opacity, on top of the texture’s own alpha.geo/Copy,geo/ObjectPropertiesandgeo/PhysicsRBDAttributesshow their key values under the node in the network panel.geo/PolyWire’sradiusgoes past 1, up to 10 and beyond.
2.0.56
Transparency modes, colour palettes, cursor-driven compute
-
Breaking
The
advancedtoggle and the depth params behind it are gone from themat/*nodes. Use the newtransparencyModeinstead:OPAQUEkeeps a material out of the transparent pass,BLENDputs it in.AUTOwill infer what is needed on most cases. -
Breaking
The
USE_OITobject attribute is nowTRANSPARENCY_MODE, and it holds a mode rather than a flag. Rename it in your scenes and set it toBLENDwhere it used to be true. Similar to the material,AUTOwill infer what is needed on most cases. -
Breaking
Type-specific params on the
code/*nodes now carry an underscore.code/Clamp.inputFloatisinput_Float, andgeo/AttributeCreate.valueFloatisvalue_Float. Saved scenes need those names updated by hand, there is no migration yet. -
New
Every material has a
transparencyMode:AUTO,OPAQUE,MASKorBLEND. An alpha below 1 now does something on every material, not only on the few that happened to implement it. The names match glTFalphaMode, andgeo/SceneGLTFmaps an imported one straight onto it. -
New
MASKmode and the newalphaCutoffparam give hard-edged cutouts that still write depth, so cutouts occlude each other correctly.mat/MeshBuildercarries it today. -
New
geo/ObjectPropertiessetstransparencyModeper object, so one material can serve both opaque and transparent objects. -
New
Materials have a
sidesparam: front, back or both. -
New
tex/Palettegenerates a colour palette and bakes it into a 1D texture. Hue travels an eased cycle while saturation and lightness sweep eased ranges, in OKLCH for perceptually even steps or in plain HSL. The result comes out as hard blocks or as a gradient blended in OKLab. -
New
The cursor and its ray are available inside compute and GPU shaders, alongside a new
code/RayClosestPoint. - New One wasm build can drive several scenes on the same page, each with its own canvas, camera and pointer input. The editor stays single-scene and switches itself off when a page holds more than one.
-
New
geo/M2DBooleanandgeo/M3DBooleanget a mode. Either pair each shape from input 0 with its counterpart in input 1, or batch every shape from both inputs into a single result. -
New
geo/AttributeCreateand thecode/*nodes handleS8,S32andU8attributes. -
New
The alpha of a
mat/MeshBuildercan drive its shadow, so a faded or cut-out surface casts a matching one. -
New
tex/Imagecomes with presets. - Improved Hovering a param in the params panel shows its help as a tooltip. Polynodes carry help of their own now, so the panel is no longer blank on them.
- Improved Hovering a connector in the network panel raises its label, so it is readable over the nodes behind it.
-
Improved
The
groupparam sits nearer the top ofgeo/Transform,geo/Material,geo/CADExtrudeandgeo/CADRevolve. - Improved Errors coming out of a wasm build report a usable stack trace.
- Improved Crash logs can be uploaded from canvas and SDK builds, not only from the editor.
-
Improved
code/Compareandcode/TwoWaySwitchstart on more useful default values. -
Fixed
Textures fed to
mat/MeshBuilderhave their colour space managed, so an sRGB image no longer renders with the wrong colours. -
Fixed
Deleting a node inside a
codenetwork no longer crashes the editor. - Fixed Custom attribute names, defined in the SDK, appear in the attribute name menus again, and they serialize correctly from the nodes that create them.
- Fixed File > Save As was missing from SDK builds.
- Fixed Images loaded in wasm keep their alpha channel.
2.0.55
minor fixes
- Fixed When opening the examples panel on windows, there are no more spawned extra windows (which happened due to child processes downloading the thumbnails).
- Fixed When using the cursor to drive an object, the cursor would be clamped to the viewer bounds. This is not the case anymore.
2.0.54
autoplay for embedded scenes
-
New
An embedded scene can start playing as soon as it loads: pass
autoplay: truetopolygonAppInitnext to the scene data. Without it the scene sits on frame 0, which makes a solver or anOnTickactor look like a still image on a page with no transport controls. - Fixed The example pages on polygonjs.com no longer show the default scene’s box sitting in the middle of the example. The box is bypassed, not deleted, so un-bypassing it brings it back.
2.0.53
Cursor-driven physics, render/Combine, shadow fixes
-
Breaking
render/Add,render/Multiplyandrender/Compositeare replaced by onerender/Combine, whoseoperationparam is ADD, MULTIPLY or OVER. Scenes using the old nodes need the node swapped by hand. -
Breaking
mat/MeshInstanceis gone. Instances are drawn bymat/MeshBuilderwith acode/Instancenode inside, which is the graphgeo/Instancenow builds for you. -
New
A rigid body can be kinematic, driven from an actor with
code/SetObjectPositionorcode/SetObjectAttribute. It pushes the dynamic bodies around, so you can shove a simulation with the cursor. -
New
Cursor nodes:
code/Cursor,code/CursorRay,code/Ray,code/Planeandcode/RayPlaneIntersect, to turn a pointer into a position in the scene. -
New
compute/Subnetandcompute/PolyNode: group compute nodes together, and save the group as a node you can reuse. -
New
render/Combineworks on WebGL2. Where there are no compute shaders it runs the same operation as a fullscreen pass, and the image is the same. - New An embedded scene can be unmounted and remounted from JavaScript, so a page can put a scene away and bring it back.
- New New example: many rigid bodies you can push around with the cursor.
- New The command line downloads the SDK without a login.
2.0.49
Decimate, embedded text fonts, error propagation
-
Breaking
code/Negate,code/Complement,code/Powandcode/Normalizeare merged into the nodecode/MathUnary. Typing the old name in the tab menu still creates it, but scenes saved with the old node types will not load. We don’t have a migration system yet, so this may require manual update in the scene file for now. -
New
geo/Decimate: reduce a mesh’s triangle count, either as a fraction of the input or to an absolute triangle count, with boundary locking, small-component pruning and a maximum-error budget. - New Chrome-less fullscreen viewer. Toggle it in the viewer and save the scene, and it reopens with no editor UI around it.
-
Improved
geo/Textembeds its font, so text renders with no external font file to ship or find. - Improved Errors travel through the graph: a node whose input is errored reports it, referencing an errored node is itself an error, and the network panel tells you when you are inside one.
- Improved The web editor reports its loading progress and fetches a gzipped payload, so the first frame arrives sooner.
- Improved Network panel: improve snapping.
-
Improved
Normals are computed whenever a material needs them, including through
geo/CageDeform. No more black shading on deformed geometry. -
Improved
geo/HexaPlanenow faces +Y by default. - Fixed Nodes inside a bypassed subnet no longer cook.
-
Fixed
geo/PLYExporterandgeo/VolumeExporterpreserve the object’s transform. - Fixed Object transforms are no longer read before they are up to date, which could place geometry a frame behind.
Also in this release
geo/Text’s secondary parameters are simplified.- Dropdown styling and window corners are consistent across the editor.
2.0.46
Drag-to-connect network panel, voxel surface offsets
- New Drag a node over another and hold for a moment, they connect, with no aiming at a connector.
-
New
Shake a node (or a whole selection) mid-drag to pull it out of the graph: the boundary edges drop and the chain heals behind it, so
a → x → cbecomesa → c. -
New
surfaceOffsetongeo/MeshToVoxelandgeo/VoxelCreate: shift the iso-surface the voxels are built from: negative erodes so the voxels sit inside the real surface, positive dilates for a thicker shell or to close thin features. - Improved Connecting nodes no longer needs a precise cursor: connectors snap from a distance, the wire you are dragging previews the connector the drop will actually use, and the snap still works when zoomed out.
- Improved A whole node drag is a single undo step, however many connect, disconnect and splice actions it fired along the way.
-
Improved
geo/MeshToVoxelvoxelizes box-shaped meshes far more faithfully. - Fixed Undoing while dragging a node no longer crashes the editor.
- Fixed Setting a node path, asset path or string parameter to an empty string resets it to its default, instead of leaving an empty reference that could not resolve and broke code export.
- Fixed Node paths and asset paths are trimmed, so a path pasted with a stray leading or trailing space still resolves.
Also in this release
- PolyNode spare parameters and the parameters declared by a PolyNode definition now stay in step with each other, including through save, reload and regeneration.
2.0.45
First public version of Polygon V2
- New Polygon V2 is a complete rewrite of v1, that can run and build for native & web.