12. Geometry Types¶
12.1 Point Clouds¶
Structure: unstructured vertices (no links).
Required arrays:
vertices/. Optional companions:vertex_fragments/(mandatory for multi-fragment chunks),vertex_attributes/<name>/,object_index/data(when objects exist, e.g. nuclei centroids),groups/data(region partitions).links_convention: typically"implicit_sequential"— point clouds have no edges; thelinks/array group is absent.Spatial Indexing: direct spatial chunking; per-chunk fragmentation lets readers slice to single bins without decoding the whole chunk (see §6.3).
Multi-Resolution: per-object coarsening reduces each surviving object’s vertices to a single coarse-bin centroid metavertex per level.
12.2 Meshes¶
Types: triangular (
link_width = 3), quad, tetrahedral (link_width = 4), etc.Storage options:
Option 1 — Draco-encoded:
vertices/<chunk>.encoding = "draco"; positions and faces co-encoded inside the Draco blob.links/0/is omitted.Option 2 — Separate positions + faces:
vertices/<chunk>raw float positions;links/0/<chunk>carries face records (link_width = 3for triangles);link_fragments/<chunk>partitions faces by vertex fragment.
Cross-chunk faces: faces with three vertices in distinct chunks live in
cross_chunk_links/0/datawithlink_width = 3(replacing the droppedcross_chunk_faces/array from pre-0.5).Multi-Resolution: edge-collapse decimation or per-object metavertex aggregation; v0.7 chunk-scale growth keeps coarse-level chunk counts tractable.
12.3 Skeletons¶
Structure: graph of vertices and parent edges (tree).
Required arrays:
vertices/,vertex_fragments/. Most skeletons additionally carrylinks/0/(parent edges,link_width = 1).links_convention:"explicit"— every parent edge materialised inlinks/0/<chunk>."implicit_sequential_with_branches"(recommended) — sequential parents (parent_of(i) = i - 1) implicit; thelinks/0/<chunk>array stores only branch links and any links that cross fragment boundaries. Dramatically reduces storage (e.g. a 10k-vertex neuron with 50 branches stores ~50 link rows).
Per-vertex attributes:
radius,vertex_type(soma / axon / dendrite), and so on — one row per vertex.Cross-chunk parents: parent in chunk A, child in chunk B → one record in
cross_chunk_links/0/datawith endpoints((A, parent_vi), (B, child_vi)).Multi-Resolution: path simplification (Douglas-Peucker) keeps branch points and reduces straight-segment density.
12.4 Streamlines / Polylines¶
Structure: ordered sequence of connected points.
Required arrays:
vertices/,vertex_fragments/(one fragment per streamline segment within each chunk). Nolinks/array.links_convention:"implicit_sequential"— within a fragment, vertexiconnects toi + 1.Cross-chunk continuation:
cross_chunk_links/0/datawithlink_width = 2records connect a segment’s last vertex in chunk A to the next segment’s first vertex in chunk B.Object identity: one object per full streamline; its manifest chains segments across chunks via mode-2 (explicit) manifest blocks if segments are shared across streamlines (
shared_fragments), or mode-0 / mode-1 otherwise.Multi-Resolution: point reduction along paths; pyramid levels carry fewer vertices per streamline.
12.5 Custom Geometries¶
Extensibility: writers may add a non-canonical entry to
geometry_types— readers should treat unknown types as raw vertex + link arrays and skip conformance checks for that type.Custom links: arbitrary
link_widthand arbitrary record semantics are supported by the underlying record format.Validation: level-4 conformance checks (§13.1) apply only to the canonical geometry-type set; custom types bypass them.