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, labelHRLW 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)#
- Make any geometry as POPs, for example a Sphere POP or a Grid POP (a Torus, a Box ...).
- Add an HRLW Geometry POP and wire the geometry into its input.
- 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.
- 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. - 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
materialidattribute (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
TextureIdattribute, 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_popscounts 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
Pprevinstead. - 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.