Skip to content

Point Cloud T3D

Summary

The Point Cloud T3D turns points into a volume. Points come from a 2D TOP whose pixels hold positions (with an optional second TOP of colours) and from a POP, or both. Each point is splatted into the eight voxels around it with trilinear weights, so a point between voxel centres spreads over them and a moving point moves smoothly through the grid.

On Windows the splats accumulate with atomic adds: overlapping points sum, and the output is a density, bright where points are dense. Without colours it is a single 32-bit float channel; with colours it is premultiplied RGBA, colour times density. On macOS the GPU path cannot accumulate, and each voxel keeps the last point written to it.

The volume spans the bounds box, in the points' own coordinates: fixed (Use Custom Bounds) or following the points. The operator exports this mapping, so the T3D Transform Reference of volume, surface or voltrace places the rendered volume where the points are (see Coordinates and units). Blur the result (blur) for a smooth field from sparse points.

Parameters - Point Cloud Page

Alpha Alpha - The amount each point adds, spread over the voxels around it. Scales the whole result. Float · default 1

Max Axis Resolution Maxaxisresolution - Voxels along the longest side of the bounds; the other axes follow so voxels stay cubic. Int · default 64

Use Custom Bounds Usecustombounds - Uses Upper and Lower Bounds for the box the points are splatted into. Off, the box follows the points' own bounding box every cook (plus Margin), so it moves and rescales with them. Toggle · default On

Upper Bounds Upperboundsx Upperboundsy Upperboundsz ⊞ - The corner of the box with the largest coordinates, in the points' space. Float × 3 · default 0.5

Lower Bounds Lowerboundsx Lowerboundsy Lowerboundsz ⊞ - The corner with the smallest coordinates. Points outside the box are dropped. Float × 3 · default -0.5

Margin Margin - Added to the bounds on every side. Float · default 0

Get Bounds Calculatebounds - Sets Upper and Lower Bounds to the points' current bounding box. Pulse

Display Bounds Displaybounds - Draws the bounds box with the points in the operator's viewer. Toggle · default Off

Use Alpha as Active Usealphaasactive - Skips pixels of Positions whose alpha is 0 or less, so a fixed-size texture can hold a varying number of points. Toggle · default Off

Color Attribute Colorattribute ⊞ - The POP attribute used as each point's colour: Color, or P or N to colour by position or normal, or None for density only. Menu · default Color

  • None None
  • P P
  • N N
  • Color Color

Parameters - Common Page

Output Resolution Outputresolution ⊞ - Where the output's width, height and depth come from. With nothing connected to the first input the operator always uses Resolution, whichever option is set. Menu · default Use Input

  • Use Input useinput - The first input's width, height and depth.
  • Custom custom - The Resolution parameter.

Resolution Resolution1 Resolution2 Resolution3 ⊞ - Width, height and depth of the output in voxels. Used when Output Resolution is Custom, or when the first input is not connected. Memory is width × height × depth × bytes per voxel of the Pixel Format: 256³ at 16-bit float RGBA is 128 MiB. Int × 3 · default 64

Input Smoothness Inputfiltertype ⊞ - Filtering of the internal GLSL TOPs' input samplers, as TouchDesigner's Input Smoothness. Inputs are read at normalised coordinates, so this matters whenever the input and output resolutions differ or an input is transformed. Nearest Pixel returns voxels unblended; Interpolate Pixels is trilinear. Menu · default Interpolate Pixels

  • Nearest Pixel nearest
  • Interpolate Pixels linear
  • Mipmap Pixels mipmap

Passes Npasses - Has no effect on this operator: its shaders are compute shaders, which read the connected input on every pass, so extra passes repeat identical work. Leave it at 1. Int · default 1

Pixel Format Format ⊞ - Pixel format of the output. Use Input takes the first input's format. With nothing connected, Use Input resolves to 8-bit fixed (RGBA), which clamps values to 0–1 and quantises them to 1/255: set a float format for signed distances, densities above 1, velocities or anything else outside 0–1. Menu · default Use Input

Bypass Bypass - Passes the first input through unchanged and skips the operator's work. With nothing connected the output is a single black voxel. Toggle · default Off

Version Version - T3D version of this operator. Read-only information; include it when reporting a problem. Str

Operator Inputs

  • Input 0: Positions T3D_in_positions - A 2D TOP whose pixels are points: RGB = x, y, z. Use a 32-bit float TOP (a TOP to of a point cloud, a particle simulation in a GLSL TOP, a Kinect or Point File In TOP). With Use Alpha as Active, pixels whose alpha is 0 or less are skipped; pixels holding NaN always are.
  • Input 1: Colors T3D_in_color - Optional. A 2D TOP of the same size as Positions: each point's colour.
  • Input 2: POP in_pop - Points as a POP (needs a build with POPs): P is the position, and Color Attribute picks the colour. Both the TOP points and the POP points are splatted into the same volume.

Operator Outputs

  • Output 0: Output T3D_output - The splatted points: density in one channel (32-bit mono) without colours, premultiplied colour and density (32-bit RGBA) with them.

Performance

GPU time when the operator recooks: 0.082 ms at 64³, 0.069 ms at 128³, all of its passes summed (GeForce RTX 4090, TouchDesigner 2025.33230). An operator whose inputs and parameters are unchanged does not recook and costs nothing.