meetup.20260921 - tixl3d/tixl GitHub Wiki

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