HRLW Geometry POP
Docs / Chapter 1 · POP

HRLW Geometry POP

Replaces The Geometry COMP. In TouchDesigner you put geometry in a Geometry COMP, give it a MAT (Phong, PBR, ...) and a Render TOP draws it. Here you wire any POP into an HRLW Geometry POP, set its material on the Material page, and the HRLW Path Tracer TOP draws every HRLW Geometry POP next to it. Material parameters (base colour, roughness, metallic, emission, opacity ...) and the texture maps on the Maps pages are the equivalent of a PBR MAT.

Operator type Hrlwgeometry, label HRLW Geometry.

What it does#

It builds a scene stream on the GPU: points, triangles, curves, spheres and volumes plus their materials. It never reads the geometry back to the CPU for animated meshes, so a big animated mesh costs almost nothing on the CPU. The Path Tracer merges all the streams it names into one scene; each stream gets its own acceleration structure (BVH, up to 32 streams), so an animated stream is rebuilt or refit without touching the static ones.

It is also what makes the other operators talk to each other: solvers use the scene's HRLW Geometry POPs as colliders, and the Weathering page keeps wetness / burn / melt maps on its geometry.

Quick start (beginner)#

  1. Make any geometry as POPs, for example a Sphere POP or a Grid POP (a Torus, a Box ...).
  2. Add an HRLW Geometry POP and wire the geometry into its input.
  3. Set Material Preset (Material page) to something that reads at a glance: Gold, Glass, Rubber, Water. On a liquid's output, the default Auto already picks the material matching the Liquid POP's preset.
  4. Add an HRLW Path Tracer TOP in the same network. Its HRLW Geometry POPs field is * by default, which means "every HRLW Geometry POP next to me", so it already sees yours.
  5. Add a Camera COMP and a Light COMP or an Environment TOP (see Chapter 2) and look at the TOP.

Tips:

  • Moving geometry that keeps its point count (a deforming mesh): set Topology to Deforming Only (refit); the BVH is refit instead of rebuilt.
  • Keep animated geometry in its own HRLW Geometry POP, apart from static geometry. Otherwise a changing point count costs the whole scene its motion vectors, and you get trails behind moving objects.
  • Several objects with different materials in one POP: give each a materialid attribute (see below and Appendix A).

Attributes it reads#

Vertex attributes win over point attributes, which win over primitive attributes. Everything is optional except P.

