Skip to content
Thomas Mann edited this page Sep 23, 2026 · 1 revision

TiXL Meetup 2026-09-21 / Output System, Projector Calibration & Compute-Shader Point Ops

← Prev | Next →

A 3h58m TiXL developer meet-up: a long walkthrough of the new output system — central outputs bound to displays, slices, physical surfaces measured in metres, straightening a venue photo and calibrating a projector from reference points, a full floor plan with pixel map for an immersive show — plus the new machine-learning beat detection, then a community half on planning a field-driven quadtree effect, dissecting a compute-shader point operator as a template, 3D text curves and fixing their broken tangents.

Introduction

🆕 new feature · 🛠️ improvement · 📘 operator · 📝 walkthrough · 🧠 deep dive · 🍿 showcase · 🎯 planned · 💬 discussion · ⚠️ heads-up

Chapters

  • 0:00 📝 Warm-up: a scrolling text wipe (TileableNoise, DirectionalBlur, AnimVec2)
  • 9:30 📝 A small test scene to route to an output (LoadObj, AdvancedFeedback, DetectEdges)
  • 11:07 🆕 Retiring pinning, fixed resolutions and the screen manager
  • 13:25 🆕 Central outputs: content bound to a display keeps rendering
  • 16:05 🆕 Exporting without a wrapper op, and one render pipeline for player and editor
  • 18:42 📝 The setup view: board, flow outliner, several setups per composition
  • 20:15 🧠 Content, surfaces, outputs, machine-local bindings — and free mirroring
  • 24:04 🆕 Resolution flows: display changes, smart 0×0 canvas, RenderTarget overrides
  • 29:31 ⚠️ Stretched content on a display, and rescaling it in output mode
  • 31:37 📝 Two side-by-side displays from one double-wide output and slices
  • 35:27 🆕 The board in metres: floor line, prop figure, physical surfaces
  • 37:32 📝 Mapping content onto surfaces, and simple corner-pin keystoning
  • 41:44 🍿 Watching the projection live through a webcam (VideoDeviceInput, RemapColor)
  • 44:53 🆕 Reference photos: trace a surface, straighten it, give its lines real lengths
  • 50:53 📝 A band chase on one curtain (LinearGradient, Steps) via a slice region
  • 56:05 🍿 Calibrating a projector by dragging reference points onto the real thing
  • 1:06:00 🍿 Second try on a small table — and this time the mapping fits
  • 1:16:30 🎯 An immersive venue: scaling the LPM Rome floor plan and tracing its walls
  • 1:25:10 📝 An NDI output at the venue's full pixel map; naming the wall patches
  • 1:30:15 ⚠️ Previewing the mapping, and a projector-cam draw stage that isn't ready
  • 1:35:30 💬 Feedback round; setups stored in the project's Meta/Setups folder
  • 1:41:00 🍿 Immersive test content: tori on radial points as an equirectangular room
  • 1:44:05 💬 Knowing the physical space beats rebuilding it with nodes
  • 1:47:18 🎯 Roadmap: projector blending, masks, warp points, brightness correction
  • 1:52:30 💬 The board as a thinking canvas; calibrating lasers and LED strips
  • 1:56:30 ⚠️ Please test it; old demos need a central output, and the two export modes
  • 2:00:20 📝 Switching scenes on a bound output (PickTexture) and NDI inside the setup
  • 2:06:46 🆕 Machine-learning beat detection: a 12 MB CPU model, live test and pitfalls
  • 2:16:00 💬 Q&A: moving an effect between the feedback and post stages
  • 2:19:20 💬 A field-driven quadtree subdivision effect
  • 2:23:24 🧠 Cells as points: a grid, a field picking the level, separator points
  • 2:32:36 📘 CollapseVertices and SubdivisionStretch as existing analogues
  • 2:36:27 🧠 Why sparse point buffers are cheap, and why compacting needs a readback
  • 2:38:11 📝 Duplicating SelectPointsWithSDF as a template, not CustomPointShader
  • 2:42:36 🛠️ Dragging a symbol into another namespace or project
  • 2:44:13 🧠 Anatomy of a compute-shader point operator
  • 2:48:46 📝 Editing the .hlsl in VS Code with HLSL Tools
  • 2:56:01 🧠 register(bN) slots, connection order and the field's injected code
  • 3:01:35 ⚠️ Image fields need their samplers; sampler states and point sampling
  • 3:07:00 📝 Snapping point positions to a raster from a shader parameter
  • 3:14:46 🧠 Sampling the field per point, and log2 subdivision levels
  • 3:18:20 📝 NaN scale as the separator flag
  • 3:20:42 🧠 Spatial hashing, top-down vs. bottom-up, and when the CPU wins
  • 3:29:30 🍿 3D text curves: even resampling, inner points and side loops
  • 3:34:16 📝 Rebuilding broken tangents in a CustomVertexShader
  • 3:40:43 ⚠️ Why the tangents break: no tangent geometry attribute
  • 3:42:32 🍿 A blendable RepeatAtPoints, and stars from TransformSomePoints
  • 3:45:00 💬 Deformable 3D text, flat bevels and the straight-skeleton algorithm
  • 3:49:00 🎯 Linux port: the first Vulkan-rendered frame
  • 3:50:40 💬 Geometry attributes and domains, Houdini-style; wrap-up

Clone this wiki locally