Log inGet started
World

Builtin Library

Branchmain
Branchesmainpublish
Commit65083fe8f2

README.md

geometry

Nodes that move, join, cut, round, thicken and sample meshes. A graph transforms a geometry (geometry.transform, geometry.set_position, geometry.merge), welds and shades it (geometry.weld, geometry.smooth_normals), models it (geometry.extrude, geometry.solidify, geometry.bevel, geometry.subdivide, geometry.decimate), builds surfaces from outlines (geometry.sweep, geometry.revolve, geometry.loft, geometry.ribbon) and reads it into volumes (geometry.voxelize, geometry.to_sdf). Each is built from the core nodes and the kernels of the library.

Nodes

  • geometry.transform, geometry.set_position, geometry.set_material, geometry.merge, geometry.triangulate, geometry.measure: the basic edits and the measurement of a geometry. geometry.merge also joins pieces into a piece set for instances.to_points; a part that lacks an attribute another part carries takes the value an element without it has: an instance attribute's identity, else zero (its README says exactly how).
  • geometry.weld (with match = "position+normal" it keeps hard edges), geometry.smooth_normals: merging points and shading normals.
  • geometry.extrude, geometry.solidify, geometry.bevel, geometry.subdivide, geometry.decimate: modelling.
  • geometry.sweep, geometry.revolve, geometry.loft, geometry.ribbon: surfaces from outlines and paths.
  • geometry.voxelize, geometry.to_sdf: a mesh as cells and as a distance field.
  • geometry.boolean: union, subtract or intersect of two closed meshes, over the intersect kernels.
  • geometry.delete, geometry.separate: the triangles a mask field or primitive attribute selects, taken away or split into two geometries (elements.keep on the primitives); geometry.recalculate_normals: geometry.smooth_normals at 180 degrees, area-weighted.
  • geometry.selected, geometry.flip, geometry.profile, geometry.tangents, geometry.sides, geometry.shared, geometry.bvh, geometry.rings, geometry.first: the parts the nodes above are built from, each usable on its own.
  • geometry.unit, geometry.perpendicular, geometry.rotate, geometry.transport, geometry.split: vector arithmetic over sockets that the nodes which orient points and normals share.
  • geometry.offsets, geometry.kept, geometry.following, geometry.trim, geometry.blank: column arithmetic the nodes above share (a prefix sum of counts, the places a mask keeps, a ring read one place on, the primitives of no area dropped, a one-word column to bind).

Conventions

  • Each node's folder name is its call name inside the box: geometry.<folder>.
  • Inputs and outputs carry the names of the op each node replaces.
  • A node that answers a Data table from numbers read back off the device holds the Luau for it in a readings.module inside its own folder.
  • A node with one output answers that output's value; a node with several answers a record by output name.
  • A fold's index runs from 1: the first pass is 1, so a pass that works on level, chunk or step n reads index - 1 when it counts from 0 (geometry.bvh, geometry.to_sdf, geometry.sweep, geometry.loft).
  • A field bound to a kernel takes the length of that dispatch, so a node writes a value out as a column (a gather with an explicit count) before it binds one whose length differs from the dispatch's.