Attribute Type Meaning
P float3 position (required)
N float3 smooth shading normals (with N, a triangle's outside is the side its normals point to, whatever its winding)
BaseColor / Color / Cd float3+ base colour (alpha ignored)
Roughness, Metallic float
Emission float, float3 or float4 intensity × base colour, rgb, or rgb × a (a = intensity); times Emission Scale
Opacity, Transmission, Translucency, IOR float
Dispersion float glass: 20 / Abbe number (crown glass about 0.34, dense flint 0.6 to 1)
AbsorptionDepth float glass: depth at which light has taken the base colour (Beer-Lambert); 0 = tint at the surface
ThinWalled float 0/1 glass as a single sheet (a window pane as one quad)
Tex / uv float2+ texture coordinates
TextureId float or int which of this POP's texture sets (0 to 7, Maps pages) a primitive uses
materialid float or int material preset per primitive (0 or missing: the POP's own material)
Outline, OutlineGroup float, int stylized engine: outline width multiplier, and the group outlines are drawn between
LineWidth / Width / pscale float width of lines (tube diameter)
Density, VolumeColor, Anisotropy, VolumeEmission float / float3 / float / ... closed shapes with a density become fog
Subsurface, SubsurfaceRadius, SubsurfaceAnisotropy float / float3 / float subsurface scattering
Coat, CoatRoughness, CoatTint float / float / float3 clear coat layer
Sheen, SheenRoughness, SheenTint float / float / float3 sheen layer (cloth, velvet, dust)
SpecularAnisotropy, AnisotropyRotation float stretched highlights (brushed metal); rotation in turns
ThinFilmThickness, ThinFilmIOR float iridescence (soap bubbles, oil); thickness in nm, 0 = none
EdgeTint float3 metals: colour towards grazing angles
Holdout, ShadowCatcher float 0/1 compositing mattes
Pprev float3 (point) where the point was a frame ago (motion vectors for solver output)
foam float 0..1 turns the material to foam there (the Liquid POP writes it)

The layer attributes (coat, sheen, anisotropy, thin film, edge tint) each compile into the renderer only while some geometry uses them, so unused layers cost nothing.

Parameters#

Page Parameter (default) What it does
Scene Topology (Changes Every Frame) Changes: rebuild the BVH every cook. Deforming Only: point count is constant, refit instead (faster). Greyed out for a solver's output.
Input Transfer (Auto) How the input reaches the GPU. CPU goes through system memory (stable). CUDA hands GPU data over directly (faster for millions of points). Auto = CUDA for a solver's output, CPU otherwise.
Pass Through Geometry (on) Copies the input's attributes on to the POPs after it. Turn off when nothing is wired after it (saves a download). Greyed out for a solver's output; view that on the solver POP.
Motion Vectors From Points (on) With Changes Every Frame, motion vectors still come from point order while the count stays the same. Turn off if points get reordered (particle births) and you see smearing. Greyed out for a solver's output.
Material Material Preset (Auto) Loads a material's values into the parameters below: plastics, rubber, ceramic, car paint, fabric, paper, wood, stone, wax, metals, glass, emissive, and liquids (water, honey, wine, milk, blood, lava, soap bubble, ice ...). They stay editable: editing one turns the menu back to Custom, picking the preset again reloads it. Order: texture > attribute > parameter > preset, so an IOR attribute beats the glass preset. Auto: on a Liquid POP's output, the material of the same name as its preset; otherwise Custom. Custom leaves the parameters as they are.
Preset Scale (0) Scene units per metre; sets how deep liquids and wax absorb or scatter. 0 = the Path Tracer's Units per Metre (Render page), so one setting covers the whole scene. A 2-unit tank modelled as 20 cm needs 10.
Default Base Color, Default Roughness (0.5), Default Metallic (0) Used where the attribute is missing.
Default Emissive (off), Emission Scale (1) Default Emissive: glows in the base colour where there is no Emission attribute (the Emissive and Lava presets turn it on). Emission Scale multiplies emission.
Default Opacity (1), Transmission (0), Translucency (0) Transparency and glass.
Default Dispersion, Absorption Depth, Thin Walled, IOR (1.5) Glass behaviour.
Default Subsurface (0), Subsurface Radius, Subsurface Scale (0.05), Subsurface Anisotropy Skin, wax, marble.
Use Color Attribute (on), Use N Attribute (on) Ignore the Cd or N attribute if you need to.
Outline Width (1), Outline Group (0) For the stylized engine.
Maps Use Textures (on), Texture Sets (1), Texture Set (no TextureId attr) (0), then texture set 0 This POP's own texture sets (see Texture maps below). Texture Set picks the set where there is no TextureId attribute.
More Maps texture sets 1 to 7 Greyed out past Texture Sets.
Lines Render Lines (on), Line Style (Round Tubes), Smooth Curves (off), Mesh Tube Sides (16), Mesh Tube Steps per Smooth Segment (6), Default Line Width (0.02), Line Width Scale (1) See Lines and points below.
Points Render Points (Point Primitives), Default Point Size (0.05), Point Size Scale (1), Latitude / Longitude UVs on Spheres (on) Points render as spheres. All Points also draws points that belong to triangles or lines.
Volume Default Density (0), Volume Color (0.9), Volume Emission, Anisotropy Closed shapes with a density, and grid volumes.
Layers Coat, Sheen, Specular Anisotropy, Thin Film, Edge Tint, Holdout, Shadow Catcher Defaults for the layer attributes.
Weathering see Chapter 8 Wetness, burn, melt, fuel.

Texture maps#

Each HRLW Geometry POP carries its own texture sets: set 0 on the Maps page, sets 1 to 7 on More Maps (raise Texture Sets to use them). A set has base colour (optionally alpha as opacity), roughness and metallic (channel pick, glTF ORM by default), tangent-space normal map (OpenGL convention; Flip Green for DirectX), bump/height (Bump Height in world units), emission, opacity, transmission and subsurface maps, a Ramp TOP for the Stylized engine, triplanar projection, and UV scale/offset.

  • A base colour, roughness, metallic or emission map replaces the default for a missing attribute and multiplies the attribute when present. Opacity, transmission and subsurface maps always multiply, so set the default (for example Default Transmission 1) and mask it with the map.
  • Triplanar (per set): projects from world position on three planes, blended by Triplanar Blend Sharpness, one repeat per Triplanar Scale units. No UVs needed; works on any mesh and on spheres.
  • Which set a primitive uses: its TextureId attribute, else Texture Set. Numbers are this POP's own, so two POPs can both use set 0 with different maps.
  • Without UVs (Tex / uv) and without triplanar, maps can't be placed; the Path Tracer warns.
  • 8-bit RGBA/BGRA colour maps are sRGB-decoded; data maps and float formats are read as they are. Up to 32 sets in one render across all POPs.
  • Replaces: the colour/normal/roughness maps of a PBR MAT.

Lines and points#

  • Line Style. Round Tubes: exact round tubes, the cheapest. Flat Ribbons: flat strips facing the camera (hair, grass); this applies to the whole render, so if one POP asks for ribbons all lines render as ribbons and the Path Tracer warns. Mesh Tubes: the lines are turned into a joined triangle mesh (Mesh Tube Sides around, Mesh Tube Steps per Smooth Segment along a smooth curve), so glass tubes have no seams inside.
  • Smooth Curves turns lines into Catmull-Rom curves through their points.
  • Latitude / Longitude UVs on Spheres gives spheres texture coordinates so maps wrap them; it is on for the whole render if any POP asks for it.

Material presets in a nutshell#

  • Solids: Plastic Glossy / Matte, Rubber, Ceramic (glazed), Car Paint, Fabric / Velvet, Paper, Wood, Stone / Concrete, Candle Wax, Gold, Silver, Copper, Aluminium, Chrome, Brushed Steel, Glass, Frosted Glass, Emissive.
  • Liquids and kin: Water, Sea Water, Coloured Liquid, Honey, Olive Oil, Red Wine, Cola, Coffee, Milk, Orange Juice, Blood, Melted Chocolate, Slime, Mercury / Liquid Metal, Lava, Soap Bubble, Ice.
  • Clear liquids absorb light with depth (water turns blue-green over a metre, honey amber over three centimetres, wine red over one), so a puddle stays clear while a deep pool shows its colour. Cloudy ones (milk, juice, blood, chocolate, slime) scatter light under the surface.
  • On a Liquid POP's output, Auto picks the material of the same name as the Liquid POP's preset.

materialid: several materials in one stream#

Give each primitive a materialid number and one HRLW Geometry POP can carry a glass and a metal object side by side. The same number means the same material everywhere: the render, the weathering (how it wets, chars, melts) and HRLW Bodies (density, friction, bounce, softness). 0, a number past the table, or no attribute: the POP's own parameters. A materialid preset beats the POP's parameters but not the input's attributes, value by value. The full 37-entry table is Appendix A.

How to set it: merge the objects, then use an Attribute POP or a Constant POP on primitives to give each its number. HRLW Bodies and HRLW Fracture pass materialid on, so an HRLW Geometry POP after them renders each piece with its material.

textureid (a static attribute on bodies) picks the texture set of the HRLW Geometry POP that renders them; it is separate from materialid.

Advanced#

  • Scenes and patterns. The Path Tracer's HRLW Geometry POPs field takes names, * patterns and ^ excludes (* ^debug*). A POP that is not an HRLW Geometry POP is not rendered; the TOP warns, and you wire it into one. A bypassed one is left out.
  • Reconciliation. Streams whose settings can't share a BVH are reconciled: linear curves join Catmull-Rom ones as straight segments, streams without normals get face normals, and only the first grid volume is used. The Info CHOP's scene_pops counts the streams.
  • Pass Through Geometry with CUDA transfer once hung TouchDesigner inside its own CUDA sync, so pass-through always uses CPU transfer.
  • Solver output. A solver's output is new geometry every frame in a new point order. An HRLW Geometry POP that renders it always rebuilds it (Deforming Only is ignored) and does not pair points by number for motion vectors; the solver writes Pprev instead.
  • Colliders. HRLW Geometry POPs are the colliders the solvers use (see Chapters 3, 5, 6): triangles and spheres become a signed distance on the solver's grid. Closed pieces are solid; open pieces (a ground plane, a single-sided cup) block as a thin shell. Weld or close a mesh to make it solid. Curves are not colliders.
  • Safety. Every attribute read is checked against the buffer's real size; an attribute that doesn't cover every point reads as zero instead of faulting the GPU.
  • Info CHOP (renderer side): scene_pops, weather_maps. Details in Appendix B.